Rollease Automate Pulse 2
Controls Rollease Acmeda Automate motorized shades through the Pulse Hub 2 over its on-LAN WebSocket RPC API. Rollease Automate is the motor platform behind a large number of rebadged shade brands, so this driver covers a wide swath of residential and commercial roller/roman/cellular shade installs.
Each shade motor (a "roller") the hub reports becomes a GEM zone with discrete position control and two-way feedback (position, battery token, signal, online state). Once the hub is paired in the app, no cloud connection is used.
Prerequisites
- Pair the hub in the Automate Pulse 2 mobile app first, over Wi-Fi with internet access. The LAN API does not answer until the hub is commissioned.
- Add and name each shade in the app.
- Give the hub a reserved / static IP so its address is stable.
Do not connect the hub to Ethernet before pairing. Rollease's own guidance is that pairing must happen over Wi-Fi; cabling first makes commissioning fail. After pairing, wired or Wi-Fi both work.
Setup steps
- In Admin → Devices, create a device with driver
rollease_automate_pulse2. - Set the required attribute:
- Hub IP Address — the LAN IP of the Pulse 2 hub. Leave Port at
443.
- Hub IP Address — the LAN IP of the Pulse 2 hub. Leave Port at
- Save. The driver opens a secure WebSocket to the hub and requests the current shade shadow.
- Run the
get_devicescommand to list the roller ids the hub reports. - Create one GEM zone per shade with Address = the roller id from
get_devices, and give the zone a friendly name.
Attribute reference
Device attributes
| Attribute | Required | Default | Description |
|---|---|---|---|
ip | yes | — | LAN IP of the Pulse 2 hub. |
port | no | 443 | Secure WebSocket port. |
status_interval | no | 30000 | Milliseconds between shadow refreshes; also keeps the socket alive. A blank, zero, negative or unparseable value uses 30000; values below 1000 are raised to 1000. |
Zone address
The zone Address is the roller id the hub assigns each motor, exactly as get_devices reports it. Surrounding spaces are ignored. A zone whose address differs from the hub's id only in upper/lower case still receives position feedback, but commands go out with the address as you typed it, so match the case get_devices shows. Friendly names configured in the app are served over a separate, undocumented port and are not read by this driver — name the GEM zones yourself.
Commands
| Command | Args | Effect |
|---|---|---|
open | address | Fully open the shade. |
close | address | Fully close the shade. |
stop | address | Stop a moving shade. |
set_level | address, level | Move to a position, GEM 0–100 where 100 is fully open. |
get_devices | — | List the roller ids the hub currently reports. |
get_status | — | Return the last reported state for every known shade. |
Position model
The Pulse 2 hub speaks a close percent: movePercent / mp where 0 = fully open and 100 = fully closed. GEM shades use an open level (100 = fully open), so the driver inverts between the two:
- Sending
set_level = LtransmitsmovePercent = 100 − L. - A reported
mpbecomes zonelevel = 100 − mp. opensendsmovePercent: 0,closesendsmovePercent: 100,stopsendsstopShade: true.
This keeps open / close / set_level behaving exactly like every other GEM shade driver.
Telemetry
On each shadow the driver reflects, per shade:
| Zone attribute | Source field | Notes |
|---|---|---|
level | mp | Inverted to an open percentage (0–100). |
state | mp | open when level > 0, else closed. |
battery_status | vo | The hub's raw voltage/type token, surfaced verbatim. |
signal | rs | Radio signal strength as reported. |
| zone connection | ol | Online flag drives the zone's connected state. |
Protocol notes
The connection self-heals: if the socket drops, the driver reconnects with capped backoff (5 s → 60 s) and re-requests the shadow so position state is reconciled. The backoff only resets once the hub has actually answered, so a hub that accepts the connection and immediately drops it (for example, one that is not paired yet) keeps backing off (up to once a minute) rather than being redialled every 5 seconds.
If a hub that has been answering stops replying to three refreshes in a row (for example, it lost power without closing the connection), the driver drops the connection and reconnects rather than waiting for the network stack to notice, which can take many minutes. A quiet hub is never dropped as long as it answers the refreshes.
Known limitations
- No friendly names. Shade names entered in the app are read over a separate undocumented port that this driver does not implement. Zones are identified by roller id.
- Battery token is raw. The
vofield combines voltage and motor-type information in a hub-specific encoding; it is surfaced verbatim asbattery_statusrather than decoded into a percentage. - Pulse 2 only. The original Pulse (v1) hub uses a different protocol and is not supported by this driver.
- Hub-mediated. All control goes through the hub; motors are not addressed directly.
Troubleshooting
| Symptom | Check |
|---|---|
| Never connects / immediate close | Hub not paired yet (commission it in the app over Wi-Fi first), wrong IP, or a firewall between GEM and the hub. |
Connects but get_devices is empty | The hub has no shades commissioned, or the first shadow hasn't arrived — wait a few seconds and retry. |
| Shade opens when you meant close | Confirm you are sending GEM levels (100 = open). The driver already inverts the hub's close-percent; do not pre-invert. |
not connected returned from a command | The WebSocket is down and reconnecting. Check the log for rollease pulse2 socket closed / reconnecting. |
| Position lags reality | Lower status_interval for more frequent shadow refreshes. |