Meross Garage Door Opener
GEM driver for the Meross standalone garage door openers — msg100 (single door) and msg200 (up to three doors). The opener keeps talking to the Meross cloud — the Meross mobile app continues to work alongside GEM — but every GEM command and state read flows over signed HTTP /config on the opener's LAN address.
Prerequisites
- Meross garage opener on the same LAN, already onboarded via the Meross app at least once.
- Meross cloud account credentials. Used only during the one-time
pair command to fetch the per-account key and the device uuid; not used afterward.
Setup steps
- Add the device. In Devices, create a new device with driver
meross_garage. Set ip, username (Meross email), and password (Meross cloud password).
- Pair. Run the
pair command. The driver logs into the Meross cloud, fetches the account key and this opener's uuid, and persists them as secure device attributes. After a successful pair the password can be cleared if desired. Pair runs automatically on first connect when credentials are present.
- Sync zones. Run
sync_zones to enumerate garage door channels and auto-create matching GEM zones — one zone for an msg100, up to three for an msg200. Zones land on the garages subsystem (falls back to gates if garages doesn't exist), with zone.address set to the channel number (0/1/2).
- Verify. State polling fires every
status_interval (default 10 s) and writes state (open / closed) onto each zone based on the door's reed switch.
Attributes
Device — required
| Name | Type | Description |
|---|
ip | string | Opener LAN IP. |
username | string | Meross cloud email. Only used during pair. |
password | string (secure) | Meross cloud password. Only used during pair; can be cleared after. |
Device — optional
| Name | Type | Default | Description |
|---|
cloud_base | string | https://iotx-us.meross.com | Region: US/EU/AP. |
status_interval | int (ms) | 10000 | Polling cadence for door state. |
http_timeout | int (ms) | 5000 | Local HTTP request timeout. |
user_id | string (readonly) | — | Populated by pair. |
uuid | string (readonly) | — | Populated by pair. 32-char hex. Required in every SET payload. |
key | string (secure, readonly) | — | Per-account shared secret. Populated by pair; used to sign every HTTP request. |
model | string (readonly) | — | Auto-detected from hardware block (msg100 / msg200). |
Zone — address
| Field | Description |
|---|
address | Garage door channel number — 0 for msg100; 0/1/2 for msg200. Auto-populated by sync_zones. |
Commands
| Name | Args | Description |
|---|
pair | — | One-time cloud login to fetch the account key + device uuid. Re-runnable safely (e.g. after a password change). |
sync_zones | — | Enumerate door channels on the device and auto-create matching GEM zones. |
open / on | address | Open the door on this channel. |
close / off | address | Close the door on this channel. |
stop | address | No-op — the opener does not support mid-cycle stop. Kept so generic macros don't fault. |
get_state | address | Fetch current open/closed state of one channel. |
get_all | — | Dump Appliance.System.All for diagnostics. |
Known quirks
Appliance.GarageDoor.State SET requires the device uuid in each state entry; without it the firmware silently no-ops. The driver always includes it, but commands fail with a clear error if pair hasn't run.
- The opener does not support a true mid-cycle
stop. The stop verb is implemented as a no-op so macros don't fault.
- State polling reflects the door reed switch:
open=1 → zone state open, open=0 → zone state closed. There is no intermediate "moving" state on the wire.
- The cloud login signs with a hard-coded Meross app secret. Meross occasionally bumps that contract; if
pair fails after a Meross app update the constant may need refreshing.
Troubleshooting
pair fails with bad credentials. Verify email/password against the Meross app and confirm cloud_base matches your region (iotx-us / iotx-eu / iotx-ap).
- Commands return error
5001 "sign error". The stored key is stale (typically because the user changed their Meross password). Re-run pair.
open/close returns no error but the door doesn't move. The uuid attribute is empty. Re-run pair to populate it.
- Door state never updates. Confirm the reed switch is installed and seated; verify status in the Meross app.