Zigbee Write Issue

Device is connected directly to Homey without any routers, device is SED.
After 1 pair, any writes works correctly:

  1. received frame writeAttributesAtomic.response [ AttributeResponse { status: ‘SUCCESS’, id: 0 } ]
  2. received frame reportAttributes

After App reinstall (after Zigbee device reconnect) only 1 write request works like above sometime works more then 1, next write requests reports [ AttributeResponse { status: ‘SUCCESS’, id: 0 } ], but attribute value was not set.

All writes are correct, there is no issues I 100% know. Is it a Homey Pro Zigbee Issue, and can it be fixed

@Kraineff please be aware that this is a community based topic, which Athom is not actively reading. If there are issues with the Zigbee behavior, I would suggest reporting them in the homey-zigbeedriver repository as you did before.

On topic, you’re referring to a SED device that in it nature is a sleeping device.
Typical Zigbee devices I have seen have a different wake state the first hour(s) after inclusion and will then go more into a sleeping state. Which could explain the difference.

You’re not sharing the code used as well as the error report received when you try to write the attribute. So I can’t judge if your statement that it is 100% sure a Homey Pro Zigbee issue is true.

Have you tried using the PollControl cluster to determine the wake-up interval if the SED?
If the wake-up interval of the SED is longer then the time-out time of writing the attribute, this issue could occur.

Which should be possible to resolve from two sides: setting a shorter wake-up interval from the app side or having an option to extend the time-out time in writing an attribute.

Hey! Thank you for you answer, here is more info. Device is “EndDevice”.

Here is a Debug Log
// Success and got report
[log] 2022-11-07 02:11:23 [ManagerDrivers] [Driver:thermostatTest] [Device:6f15705a-43f3-48e4-acd4-a8ec9d7f56c2] set target_temperature → 27 (cluster: thermostat, endpoint: 1)
2022-11-07T02:11:23.843Z zigbee-clusters:cluster ep: 1, cl: thermostat (513) write attributes { occupiedHeatingSetpoint: 2700 } 
2022-11-07T02:11:23.854Z zigbee-clusters:cluster ep: 1, cl: thermostat (513) send frame ZCLStandardHeader {
  frameControl: [],
  data: thermostat.writeAttributes { attributes: <Buffer 12 00 29 8c 0a> },
  cmdId: 2,
  trxSequenceNumber: 1
}
2022-11-07T02:11:26.921Z zigbee-clusters:cluster ep: 1, cl: thermostat (513) received frame writeAttributesAtomic.response thermostat.writeAttributesAtomic.response {
  attributes: [ AttributeResponse { status: 'SUCCESS', id: 0 } ]
}
2022-11-07T02:11:27.276Z zigbee-clusters:cluster ep: 1, cl: thermostat (513) received frame reportAttributes thermostat.reportAttributes { attributes: <Buffer 12 00 29 8c 0a> }
[log] 2022-11-07 02:11:27 [ManagerDrivers] [Driver:thermostatTest] [Device:6f15705a-43f3-48e4-acd4-a8ec9d7f56c2] handle report (cluster: thermostat, capability: target_temperature), parsed payload: 27

// Success and got report
[log] 2022-11-07 02:11:31 [ManagerDrivers] [Driver: thermostatTest] [Device:6f15705a-43f3-48e4-acd4-a8ec9d7f56c2] set target_temperature → 30 (cluster: thermostat, endpoint: 1)
2022-11-07T02:11:31.654Z zigbee-clusters:cluster ep: 1, cl: thermostat (513) write attributes { occupiedHeatingSetpoint: 3000 } 
2022-11-07T02:11:31.657Z zigbee-clusters:cluster ep: 1, cl: thermostat (513) send frame ZCLStandardHeader {
  frameControl: [],
  data: thermostat.writeAttributes { attributes: <Buffer 12 00 29 b8 0b> },
  cmdId: 2,
  trxSequenceNumber: 2
}
2022-11-07T02:11:31.925Z zigbee-clusters:cluster ep: 1, cl: thermostat (513) received frame writeAttributesAtomic.response thermostat.writeAttributesAtomic.response {
  attributes: [ AttributeResponse { status: 'SUCCESS', id: 0 } ]
}
2022-11-07T02:11:32.283Z zigbee-clusters:cluster ep: 1, cl: thermostat (513) received frame reportAttributes thermostat.reportAttributes { attributes: <Buffer 12 00 29 b8 0b> }
[log] 2022-11-07 02:11:32 [ManagerDrivers] [Driver:thermostatTest] [Device:6f15705a-43f3-48e4-acd4-a8ec9d7f56c2] handle report (cluster: thermostat, capability: target_temperature), parsed payload: 30

// Success but no report and value was not set on device
[log] 2022-11-07 02:11:37 [ManagerDrivers] [Driver:thermostatTest] [Device:6f15705a-43f3-48e4-acd4-a8ec9d7f56c2] set target_temperature → 28.5 (cluster: thermostat, endpoint: 1)
2022-11-07T02:11:37.348Z zigbee-clusters:cluster ep: 1, cl: thermostat (513) write attributes { occupiedHeatingSetpoint: 2850 } 
2022-11-07T02:11:37.352Z zigbee-clusters:cluster ep: 1, cl: thermostat (513) send frame ZCLStandardHeader {
  frameControl: [],
  data: thermostat.writeAttributes { attributes: <Buffer 12 00 29 22 0b> },
  cmdId: 2,
  trxSequenceNumber: 3
}
2022-11-07T02:11:37.932Z zigbee-clusters:cluster ep: 1, cl: thermostat (513) received frame writeAttributesAtomic.response thermostat.writeAttributesAtomic.response {
  attributes: [ AttributeResponse { status: 'SUCCESS', id: 0 } ]
}

// Success but no report and value was not set on device
[log] 2022-11-07 02:11:44 [ManagerDrivers] [Driver:thermostatTest] [Device:6f15705a-43f3-48e4-acd4-a8ec9d7f56c2] set target_temperature → 30 (cluster: thermostat, endpoint: 1)
2022-11-07T02:11:44.936Z zigbee-clusters:cluster ep: 1, cl: thermostat (513) write attributes { occupiedHeatingSetpoint: 3000 } 
2022-11-07T02:11:44.939Z zigbee-clusters:cluster ep: 1, cl: thermostat (513) send frame ZCLStandardHeader {
  frameControl: [],
  data: thermostat.writeAttributes { attributes: <Buffer 12 00 29 b8 0b> },
  cmdId: 2,
  trxSequenceNumber: 4
}
2022-11-07T02:11:45.912Z zigbee-clusters:cluster ep: 1, cl: thermostat (513) received frame writeAttributesAtomic.response thermostat.writeAttributesAtomic.response {
  attributes: [ AttributeResponse { status: 'SUCCESS', id: 0 } ]
}
Also when first pair or after device rejoin network I started to receive this
2022-11-07T01:35:35.924Z zigbee-clusters:endpoint ep: 1, cl: time (10), error while handling frame binding_unavailable {
  meta: { transId: 0, linkQuality: 86, dstEndpoint: 1, timestamp: 14987922 },
  frame: ZCLStandardHeader {
    frameControl: Bitmap [ disableDefaultResponse ],
    trxSequenceNumber: 5,
    cmdId: 0,
    data: <Buffer 02 00 00 00>
  }
}

This WRITE issue not just for THERMOSTAT cluster occupiedHeatingSetpoint attr, also for MS cluster attrs that I tested. If WRITE works at the first initialization and several times after rejoin, it doesn’t look like a Homey error, but then how to fix it?

No bindings are required. This is all the necessary information that relates to this problem, everything else, reports, get, custom cluster attributes, this.registerCapability setter & getter & report works perfectly! Yes, and WRITEs work fine, but not for long :slight_smile:

Additional info, after ~10+ minutes after “FAILED” WRITE new WRITEs works, but not always.