Zemismart ZM25 Zigbee howto (Tubular roller blind/shade/cover motor)

@kenny0961, I haven’t tried this yet but you should be able to adjust that with the remote.
I have the same problem but I haven’t installed my motors yet.

If you quickly press the ‘set’ button on the back of the remote until you see 4 on screen, you should be able to switch direction for a specific channel when you press the UP key once. Press UP again to switch direction again.

During this ‘set’ mode 4, UP is for direction change, STOP is for channel lock, DOWN button is for setting slow pause.

After going into ‘set’ mode 4, waiting about 5 seconds without pressing anything should take the remote out of set mdoe 4 and into normal operation mode.

I’ll try this myself too and report back here.

I hope this helps

Even if the motor torque is enought to move a door, this is extemely slow to use with a door. Additioanally you need the following features with sliding doors; you want the ability to 1) optionally trigger the motorized sliding action by manually sliding the door 2) optionally move the door freely without electricity after an initial small resistance. 3) optionally lock movement completely.

I just want to share another thing I realized.
My RF remote is not working very effectively for some reason. Some channels work better than others. This is not a big problem since I’m using my roller motors with home assistant over zigbee.
However, I need the remote to set the upper / lower limits and set the reverse function on the motors.

I found a quick fix to this problem. Holding my finger on the antenna part of the circuit while using the remote solved the problem.


So to make a premanent fix, I soldered a wire to the antenna and hid the wire in the remote enclosure.
This fixed all the remote problems for good. Now it even works from the other side of the room.

I’ve bought a couple of these motors to test them and was hoping that I could set the limits directly from Zigbee2MQTT instead of needing a remote. It looks like it can be done via the Tuya app using their Zigbee gateway, so there might be some custom Zigbee command I can send.

I also have an IR and 433MHz hub running ESPHome that could use to send remote commands. Does anyone else have an RF integration set up with ESPHome? It would be awesome if you could record the signals sent by the remote and reverse engineer the commands for setting upper and lower limits. I’m even tempted to use the 433MHz signals to control the blinds instead of Zigbee, because my WiFi devices tend to be a bit more reliable and faster than my Zigbee network. I already have IR hubs set up to control my air conditioners, and they have support for 433MHz RF as well. I’m using these hubs from AliExpress.

I will probably just order a remote now, but it will take 2-3 weeks to arrive so I am still interested in other methods. (Otherwise I’ll post some info myself once I get the remote and reverse engineer it.)

—-

EDIT: Oh cool, some people seem to have figured out the commands in the comments on this zigbee2mqtt GitHub issue: TS0601 _TZE200_fzo2pocs (Zemismart ZM25TQ) - position and motor speed issue · Issue #11164 · Koenkk/zigbee2mqtt · GitHub

bool,103,1 to set up an upper limit
bool,105,1 to set up the down limit
bool,104,1 to set up the middle limit

3 Likes

Awesome, I was able to set the limits by manually publishing some messages to MQTT.

I wrote a script for Home Assistant to make this easier:

alias: Update Zemismart ZM25 Blind Motor Limit
fields:
  entity_id:
    required: true
    description: Entity ID of your cover entity
    example: cover.blinds
    selector:
      entity:
        filter:
          domain: cover      
  limit:
    required: true
    description: "Type of limit: upper, lower, middle"
    default: upper
    selector:
      select:
        options:
          - upper
          - middle
          - lower
  action:
    required: true
    description: Set or unset limit
    default: set
    selector:
      select:
        options:
          - set
          - unset
mode: single
icon: mdi:blinds
sequence:
  - service: mqtt.publish
    data:
      qos: 0
      retain: false
      topic: >-
        zigbee2mqtt/{{ states[entity_id].attributes.friendly_name
        }}/set/tuya_data_point_test
      payload_template: >-
        bool,{{"103" if limit == "upper" else ("105" if limit == "lower" else
        "104")}},{{"1" if action == "set" else "0"}}     

After you create the script, you can call it from the Developer Tools page:

Or manually with YAML:

service: script.update_zemismart_zm25_blind_motor_limit
data:
  entity_id: cover.blinds
  limit: upper
  action: set

EDIT: Wrote another script to control the direction of the motor:

alias: Configure Zemismart ZM25 Blind Motor Options
fields:
  entity_id:
    required: true
    description: Entity ID of your cover entity
    example: cover.blinds
    selector:
      entity:
        filter:
          domain: cover
  reverse_direction:
    required: true
    description: If the motor should turn in the opposite direction
    default: false
    selector:
      boolean:
mode: single
icon: mdi:blinds
sequence:
  - service: mqtt.publish
    data:
      qos: 0
      retain: false
      topic: >-
        zigbee2mqtt/{{ states[entity_id].attributes.friendly_name
        }}/set
      payload_template: >-
        { "options": { "reverse_direction": {{"true" if reverse_direction else "false"}} } }

You can use this to set reverse_direction to true or false:

9 Likes

Does the remote or Tuya app have any way to adjust the speed? I’d like to make it faster if possible.

EDIT: I found this page: [RELEASE] Zemismart Zigbee Blind Driver - Custom Drivers - Hubitat

It looks like the ZM25TQ motor doesn’t have support for speed. That’s no problem, will have to make do with the current speed.

awesome findings and info.

I have 6 of these motors. They all work at the same speed. However, one of them is more noisy.
I will definitely try your scripts.

1 Like

@ndbroadbent, There is a small problem with your set limit script. In my case set upper and set lower works reversed. set upper sets the lower limit and set lower sets the upper limit. This has to do with my motor having the reverse direction setting. The reverse direction is required when the motor is installed at the opposite side of the blind cylinder and works in reverse in relation the the other blinds. This is mostly done for wiring reasons. For example if you have two blinds next to each other, you might want the motors in the middle so they share the same electrical cable and resultantly one goes in reverse direction.

So when the reverse direction is set for a motor, when using your script, one needs to set upper instead of set lower. I don’t know how this works but this is not a problem with the RF remote. Do you think maybe you could have your script query the reverse_direction and have your script issue the correct command accordingly?

By the way, from the page you shared, it seems like there should be step up and step down commands for these blinds. It would be really awesome if you would also make a script to control the shades with step commands.

1 Like

Hi,
I just wanted to say thank you! I didn’t purchased the remote and in my mind it should indeed be possible to program it via zigbee but I didn’t know how. I used both of your scripts and they work beautiful. (FYI I use the sonoff e dongle). Saves some E-waste as I was not planning on using the remote anyway, only for programming. Thanks again. The HA community is amazing!

1 Like

Hi,

I added this model via ZHA to my HA setup. The action (open/close) part is working fine. The only thing I wish I had is a sensor indicating the battery level of the tubular motor. I wonder if this is a ZHA issue.

Has anyone managed to get the battery status via Zigbee2MQTT or ZHA?

1 Like

I bought the Zemismart ZM25TQ without a remote control.
I tried using your code to set the upper and lower limit, but it says it is invalid.
I must be doing something wrong. :pensive:

If anyone can help me, I will be very grateful

image

image

I can sadly confirm that the battery status is not visible in ZHA for me either. Otherwise, it functionally works fine.

Edit: Battery info doesn’t show in Z2M either for me, and is also discussed here.

Edit 2: Battery info doesn’t show in the native Tuya cloud integration either (when using a Tuya Zigbee gateway). It only shows in the Tuya app in the settings for each device. Very strange way of hiding the battery info.

Hi,

I have 5 of these and 2 of them, although saying connected in Z2M, will simply not respond when clicking up/down. They initially did all work fine, but one day, they simply stopped responding.

I can use the remote to open them, but cannot control them over MQTT,

The one I actually removed from Z2M, factory reset and then tried to join again and it won’t join again either.

UPDATE: I clicked reconfigure on the one that was still connected and now it is working again, however the other one will not join again…

UPDATE2: There is actually another one of the blinds that has stopped responding over MQTT. When I tried reconfigure again, I get:

Failed to configure 'study blinds', attempt 1 (Error: Read 0xb0c7defffefb0871/1 genBasic(["manufacturerName","zclVersion","appVersion","modelId","powerSource",65534], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"srcEndpoint":null,"reservedBits":0,"manufacturerCode":null,"transactionSequenceNumber":null,"writeUndiv":false}) failed (Timeout - 15870 - 1 - 30 - 0 - 1 after 10000ms) at Object.start (/opt/zigbee2mqtt/node_modules/zigbee-herdsman/src/utils/waitress.ts:63:23) at EZSPAdapter.sendZclFrameToEndpointInternal (/opt/zigbee2mqtt/node_modules/zigbee-herdsman/src/adapter/ezsp/adapter/ezspAdapter.ts:492:47) at Queue.execute (/opt/zigbee2mqtt/node_modules/zigbee-herdsman/src/utils/queue.ts:35:20) at Request.send (/opt/zigbee2mqtt/node_modules/zigbee-herdsman/src/controller/helpers/request.ts:79:20) at Endpoint.read (/opt/zigbee2mqtt/node_modules/zigbee-herdsman/src/controller/model/endpoint.ts:466:28) at Object.configureMagicPacket [as configure] (/opt/zigbee2mqtt/node_modules/zigbee-herdsman-converters/src/lib/tuya.ts:378:9) at Configure.configure (/opt/zigbee2mqtt/lib/extension/configure.ts:122:13) at Configure.onMQTTMessage (/opt/zigbee2mqtt/lib/extension/configure.ts:55:21) at EventEmitter.wrappedCallback (/opt/zigbee2mqtt/lib/eventBus.ts:174:17))

Any suggestions?

Thanks

Hi there,

I also plan to use two of such motors. Did you have any clue if it will now work with ZHA?
There are also experiences with the quality especially the battery.

Thanks Micha

Hi,

You should be able to check ZHA compatibility of most stuff from here.

Also here you can find most zigbee devices and what integration they use:
https://zigbee.blakadder.com/all.html

Thank you so much!

Your scripts helped me to setup my ZM25!
It’s my first and I bought without the remote control

OMG thank you for this! this worked flawlessly…well…just upper and lower limit are inverted, because direction of my roller is reversed (and even when setting direction reversed with that second script it still is inverted) but thats just an easy edit in your script!
(i have ZM25TQ)
thanks again :smile:

Hi,

about to get these motors. been reading here, as I understand you are unable to control the position of the blind motors without setting the limits first manually? Before being able to control them in HA?

Thanks.

I have just installed three of these motors and I can report that they work very will with Zigbee2MQTT.

Just having trouble pairing the 9 channel remote to the correct roller blind though (I seem to have three blinds on channel 1 instead of the blind I want to have). Not sure if I can reset the remote back to factory settings.

PS: I found I was able to set the upper and lower limits of the blinds via the MQTT device page. No option for the mid setting though, that needs to be set via the remote.

Hi,

Did you ever happen to resolve this issue? 2 of my 7 roller blind motors are experiencing this issue. They work fine with the FR report and pair to ZHA successfully, however when issuing an open/close command, ZHA the motors do not respond. HA does log that the command was sent.

thanks!