Xiaomi ZNCLDJ12LM

ModelZNCLDJ12LM
VendorXiaomi
DescriptionAqara B1 curtain motor
Exposescover (state, position), battery, running, linkquality
PictureXiaomi ZNCLDJ12LM

Notes

Adapter firmware

In order for this device to work (fully), at least the following firmware is required on your adapter:

Note that if you have already paired the device you will need to repair it after upgrading your adapter firmware.

Configuration of device attributes

By publishing to zigbee2mqtt/FRIENDLY_NAME/set various device attributes can be configured:

{
    "options":{
        "reverse_direction": xxx,
        "hand_open": xxx,
        "reset_limits": xxx
    }
}
1
2
3
4
5
6
7
  • reverse_direction: (true/false, default: false). Device can be configured to act in an opposite direction.
  • hand_open: (true/false, default: true). By default motor starts rotating when you pull the curtain by hand. You can disable this behaviour.
  • reset_limits: (true/false, default: false). Reset the motor. When a path was cleared from obstacles.

You can send a subset of options, all options that won't be specified will be revered to default.

After changing reverse_direction you will need to fully open and fully close the curtain so the motor will re-detect edges. reverse_direction will get new state only after this recalibration.

Lost configuration on long power outage

If motor is used without battery it may lose configuration after long power outage. In that case you need to perform end stops calibration again publishing the following command sequence with topic zigbee2mqtt/FRIENDLY_NAME/set:

  1. { "options": { "reset_limits": true } }
  2. { "state": "close" }
  3. Wait here for curtain closure.
  4. { "state": "open" }

Home Assistant automation example:

- alias: Calibrate curtain
  trigger:
  - platform: homeassistant
    event: start
  action:
  - service: mqtt.publish
    data:
      topic: zigbee2mqtt/<FRIENDLY_NAME>/set
      payload: "{ 'options': { 'reset_limits': true } }"
  - service: cover.close_cover
    entity_id: cover.<COVER_ID>
  - delay:
      seconds: 13 #wait for closure complete
  - service: cover.open_cover
    entity_id: cover.<COVER_ID>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Motor leaves calibration mode automatically after it reaches the both open and close curtain position limits. Calibration is mandatory for proper position reporting and ability to set intermediate positions.

OTA updates

This device supports OTA updates, for more information see OTA updates.

Options

How to use device type specific configuration

  • invert_cover: Inverts the cover position, false: open=100,close=0, true: open=0,close=100 (default false). The value must be true or false

Exposes

Cover

The current state of this cover is in the published state under the state property (value is OPEN or CLOSE). To control this cover publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"state": "OPEN"}, {"state": "CLOSE"}, {"state": "STOP"}. To read the current state of this cover publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"state": ""}. To change the position publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"position": VALUE} where VALUE is a number between 0 and 100.

Battery (numeric)

Remaining battery in %. Value can be found in the published state on the battery property. It's not possible to read (/get) or write (/set) this value. The minimal value is 0 and the maximum value is 100. The unit of this value is %.

Running (binary)

Whether the motor is moving or not. Value can be found in the published state on the running property. It's not possible to read (/get) or write (/set) this value. If value equals true running is ON, if false OFF.

Linkquality (numeric)

Link quality (signal strength). Value can be found in the published state on the linkquality property. It's not possible to read (/get) or write (/set) this value. The minimal value is 0 and the maximum value is 255. The unit of this value is lqi.