Aqara blind motor ZNJLBL01LM not update position unless manually update position in Z2M

Got the ZNJLBL01LM (or lumi.curtain.acn002) integrated successfully to HA via Z2M. Open/Close/Stop works ok. Able to call “Cover: Set position” service and the blind go to the correct position. However, the position property never been updated, unless I had to press the refresh position button in the Z2M (see below). Any clue, and workaround? I can live with it if I can somehow call the position refresh function of Z2M from a HA script whenever I set a position. Is it possible?

2 Likes

Anyone has the same problem? :neutral_face:

3 Likes

Ey, I have the same problem using a Combee II stick and the latest firmware on the blind motors

Fixed the issue by upgrading the firmware of the Combee II stick as described in the docs: Xiaomi ZNJLBL01LM control via MQTT | Zigbee2MQTT

Surprisingly I didn’t need to repair any device…

1 Like

I have the exact same issue, but my controller (Sonoff USB 3.0 plus) has the latest firmware on (20230507)

Positron: 100 for me is open. The blind is currently close, so should be 0


As per the MQTT link above, if I publish a get message, the status does come back:

The automation I have set up to open it when it gets bright enough, and close it when it gets dark - I could just add a delay and an mqtt publish like above. But I shouldn’t have to surely?

I haven’t done a repair (not sure how), so could be that…

Also, regrettably, my device name has a space in, which comes through in the topic. Although it seems to work otherwise

Tried this. Updating the Conbee II firmware to the recent 2022-05-15 firmware, didn’t work for me. Any tips?

If it helps, I ended up putting in place a periodic check:

description: >-
  A hardware button press does not call MQTT, so we have to check it
  periodically. Have minimised check by only running if motion within that 5
  mins.
mode: single
trigger:
  - platform: time_pattern
    minutes: /5
condition:
  - condition: template
    value_template: >-
      {{ (as_timestamp(now()) -
      as_timestamp(states.binary_sensor.hue_motion_kitchen_motion.last_changed))
      <= 300 }}
action:
  - service: mqtt.publish
    data:
      qos: "1"
      topic: zigbee2mqtt/Kitchen Blind/get
      payload: "{\"position\":\"\"}"
  - service: mqtt.publish
    data:
      qos: "1"
      topic: zigbee2mqtt/Kitchen Blind/get
      payload: "{\"state\":\"\"}"

And i also have an automation which triggers when a SET happens, and then does a get on position/state, which keeps it in sync with a dashboard i have:

alias: Kitchen - Blinds - Update state when a SET happens
description: >-
  Triggered on MQTT SET on the kitchen blind, and calls to update the
  state/position after a delay. Simplifies a call to open/close the cover
  (blind).
mode: single
trigger:
  - platform: mqtt
    topic: zigbee2mqtt/Kitchen Blind/set
action:
  - delay:
      hours: 0
      minutes: 0
      seconds: 22
      milliseconds: 0
  - service: mqtt.publish
    data:
      qos: "1"
      topic: zigbee2mqtt/Kitchen Blind/get
      payload: "{\"position\":\"\"}"
  - service: mqtt.publish
    data:
      qos: "1"
      topic: zigbee2mqtt/Kitchen Blind/get
      payload: "{\"state\":\"\"}"
  - delay:
      hours: 0
      minutes: 0
      seconds: 3
      milliseconds: 0
  - service: mqtt.publish
    data:
      qos: "1"
      topic: zigbee2mqtt/Kitchen Blind/get
      payload: "{\"position\":\"\"}"
  - service: mqtt.publish
    data:
      qos: "1"
      topic: zigbee2mqtt/Kitchen Blind/get
      payload: "{\"state\":\"\"}"

Shout if you need a hand with the MQTT stuff. I looked at the logs from the server to figure out which topic it was using etc

HTHs

1 Like