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

Thanks, this manual helped me out with everything.

  1. Pairing with the remote
  2. Change motor control direction
  3. Setting limits

Zemismart provided me with the manual for the ZM25 too; I think it’s pretty similar to the one above.

1 Like

Thanks so much the printed instructions with my motors was wrong for the limit setting with their RF 9 channel. You saved me a lot of pain!

Hi, I’m planning to use one of these for one of my DIY project. Do you happen to know if the tube can be turned by hand still? I’d assume it might mess up the limits, but let’s assuming there is no power, can you still operate by hand? I’m actually planning to us it in a sliding door, so even if there is power, I might open it by hand, but then the closing would be automatic.

I guess you can not. it is pretty stiff.
I mean it’s more stiff than you might want to manually do anything with it.

Hi I have two blinds at right angles. I have a double mains socket in the middle just above the point the two blinds meet. I’d therefore like to install the motor on the Right Hand side of the Left blind and on the Left Hand side of the Right blind. This way the mains cords will be really close to the mains socket. I believe this will mean the motor direction of travel will be different on each blind. How can I ensure that that they both go up and down using the up and down button on the 9 channel remote. Any advice, gratefully received. Kenny

Ik heb het antwoord hier gevonden:

@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:

6 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