HectorziN mascot
HectorziN's blog

Meross MS700: Review, Setup, and Home Assistant & Matter Integration

Controlling your smart home with a smartphone or voice commands is convenient, but having to take out your phone, unlock it, open an app, and find the right light is not always practical. The Meross MS700 addresses this with a versatile smart controller designed for indoor and outdoor use thanks to its water-resistant design. In this in-depth guide, we cover its technical specifications, how it connects through Matter and the MSH450P Hub, and how to integrate it with Home Assistant to control WLED lighting, Zigbee bulbs, or any smart home scene.

On YouTube I share more tutorials, hands-on tests and real smart home setups. Subscribe on YouTube

Meross MS700: Review, Setup, and Integration with Home Assistant and Matter

Related video on YouTube

Video

1. Key Features of the Meross MS700

The Meross MS700 combines versatility, durability, and long battery life in a compact, handheld design:

  • 3 screens and 9 direct actions: It features a configurable display with 3 separate pages. Each page offers 3 dedicated physical buttons, allowing you to assign up to 9 different functions with custom icons and labels.
  • IP66 protection for outdoor use: It is protected against dust and powerful water jets, making it an ideal choice for pergolas, patios, gardens, or pool areas without worrying about exposure to the elements.
  • Long battery life: It runs on a replaceable CR123A, with a manufacturer-estimated battery life of up to 2.5 years (depending on daily use).
  • Built-in temperature and humidity sensors: It does more than send commands: it also monitors the ambient conditions wherever you place it and can report this data to your smart home system.

2. Connectivity: Bluetooth, the MSH450P Hub, and Matter Compatibility

One important thing to know is that the Meross MS700 does not connect directly over Wi-Fi. Instead, it communicates via Bluetooth, which significantly reduces battery consumption.

To connect it to the rest of your smart home, you need the Meross MSH450P Hub:

  1. The hub connects to your home network via Ethernet or Wi-Fi.
  2. It receives button presses from the MS700 over Bluetooth and forwards them to the local network.
  3. The hub supports Matter, making the controls available to platforms such as Apple Home, Google Home, Amazon Alexa and Home Assistant.

3. Home Assistant Integration and Setup

Once you pair the hub with Home Assistant through Matter, the 9 buttons across the 3 screens are exposed as events that can be used as automation triggers (triggers).

The main advantage is that you are not locked into the Meross ecosystem: you can control any device integrated with Home Assistant, regardless of its protocol or manufacturer (Zigbee, Z-Wave, Wi-Fi, ESPHome, etc.).

Practical Example: Pergola and Garden Lighting Control

In a real-world outdoor setup, the 3 screens can be organized by function:

  • Screen 1 (Pergola — White Lighting):
    • Top button: toggle lights on/off.
    • Middle button: increase brightness.
    • Bottom button: decrease brightness.
  • Screen 2 (Pergola — RGB WLED Lighting):
    • Top button: cycle through preset color palettes or colors.
    • Lower buttons: fine-tune brightness.
  • Screen 3 (Garden — Zigbee Lighting):
    • Top button: toggle all garden lights on/off.
    • Lower buttons: move forward or backward through a predefined color cycle. (When controlling bulbs that report slightly different RGB values, the automation finds the closest color in the list before moving to the next one).
yaml
alias: 🎛️ Meross MS700 | Pergola and Garden Control
description: >-
  Control pergola and garden lights using three screens. Cycle through RGB
  colors by matching the closest color in the preset palette.
triggers:
  - trigger: state
    entity_id: event.screen_1_button_1_boton
    not_from:
      - unknown
      - unavailable
    id: p1_b1
  - trigger: state
    entity_id: event.screen_1_button_2_boton
    not_from:
      - unknown
      - unavailable
    id: p1_b2
  - trigger: state
    entity_id: event.screen_1_button_3_boton
    not_from:
      - unknown
      - unavailable
    id: p1_b3
  - trigger: state
    entity_id: event.screen_2_button_1_boton
    not_from:
      - unknown
      - unavailable
    id: p2_b1
  - trigger: state
    entity_id: event.screen_2_button_2_boton
    not_from:
      - unknown
      - unavailable
    id: p2_b2
  - trigger: state
    entity_id: event.screen_2_button_3_boton
    not_from:
      - unknown
      - unavailable
    id: p2_b3
  - trigger: state
    entity_id: event.screen_3_button_1_boton
    not_from:
      - unknown
      - unavailable
    id: p3_b1
  - trigger: state
    entity_id: event.screen_3_button_2_boton
    not_from:
      - unknown
      - unavailable
    id: p3_b2
  - trigger: state
    entity_id: event.screen_3_button_3_boton
    not_from:
      - unknown
      - unavailable
    id: p3_b3
conditions: []
actions:
  - variables:
      colors:
        - - 255
          - 0
          - 0
        - - 255
          - 100
          - 0
        - - 255
          - 255
          - 0
        - - 0
          - 255
          - 0
        - - 0
          - 0
          - 255
        - - 150
          - 0
          - 255
        - - 255
          - 0
          - 120
  - choose:
      - conditions:
          - condition: trigger
            id: p1_b1
        sequence:
          - if:
              - condition: state
                entity_id: light.pergola
                state: 'on'
            then:
              - action: light.turn_off
                target:
                  entity_id: light.pergola
            else:
              - action: light.turn_on
                target:
                  entity_id: light.pergola
                data:
                  rgb_color:
                    - 255
                    - 255
                    - 255
      - conditions:
          - condition: trigger
            id: p1_b2
        sequence:
          - condition: state
            entity_id: light.pergola
            state: 'on'
          - action: light.turn_on
            target:
              entity_id: light.pergola
            data:
              brightness_step_pct: -10
      - conditions:
          - condition: trigger
            id: p1_b3
        sequence:
          - condition: state
            entity_id: light.pergola
            state: 'on'
          - action: light.turn_on
            target:
              entity_id: light.pergola
            data:
              brightness_step_pct: 10
      - conditions:
          - condition: trigger
            id: p2_b1
        sequence:
          - variables:
              current_color: |
                {{ state_attr('light.pergola', 'rgb_color') | list
                   if state_attr('light.pergola', 'rgb_color') != none
                   else [] }}
          - action: light.turn_on
            target:
              entity_id: light.pergola
            data:
              rgb_color: |
                {% if current_color | length == 3 %}
                  {% set ns = namespace(index=0, distance=999999) %}
                  {% for color in colors %}
                    {% set d =
                      (color[0] - current_color[0]) ** 2 +
                      (color[1] - current_color[1]) ** 2 +
                      (color[2] - current_color[2]) ** 2 %}
                    {% if d < ns.distance %}
                      {% set ns.distance = d %}
                      {% set ns.index = loop.index0 %}
                    {% endif %}
                  {% endfor %}
                  {{ colors[(ns.index + 1) % (colors | length)] }}
                {% else %}
                  {{ colors[0] }}
                {% endif %}
      - conditions:
          - condition: trigger
            id: p2_b2
        sequence:
          - condition: state
            entity_id: light.pergola
            state: 'on'
          - action: light.turn_on
            target:
              entity_id: light.pergola
            data:
              brightness_step_pct: -10
      - conditions:
          - condition: trigger
            id: p2_b3
        sequence:
          - condition: state
            entity_id: light.pergola
            state: 'on'
          - action: light.turn_on
            target:
              entity_id: light.pergola
            data:
              brightness_step_pct: 10
      - conditions:
          - condition: trigger
            id: p3_b1
        sequence:
          - action: light.toggle
            target:
              entity_id: light.luces_jardin
      - conditions:
          - condition: trigger
            id: p3_b2
        sequence:
          - variables:
              current_color: |
                {{ state_attr('light.luces_jardin', 'rgb_color') | list
                   if state_attr('light.luces_jardin', 'rgb_color') != none
                   else [] }}
          - action: light.turn_on
            target:
              entity_id: light.luces_jardin
            data:
              rgb_color: |
                {% if current_color | length == 3 %}
                  {% set ns = namespace(index=0, distance=999999) %}
                  {% for color in colors %}
                    {% set d =
                      (color[0] - current_color[0]) ** 2 +
                      (color[1] - current_color[1]) ** 2 +
                      (color[2] - current_color[2]) ** 2 %}
                    {% if d < ns.distance %}
                      {% set ns.distance = d %}
                      {% set ns.index = loop.index0 %}
                    {% endif %}
                  {% endfor %}
                  {{ colors[(ns.index - 1) % (colors | length)] }}
                {% else %}
                  {{ colors[-1] }}
                {% endif %}
      - conditions:
          - condition: trigger
            id: p3_b3
        sequence:
          - variables:
              current_color: |
                {{ state_attr('light.luces_jardin', 'rgb_color') | list
                   if state_attr('light.luces_jardin', 'rgb_color') != none
                   else [] }}
          - action: light.turn_on
            target:
              entity_id: light.luces_jardin
            data:
              rgb_color: |
                {% if current_color | length == 3 %}
                  {% set ns = namespace(index=0, distance=999999) %}
                  {% for color in colors %}
                    {% set d =
                      (color[0] - current_color[0]) ** 2 +
                      (color[1] - current_color[1]) ** 2 +
                      (color[2] - current_color[2]) ** 2 %}
                    {% if d < ns.distance %}
                      {% set ns.distance = d %}
                      {% set ns.index = loop.index0 %}
                    {% endif %}
                  {% endfor %}
                  {{ colors[(ns.index + 1) % (colors | length)] }}
                {% else %}
                  {{ colors[0] }}
                {% endif %}
mode: queued
max: 20

4. Pros and Limitations to Consider

Strengths

  • Easy access for everyone: Anyone at home, including guests, can turn lights on or activate scenes without installing an app or needing access to your smart home system.
  • Built for outdoor use: The IP66 rating provides peace of mind when it comes to rain and outdoor humidity.
  • Energy-efficient operation: Bluetooth connectivity combined with the CR123A battery provides years of use without frequent battery changes.
  • Additional sensors: You can trigger automations based on ambient temperature or humidity (for example, activating ventilation or localized heating).

Areas for Improvement

  • Hub dependency: A proprietary hub is required for connectivity.
  • Button press types: Only single presses are supported for each button (long presses and double clicks are not recognized by the current integration).

Recommended gear

These are the devices used in this project:

Panel / Touchscreen

Other devices

  • Meross Smart Hub MSH450P — Reviewed in the video: Official website (coupon: )

Conclusion

The Meross MS700 is one of the most complete options for anyone looking for a versatile, stylish, and weather-resistant physical controller. Its 9 configurable buttons, together with Matter and Home Assistant compatibility, enable an almost endless range of smart home automations.


Related video