Aqara TVOC Air Quality Monitor

The TVOC Air Quality Monitor measures temperature, humidity and air quality (VOC).
The VOC measurements are refreshed quite often and the values shown in Nymea appear reasonably recent.
The humidity are refreshed a few times and then seem to be stuck at a constant value, even when the display on the device itself shows changing values.
Recently, the temperature readings are also refreshed very rarely. A few days before this did not seem to be the case.
The protocol for the temperature readings looks like this:


This gives the impression that the temperature difference is only reported in increments of half degrees (Centigrade).
The graph makes this visible, too:
Bildschirmfoto vom 2023-03-25 09-19-33
(The graph does not mark the individual readings; it only shows the connections between the dots. This makes it a bit hard to see which are the actual readings).
The handling of the battery state also seems a bit strange. Even though the battery level is reported at 100%, it is reported as ‘critical’ at the same time:

Hmm, odd… nymea configures the attribute reporting to a minimum change of 0.1 °C… For testing I’ve decreased that to a value of 0.01°C now… let’s see how that goes (still building. next experimental update)

Hold your horses! There’s something funny going on.

I replaced the TVOC Air Quality Monitor with another copy of the same model. This other instance worked flawlessly with Home Assistant, giving plausible readings for all three measured values plus several items of management data such as battery level and such.

The device has now been managed by Nymea from yesterday 2023-03-25 13:24 until now, 2023-03-26 22:49

During the first few hours the temperature readings differ by very small increments (with a series going 19.99, 19.97, 19.96, 19.97, 19.98, 19.94) at intervals of roughly 20 minutes each.
It seems to keep up that pace until 2023-03-26 00:13. Since then, exactly two temperature readings are logged, one at 06:26 and the last one at 13:26.

In the same time since connecting to Nymea there are six reports on the battery level, reading 100%, 0%, 100%, 33%, 0%,100%, respectively. In all this time the ‘battery leve critical’ (sic!) remains at ‘true’; in fact, the log does not contain a single reading for that value.

There are exactly two readings for Humidity and zero readings for VOC.

In the same time span the readings for another temperature sensor (Tuyatec) appear entirely plausible and presumably correct. The physical distance between the two devices is about ten centimetres, so that both ventilation and radio reception should be identical to all intents and purposes.

Both TVOC monitors (the one I used until 2023-03-25 13:24 and the one I used from then on) perform quite satisfactorily with Home Assistant, so that I would rule out a hardware defect at the moment.

I find it quite unexpected that the log does not start with values for all attributes of the device. Is that normal?

ok… now, for the not reporting attributes, I’m still not sure why… Does your HA setup use zigbee2mqtt as zigbee backend or is that something different? I’ve compared the nymea code with the zigbee2mqtt code, and while obviously the code itself is quite different, in the end, what is sent through the zigbee network should really come down to the same, at least for the attribute reporting configuration for temp, humidity and voc.

Anyhow, let’s see if the latest change has some positive effects. It’s still not built as github changed their SSH keys and we’re hitting some build failures in the pipeline because of that still. Shouldn’t take long any more though.

Then, for the battery: I’ve now added debug prints for every attribute change of the power configuration cluster, which is the one giving the battery values. It’s strange though that the battery critical flag is set even when the percentage is at 100%. If the device has capabilities to report a “battery critical” flag, nymea will use that, else it would set it on its own if the percentage is less than 10%. So this currently makes me thinking that the device does have this flag, but for some reason it’s always set to true. Again, let’s see what your logs report on that after the next build.

The integration in HA I’m using is ZHA.

I seem to remember seeing ‘battery leve critical’ entries in the log a few days ago, so the device is capable of sending that, or at least the other instance I was using then was. There is no entry in the current log I mentioned in my previous post.

The details window shows values for which there is no entry in the log, such as signal strength and version. This might imply that the initial values read from the device are not logged or that I am seeing default values coded into the driver.

Hmm. When I say log, i mean the console logs of nymea. Go to system settings, developer tools and enable the debug interface. Open that in the browser and go to the last tab, the logs tab. There enable the debug logging for the zigbeelumi plugin and then check the live log above, or use “journalctl -u nymead -f” from a terminal.

I deleted the device from Nymea and added it again. This is the log, starting just before I opened the ZigBee network for new devices:

W | ZigbeeNetwork: Failed to send request to device Request(ID:93, Zigbee::ZigbeeProfileDevice, ZigbeeDeviceProfile::IeeeAddressRequest, NWK address:“0xb103”, Destination EP:“0x00”, Source EP:“0x00”, Radius:0, QFlagsZigbee::ZigbeeTxOption(ZigbeeTxOptionAckTransmission), “0x00 0x03 0xb1 0x00 0x00”) ZigbeeNetworkReply::ErrorZigbeeMacStatusError Zigbee::ZigbeeMacLayerStatusTransactionExpired
W | ZigbeeDeviceObject: Failed to send request ZigbeeDeviceProfile::IeeeAddressRequest ZigbeeNode(0xb103, 00:00:00:00:00:00:00:00, 0x0000, End device, RxOn:false) Zigbee::ZigbeeMacLayerStatusTransactionExpired
W | ZigbeeDeviceObject: ZDO request error for TSN: 0
W | ZigbeeNode: Failed to request IEEE address from unrecognized ZigbeeNode(0xb103, 00:00:00:00:00:00:00:00, 0x0000, End device, RxOn:false) ZigbeeDeviceObjectReply::ErrorZigbeeMacStatusError
W | ZigbeeNetwork: Failed to send request to device Request(ID:94, Zigbee::ZigbeeProfileDevice, ZigbeeDeviceProfile::MgmtLeaveRequest, NWK address:“0xb103”, Destination EP:“0x00”, Source EP:“0x00”, Radius:0, QFlagsZigbee::ZigbeeTxOption(ZigbeeTxOptionAckTransmission), “0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00”) ZigbeeNetworkReply::ErrorZigbeeMacStatusError Zigbee::ZigbeeMacLayerStatusTransactionExpired
W | ZigbeeDeviceObject: Failed to send request ZigbeeDeviceProfile::MgmtLeaveRequest ZigbeeNode(0xb103, 00:00:00:00:00:00:00:00, 0x0000, End device, RxOn:false) Zigbee::ZigbeeMacLayerStatusTransactionExpired
W | ZigbeeDeviceObject: ZDO request error for TSN: 1
W | ZigbeeNode: Failed to request unrecognized node to leave the network ZigbeeNode(0xb103, 00:00:00:00:00:00:00:00, 0x0000, End device, RxOn:false) ZigbeeDeviceObjectReply::ErrorZigbeeMacStatusError
W | ZigbeeNetwork: Received a ZCL indication from an unrecognized node. Checking IEEE address for this node APSDE-DATA.indication(NWK address:“0x0000”, Destination EP:“0x01”, Source EP:“0x01”, Source NWK address:“0xb103”, Zigbee::ZigbeeProfileHomeAutomation, ZigbeeClusterLibrary::ClusterId(64704), ASDU: “0x1c 0x5f 0x11 0xf7 0x0a 0xfc 0x00 0x10 0x00”, LQI: 255, RSSI: -30dBm)
W | ZigbeeNetwork: Could not find any node with IEEE address “54:EF:44:10:00:62:6D:A4” Requesting node to leave the network “0xb103”
W | ZigbeeLumi: No analog input cluster on this endpoint
W | ZigbeeLumi: Analog input cluster not found on Thing(TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01), id: {6683d58b-9fe1-4b4d-a018-55b52491fca6}, ThingClassId: {1a9fb2ea-543e-46b2-a10d-9a977232367b})
W | ZigbeeController: Controller busy. Rescheduling command.
W | ZigbeeController: Controller busy. Rescheduling command.
I | ZigbeeLumi: Thing(TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01), id: {6683d58b-9fe1-4b4d-a018-55b52491fca6}, ThingClassId: {1a9fb2ea-543e-46b2-a10d-9a977232367b}) Unhandled attribute report: ZigbeeClusterAttribute(0x00f7, ZigbeeDataType(Octet string, !(!�!))
W | ZigbeeController: Controller busy. Rescheduling command.
W | ZigbeeController: Controller busy. Rescheduling command.
W | ZigbeeController: Controller busy. Rescheduling command.
W | ZigbeeCluster: Attribute status record “0x0021” finished with error ZigbeeClusterLibrary::StatusUnsupportedAttribute
W | ZigbeeCluster: Failed to parse attribute data 0x349b1f0 0x31fc050 ZigbeeCluster(0x0001, PowerConfiguration, Server) ZigbeeClusterAttribute(0x003e, ZigbeeDataType(32-bit bitmap, 0x00 0x00 0x00 0x00))
I | ZigbeeLumi: Temperature for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 19.95
I | ZigbeeLumi: Humidity for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 45.48
I | ZigbeeLumi: Thing(TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01), id: {6683d58b-9fe1-4b4d-a018-55b52491fca6}, ThingClassId: {1a9fb2ea-543e-46b2-a10d-9a977232367b}) Display unit 1
I | ZigbeeLumi: Humidity for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 45.48
I | ZigbeeLumi: Thing(TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01), id: {6683d58b-9fe1-4b4d-a018-55b52491fca6}, ThingClassId: {1a9fb2ea-543e-46b2-a10d-9a977232367b}) Unhandled attribute report: ZigbeeClusterAttribute(0x0129, ZigbeeDataType(Unsigned 8-bit integer, 0x01))
W | ZigbeeNetwork: ZigbeeNode(0x5687, 54:EF:44:10:00:62:6D:A4, LUMI (0x115f), lumi.airmonitor.acn01, End device, RxOn:false) cluster ZigbeeCluster(0x000c, AnalogInput, Server) added on endpoint 1 but the node has already been initialized. This node is out of spec. Saving the node nethertheless…
W | ZigbeeNetwork: ZigbeeNode(0x5687, 54:EF:44:10:00:62:6D:A4, LUMI (0x115f), lumi.airmonitor.acn01, End device, RxOn:false) cluster ZigbeeCluster(0x000c, AnalogInput, Server) added on endpoint 1 but the node has already been initialized. This node is out of spec. Saving the node nethertheless…
W | ZigbeeLumi: Failed to configure temperature measurement cluster attribute reporting ZigbeeClusterReply::ErrorTimeout
W | ZigbeeDeviceObject: ZDO request error for TSN: 8
W | ZigbeeNode: Failed to read binding table ZigbeeDeviceObjectReply::ErrorTimeout
I | ZigbeeLumi: Thing(TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01), id: {6683d58b-9fe1-4b4d-a018-55b52491fca6}, ThingClassId: {1a9fb2ea-543e-46b2-a10d-9a977232367b}) Unhandled attribute report: ZigbeeClusterAttribute(0x0129, ZigbeeDataType(Unsigned 8-bit integer, 0x01))

After upgrading and restarting the core, I now have entries in the protocol for Battery leve critical (false) (with the trailing ‘l’ in ‘level’ still missing, BTW), Available (true), VOC and Temperature. After half an hour still no readings for Humidity, but I don’t need those anyway.

So… I’ve read through your logs last night and apparently this device does not list all the capabilities directly upon connect but only makes them appear afterwards. As seen on this log line:

W | ZigbeeNetwork: ZigbeeNode(0x5687, 54:EF:44:10:00:62:6D:A4, LUMI (0x115f), lumi.airmonitor.acn01, End device, RxOn:false) cluster ZigbeeCluster(0x000c, AnalogInput, Server) added on endpoint 1 but the node has already been initialized. This node is out of spec. Saving the node nethertheless…

This is violating the ZigBee specification but with some additional handling nymea should still be able to deal with this. I’ve added those handlers last night and with the latest update from today it should hopefully work better.

Can you please paste the logs regarding the battery level? Ideally also wait until it says “battery level critical” and then fetch the logs so I can see where that’s coming from.

About the humidity… that’s really odd… I’d really like to get that working properly even if you’re not using it…

Software updated (after some antics). Just now I have logged the following actions:

  • Removing the device from Nymea. The device now shows that is has been disconnected by flashing the display and removing the icon that indicates that it’s connected. I don’t think it did that before.
  • Adding the device to Nymea
  • pressing the button on the device (at about 16:43)
  • breathing into the device
    with the following log entries.

I | ZigbeeLumi: Humidity for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 48.58
W | ZigbeeNetwork: Received a ZDO indication for an unrecognized node. There is no such node in the system. Ignoring indication APSDE-DATA.indication(NWK address:“0x0000”, Destination EP:“0x00”, Source EP:“0x00”, Source NWK address:“0x3dcf”, Zigbee::ZigbeeProfileDevice, ZigbeeDeviceProfile::MgmtLeaveResponse, ASDU: “0x09 0x00”, LQI: 255, RSSI: -37dBm)
W | ZigbeeLumi: Failed to configure temperature measurement cluster attribute reporting ZigbeeClusterReply::ErrorTimeout
W | ZigbeeDeviceObject: ZDO request error for TSN: 8
W | ZigbeeNode: Failed to read binding table ZigbeeDeviceObjectReply::ErrorTimeout
W | ZigbeeNetwork: Failed to send request to device Request(ID:97, Zigbee::ZigbeeProfileDevice, ZigbeeDeviceProfile::IeeeAddressRequest, NWK address:“0x3dcf”, Destination EP:“0x00”, Source EP:“0x00”, Radius:0, QFlagsZigbee::ZigbeeTxOption(ZigbeeTxOptionAckTransmission), “0x00 0xcf 0x3d 0x00 0x00”) ZigbeeNetworkReply::ErrorZigbeeNwkStatusError Zigbee::ZigbeeNwkLayerStatusRouteDiscoveryFailed
W | ZigbeeDeviceObject: Failed to send request ZigbeeDeviceProfile::IeeeAddressRequest ZigbeeNode(0x3dcf, 00:00:00:00:00:00:00:00, 0x0000, End device, RxOn:false) Zigbee::ZigbeeNwkLayerStatusRouteDiscoveryFailed
W | ZigbeeDeviceObject: ZDO request error for TSN: 0
W | ZigbeeNode: Failed to request IEEE address from unrecognized ZigbeeNode(0x3dcf, 00:00:00:00:00:00:00:00, 0x0000, End device, RxOn:false) ZigbeeDeviceObjectReply::ErrorZigbeeNwkStatusError
W | ZigbeeDeviceObject: ZDO request error for TSN: 9
W | ZigbeeNode: Failed to send management leave request to ZigbeeNode(0x3dcf, 54:EF:44:10:00:62:6D:A4, LUMI (0x115f), lumi.airmonitor.acn01, End device, RxOn:false) ZigbeeDeviceObjectReply::ErrorTimeout
W | ZigbeeNode: This node is gonna be removed internally. TODO: try to remove using ZDO once it shows up the next time.
W | ZigbeeNetwork: Failed to send request to device Request(ID:99, Zigbee::ZigbeeProfileDevice, ZigbeeDeviceProfile::MgmtLeaveRequest, NWK address:“0x3dcf”, Destination EP:“0x00”, Source EP:“0x00”, Radius:0, QFlagsZigbee::ZigbeeTxOption(ZigbeeTxOptionAckTransmission), “0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00”) ZigbeeNetworkReply::ErrorZigbeeNwkStatusError Zigbee::ZigbeeNwkLayerStatusRouteDiscoveryFailed
W | ZigbeeDeviceObject: Failed to send request ZigbeeDeviceProfile::MgmtLeaveRequest ZigbeeNode(0x3dcf, 00:00:00:00:00:00:00:00, 0x0000, End device, RxOn:false) Zigbee::ZigbeeNwkLayerStatusRouteDiscoveryFailed
W | ZigbeeDeviceObject: ZDO request error for TSN: 1
W | ZigbeeNode: Failed to request unrecognized node to leave the network ZigbeeNode(0x3dcf, 00:00:00:00:00:00:00:00, 0x0000, End device, RxOn:false) ZigbeeDeviceObjectReply::ErrorZigbeeNwkStatusError
W | ZigbeeLumi: No analog input cluster on this endpoint
W | ZigbeeLumi: Analog input cluster not found on Thing(TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01), id: {bac560c5-ec4a-4f50-a8c5-6461c2ce5fb8}, ThingClassId: {1a9fb2ea-543e-46b2-a10d-9a977232367b})
I | ZigbeeLumi: Connecting to OTA cluster for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)”
I | ZigbeeLumi: Sending image notify to “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)”
W | ZigbeeController: Controller busy. Rescheduling command.
W | ZigbeeController: Controller busy. Rescheduling command.
I | ZigbeeLumi: Sending image notify to “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)”
I | ZigbeeLumi: Thing(TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01), id: {bac560c5-ec4a-4f50-a8c5-6461c2ce5fb8}, ThingClassId: {1a9fb2ea-543e-46b2-a10d-9a977232367b}) Unhandled attribute report: ZigbeeClusterAttribute(0x00f7, ZigbeeDataType(Octet string, !
(!�!))
W | ZigbeeController: Controller busy. Rescheduling command.
W | ZigbeeController: Controller busy. Rescheduling command.
W | ZigbeeController: Controller busy. Rescheduling command.
W | ZigbeeController: Controller busy. Rescheduling command.
W | ZigbeeController: Controller busy. Rescheduling command.
W | ZigbeeCluster: Attribute status record “0x0021” finished with error ZigbeeClusterLibrary::StatusUnsupportedAttribute
I | ZigbeeLumi: *** “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” Power configuration cluster attribute changed: ZigbeeClusterAttribute(0x0020, ZigbeeDataType(Unsigned 8-bit integer, 0x1c))
I | ZigbeeLumi: *** “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” Power configuration cluster attribute changed: ZigbeeClusterAttribute(0x003e, ZigbeeDataType(32-bit bitmap, 0x00 0x00 0x00 0x00))
W | ZigbeeCluster: Failed to parse attribute data 0xf34548 0x28ed48 ZigbeeCluster(0x0001, PowerConfiguration, Server) ZigbeeClusterAttribute(0x003e, ZigbeeDataType(32-bit bitmap, 0x00 0x00 0x00 0x00))
I | ZigbeeLumi: Temperature for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 20.21
I | ZigbeeLumi: Humidity for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 48.4
W | ZigbeeCluster: Attribute status record “0x0021” finished with error ZigbeeClusterLibrary::StatusUnsupportedAttribute
I | ZigbeeLumi: *** “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” Power configuration cluster attribute changed: ZigbeeClusterAttribute(0x0020, ZigbeeDataType(Unsigned 8-bit integer, 0x1c))
I | ZigbeeLumi: *** “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” Power configuration cluster attribute changed: ZigbeeClusterAttribute(0x003e, ZigbeeDataType(32-bit bitmap, 0x00 0x00 0x00 0x00))
W | ZigbeeCluster: Failed to parse attribute data 0xf34548 0x28ed48 ZigbeeCluster(0x0001, PowerConfiguration, Server) ZigbeeClusterAttribute(0x003e, ZigbeeDataType(32-bit bitmap, 0x00 0x00 0x00 0x00))
I | ZigbeeLumi: Thing(TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01), id: {bac560c5-ec4a-4f50-a8c5-6461c2ce5fb8}, ThingClassId: {1a9fb2ea-543e-46b2-a10d-9a977232367b}) Display unit 1
I | ZigbeeLumi: Requesting OTA for manufacturer code: 4447 image type: 9480 current file version: 29 model name: “lumi.airmonitor.acn01”
I | ZigbeeLumi: “Device TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01) requested firmware. Old version: 0.0.0.29, no new version available.”
I | ZigbeeLumi: Humidity for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 48.4
W | ZigbeeLumi: Failed to configure temperature measurement cluster attribute reporting ZigbeeClusterReply::ErrorTimeout
W | ZigbeeDeviceObject: ZDO request error for TSN: 8
W | ZigbeeNode: Failed to read binding table ZigbeeDeviceObjectReply::ErrorTimeout
I | ZigbeeLumi: Image notify command finished ZigbeeClusterReply::ErrorTimeout
I | ZigbeeLumi: Thing(TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01), id: {bac560c5-ec4a-4f50-a8c5-6461c2ce5fb8}, ThingClassId: {1a9fb2ea-543e-46b2-a10d-9a977232367b}) Unhandled attribute report: ZigbeeClusterAttribute(0x0129, ZigbeeDataType(Unsigned 8-bit integer, 0x01))
W | ZigbeeNetwork: ZigbeeNode(0xbe7c, 54:EF:44:10:00:62:6D:A4, LUMI (0x115f), lumi.airmonitor.acn01, End device, RxOn:false) cluster ZigbeeCluster(0x000c, AnalogInput, Server) added on endpoint 1 but the node has already been initialized. This node is out of spec. Saving the node nethertheless…
W | ZigbeeNetwork: ZigbeeNode(0xbe7c, 54:EF:44:10:00:62:6D:A4, LUMI (0x115f), lumi.airmonitor.acn01, End device, RxOn:false) cluster ZigbeeCluster(0x000c, AnalogInput, Server) added on endpoint 1 but the node has already been initialized. This node is out of spec. Saving the node nethertheless…
I | ZigbeeLumi: Temperature for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 20.24
I | ZigbeeLumi: Thing(TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01), id: {bac560c5-ec4a-4f50-a8c5-6461c2ce5fb8}, ThingClassId: {1a9fb2ea-543e-46b2-a10d-9a977232367b}) Unhandled attribute report: ZigbeeClusterAttribute(0x0129, ZigbeeDataType(Unsigned 8-bit integer, 0x01))
I | ZigbeeLumi: Temperature for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 20.26
I | ZigbeeLumi: *** “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” Power configuration cluster attribute changed: ZigbeeClusterAttribute(0x0020, ZigbeeDataType(Unsigned 8-bit integer, 0x1c))
I | ZigbeeLumi: Thing(TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01), id: {bac560c5-ec4a-4f50-a8c5-6461c2ce5fb8}, ThingClassId: {1a9fb2ea-543e-46b2-a10d-9a977232367b}) Unhandled attribute report: ZigbeeClusterAttribute(0x0129, ZigbeeDataType(Unsigned 8-bit integer, 0x01))
I | ZigbeeLumi: Temperature for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 20.28
I | ZigbeeLumi: Thing(TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01), id: {bac560c5-ec4a-4f50-a8c5-6461c2ce5fb8}, ThingClassId: {1a9fb2ea-543e-46b2-a10d-9a977232367b}) Unhandled attribute report: ZigbeeClusterAttribute(0x00f7, ZigbeeDataType(Octet string, !
(!�!))
I | ZigbeeLumi: Temperature for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 20.3
I | ZigbeeLumi: Humidity for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 61.88
I | ZigbeeLumi: Thing(TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01), id: {bac560c5-ec4a-4f50-a8c5-6461c2ce5fb8}, ThingClassId: {1a9fb2ea-543e-46b2-a10d-9a977232367b}) Unhandled attribute report: ZigbeeClusterAttribute(0x0129, ZigbeeDataType(Unsigned 8-bit integer, 0x01))
I | ZigbeeLumi: Humidity for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 61.88
I | ZigbeeLumi: Temperature for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 20.42
I | ZigbeeLumi: Temperature for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 20.47
I | ZigbeeLumi: Humidity for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 53.56
I | ZigbeeLumi: Humidity for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 53.56
I | ZigbeeLumi: Temperature for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 20.54
I | ZigbeeLumi: Temperature for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 20.57
I | ZigbeeLumi: Thing(TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01), id: {bac560c5-ec4a-4f50-a8c5-6461c2ce5fb8}, ThingClassId: {1a9fb2ea-543e-46b2-a10d-9a977232367b}) Unhandled attribute report: ZigbeeClusterAttribute(0x00f7, ZigbeeDataType(Octet string, !
(!�!))
I | ZigbeeLumi: *** “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” Power configuration cluster attribute changed: ZigbeeClusterAttribute(0x0020, ZigbeeDataType(Unsigned 8-bit integer, 0x1c))
I | ZigbeeLumi: Temperature for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 20.61
I | ZigbeeLumi: Temperature for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 20.63
I | ZigbeeLumi: Temperature for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 20.61
I | ZigbeeLumi: Temperature for “TVOC Air Quality Monitor (LUMI - lumi.airmonitor.acn01)” changed to: 20.63

I give up.

Home Assistant supports the device after a fashion. It has a ‘driver’ with the term ‘quirks’ in its name. Even so, now and then one of those devices simply stops reporting one or more of the measured values and starts reporting again only after I press its button.
With Nymea, as I reported here before, reporting of the measured data is spotty at best and several other status items seem to get lost, such as the battery status.
I now have new data fro iobroker (installed only yesterday). Iobroker reports an error for that device several times an hour. It’s always the same message. DeviceConfigure:Failed to DeviceConfigure.configure 0x54ef441000626da4 lumi.airmonitor.acn01 (Error: Bind 0x54ef441000626da4/1 genAnalogInput from ‘0xe0798dfffe93e1ed/1’ failed ({“address”:22462,“clusterId”:32801,“sequence”:136} after 10000ms) at Timeout._onTimeout (/opt/iobroker/node_modules/zigbee-herdsman/src/utils/waitress.ts:64:35) at listOnTimeout (node:internal/timers:559:17) at processTimers (node:internal/timers:502:7))
Now a friend of mine reports that he is using the same device with yet another system (Apple based) and that it already ate half of a set of batteries within about a month’s use.

It’s very easy to conclude from this account that the device does not work properly and that no amount of fiddling is likely to make it work with any of the home automation systems mentioned above.

I will let them hang where they now are as decoration and as visible thermometers. Now I am looking for cheapish temperature sensors that actually work.

Ah dang, forgot about this one… sorry.
Well, I think it’s clear that the attribute reporting is broken for sure. I could try to add a polling mechanism I suppose, perhaps that makes them at least usable…

No problem at all, no need to feel sorry.
My friend reporting the prodigious use of the batteries made me think that his system might be polling the device.
For my own use case I need only the temperature readings as a replacement for the thermostat’s own measure of the actual temperature. I think a polling interval of perhaps 5 minutes might be OK-ish.
On the other hand, I am looking for cheap sensors right now. They seem to be on the order of €20 and I need about nine of those. That would amount to some €200 more for the whole project which I would be willing to pay if I could bring the project to an end.

Did you change the support for the TVOC recently? I re-installed Nymea from scratch, applied again all experimental updates and bound my things into the system.
The TVOC Air Quality Monitor now resolves as two different devices, one of which seems to be inoperable on account of configuration errors. It keeps track of the temperature reasonably well. It has a few entries for the VOC and none for humidity.
I added another device which I hadn’t been using with Nymea before, a LUMI weather sensor (lumi.weather). This, too, is resolved as two different devices. One of those appears to work reasonably well, after a fashion. It reports both temperature and humidity readings at irregular intervals, roughly ranging from half an hour to two hours. I have seen one reading for the air pressure so far. In other words, par for the course for a weather sensor, not so useful for an interior thermometer controlling the thermostat.

No, no changes in the last couple of days.

If it resolves to 2 devices, most likely it is picked up the generic handler because the zigbee-lumi plugin is either not installed, is too old (e.g. stable version installed) or fails to load for whatever reason. Please check the thing class ID of the created things. The try to find here (generic handler) or here (lumi specific handler) to see which plugin picks it up.

If no vendor specific plugin picks a node up, the generic one just walks through the available endpoints on a device and tries to detect zigbee spec compliant clusters and connects to them without any vendor specific quirks, creating a new thing for each endpoint it can deal with (in this case the H&T and the VOC ones).

I re-installed Nymea again from scratch, activated the Experimental packet source and applied all 83 available updates.
Binding both the Lumi.airmonitor.acm0 and the Lumi.weather gadgets resulted now in one thing each, as it should. However, after I set up the ZigBee network with the identical deConz controller as before, and before I bound any ZigBee devices to the network, the network already contained one device, the TUYATEC-riuj5xzs (temperature and humidity sensor) which was bound to the same network before I reinstalled it.

Anyway, all now works as it did before the reinstallation. Both lumi.airmonitor and lumi.weather now report temperatures at a reasonable rate, i.e. every few minutes. However, the newly installed system has been running only for about half an hour.

Upon closer observation this turned out not to be the case. Rather, as soon as I opened the ZigBee network for new devices, the Tuya temperature sensor joined the network of its own accord, without me doing anything to the device. It appears that it simply waited for the network to reappear after I re-installed Nymea:core. So, this is a non-issue.

Up to this morning every instance of my Aqara Air Quality Monitors showed in the top left corner a symbol for a radio connection when it was connected to the ZigBee network. Otherwise, no symbol was shown there.
Beginning with today’s morning none of the devices show that symbol, even when connected to the ZigBee network and when operated by Nymea. This is independent of the firmware in the devices. Even detaching and reattaching to the ZigBee network does not change that behaviour.
I have installed today’s batch of about 40 updates (experimental) to nymea:core before I noticed the absence of the symbol.

I now have moved all my things from the HA installation to Nymea. As expected, some of the Lumi Airmonitors seem to work right away and some do not. Also expected: some of the Lumi Airmonitors initially work fine and then stop reporting some values or altogether. I have found two temperature sensors which seem to work all the time.

New surprise: my thermostats (Ubisys H1) are all reported both as thermostats and sensors. Some of those also stop reporting the temperature or other values after a few days of operation.

I take this as circumstantial evidence that the problem we initially associated with the Lumi things lies deeper than that and affects other things as well.

BTW: I used to run this system with the experimental sources so far. Is it sufficient to remove the ‘experimental’ flag from the updating panel or do I have to install it again from scratch in order to use the stable sources?