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

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:

11 Likes