zha-device-handlers
zha-device-handlers copied to clipboard
[Device Support Request] ""TZE204_lzriup1j_TS0601"" Avatto Zigbee thermostat panel [Electric heating]
Problem description
Device/item link: aliexpress.com/item/1005002960679997.html?
Device is detected by ZHA but does not show any sensor/controls information.
Solution description
Full climate support for the Thermostat panel. with all functions available under ZHA.
Screenshots/Video
Screenshots/Video
[Paste/upload your media here]
Device signature
Device signature
{
"node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.FullFunctionDevice|MainsPowered|RxOnWhenIdle|AllocateAddress: 142>, manufacturer_code=4417, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)",
"endpoints": {
"1": {
"profile_id": "0x0104",
"device_type": "0x0051",
"input_clusters": [
"0x0000",
"0x0004",
"0x0005",
"0xef00"
],
"output_clusters": [
"0x000a",
"0x0019"
]
},
"242": {
"profile_id": "0xa1e0",
"device_type": "0x0061",
"input_clusters": [],
"output_clusters": [
"0x0021"
]
}
},
"manufacturer": "_TZE204_lzriup1j",
"model": "TS0601",
"class": "zigpy.device.Device"
}
Diagnostic information
Diagnostic information
"data": {
"ieee": "**REDACTED**",
"nwk": 49661,
"manufacturer": "_TZE204_lzriup1j",
"model": "TS0601",
"name": "_TZE204_lzriup1j TS0601",
"quirk_applied": false,
"quirk_class": "zigpy.device.Device",
"manufacturer_code": 4417,
"power_source": "Mains",
"lqi": 140,
"rssi": -65,
"last_seen": "2023-09-16T22:39:49",
"available": true,
"device_type": "Router",
"signature": {
"node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.FullFunctionDevice|MainsPowered|RxOnWhenIdle|AllocateAddress: 142>, manufacturer_code=4417, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)",
"endpoints": {
"1": {
"profile_id": "0x0104",
"device_type": "0x0051",
"input_clusters": [
"0x0000",
"0x0004",
"0x0005",
"0xef00"
],
"output_clusters": [
"0x000a",
"0x0019"
]
},
"242": {
"profile_id": "0xa1e0",
"device_type": "0x0061",
"input_clusters": [],
"output_clusters": [
"0x0021"
]
}
},
"manufacturer": "_TZE204_lzriup1j",
"model": "TS0601"
},
"active_coordinator": false,
"entities": [],
"neighbors": [],
"routes": [],
"endpoint_names": [
{
"name": "SMART_PLUG"
},
{
"name": "PROXY_BASIC"
}
],
"user_given_name": null,
"device_reg_id": "ca3af7e440cc19b50985d7e113528db8",
"area_id": null,
"cluster_details": {
"1": {
"device_type": {
"name": "SMART_PLUG",
"id": 81
},
"profile_id": 260,
"in_clusters": {
"0x0004": {
"endpoint_attribute": "groups",
"attributes": {},
"unsupported_attributes": {}
},
"0x0005": {
"endpoint_attribute": "scenes",
"attributes": {},
"unsupported_attributes": {}
},
"0xef00": {
"endpoint_attribute": null,
"attributes": {},
"unsupported_attributes": {}
},
"0x0000": {
"endpoint_attribute": "basic",
"attributes": {
"0x0001": {
"attribute_name": "app_version",
"value": 74
},
"0x0004": {
"attribute_name": "manufacturer",
"value": "_TZE204_lzriup1j"
},
"0x0005": {
"attribute_name": "model",
"value": "TS0601"
}
},
"unsupported_attributes": {}
}
},
"out_clusters": {
"0x0019": {
"endpoint_attribute": "ota",
"attributes": {},
"unsupported_attributes": {}
},
"0x000a": {
"endpoint_attribute": "time",
"attributes": {},
"unsupported_attributes": {}
}
}
},
"242": {
"device_type": {
"name": "PROXY_BASIC",
"id": 97
},
"profile_id": 41440,
"in_clusters": {},
"out_clusters": {
"0x0021": {
"endpoint_attribute": "green_power",
"attributes": {},
"unsupported_attributes": {}
}
}
}
}
}
}
Logs
System Logs for Cluster info
[0xB58F:1:0xef00] Unknown cluster command 2 b'\x00\x16\x02\x02\x00\x04\x00\x00\x00\xe6' [0xB58F:1:0xef00] Unknown cluster command 2 b'\x00\x17\x03\x02\x00\x04\x00\x00\x00\xff' [0xB58F:1:0xef00] Unknown cluster command 2 b'\x00\x18\x02\x02\x00\x04\x00\x00\x00\xeb' [0xB58F:1:0xef00] Unknown cluster command 2 b'\x00\x19\x03\x02\x00\x04\x00\x00\x00\xff' [0xB58F:1:0xef00] Unknown cluster command 2 b'\x00\x1a\x03\x02\x00\x04\x00\x00\x00\xff'
Custom quirk
I have tried adding: https://github.com/zigpy/zha-device-handlers/blob/dev/zhaquirks/tuya/ts0601_electric_heating.py As a custom quirk with the device ID/type of the Avatto thermostat.
This is the sole modification I did to the File
Additional information
No response
Is it loading the zhaquirks.tuya.ts0601_electric_heating.MoesBHT?
It looks like the last input and the output clusters are not covered in this quirk.
It is not loading any quirk at all.
I checked my custom quirks and I do not have the moes BHT custom one. do you have a link for it, or is it the same as the default one?
I do have a temp sensor [TS0601 type] that loads a different quirk, so its not a issue with the custom quirk settings.
Trying to add a different one {HAOZEE} does not help either. Still gives the same type of error in the logs
[0xC1FD:1:0xef00] Unknown cluster command 2 b'\x00\x02\x04\x04\x00\x01\x01' [0xF153:1:0xef00] Unknown cluster command 2 b'\x00\x15\x03\x02\x00\x04\x00\x00\x00\xf3' [0xF153:1:0xef00] Unknown cluster command 17 b'\x00\x0f@' [0xF153:1:0xef00] Unknown cluster command 2 b'\x00\x17\x03\x02\x00\x04\x00\x00\x00\xf4' [0xF153:1:0xef00] Unknown cluster command 2 b'\x00\x18\x03\x02\x00\x04\x00\x00\x00\xf4'
But I did notice some effect, the Temperature kept rising up, even though there is no custom quirk loaded under ZHA information
It is the default ts0601_electric_heating quirk. It just adds the MoesBHT class when loaded. It is not loading the quirk because one of the input, and both output clusters does not match the quirk.
It has to be adjusted to support input cluster "0xef00" and output clusters "0x000a" and "0x0019".
What changes do I need to make to support those input clusters?
Or could you give me a Custom quirk file that should enable the in/output clusters
@ShogunMan I have received this file from the Manufacturer, My device does not look to be listed, but it does give quite a lot of "Tuya" data-points/cluster info for many devices.
It does list "TS0601_thermostat" entries but these are for thermostat valves
https://github.com/darknessblade/-TZE204_lzriup1j_TS0601-Avatto-Zigbee-thermostat-panel-Electric-heating-/blob/main/tuya%20(1).ts
@darknessblade I've double checked and in fact all clusters on endpoint 1 are handled correctly by the current quirk. However your device also lists endpoint 242 with a single output cluster that is not handled by the current quirk. Can you try this modified quirk (rename extension to .py)
Check if it loads at all, and if not, check the logs at startup to be sure it finds it. Remember to have custom quirks enabled and the file in your custom quirk directory.
I have checked but still nothing.
Custom quirks should be enabled
From the logs:
Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/zhaquirks/__init__.py", line 460, in setup spec.loader.exec_module(module) File "<frozen importlib._bootstrap_external>", line 940, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/config/custom_zha_quirks/ts0601_heating_avatto.py", line 180, in <module> class MoesAvatto(TuyaThermostat): File "/config/custom_zha_quirks/ts0601_heating_avatto.py", line 205, in MoesAvatto OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id], ^^^^^^^^^^^^^^^ NameError: name 'GreenPowerProxy' is not defined
Ok, there was a bug in the previous file. Try this: ts0601_heating_avatto.txt
With that last change I can see a CLIMATE entity under controls
I am still unable to control it though, "Temperature runaway bug" still happens.
I'll make a bare minimum quirk, if that does not work we have to call on @TheJulianJES or @javicalle :-)
Please do so.
The minimum quirk features, I would like to have 1 Climate [Manual temperature/ define temperature] 2 Child lock
The chidlock is mostly to prevent the "Thermal-runaway" bug from happening. to preven the temperature from going up without reason
This way I can use the device in a way I can work with it. Then We can always later have Julian and Javi take a look at it as well for FULL support.
Try this: ts0601_heating_minimum.txt
If this does not work, then i believe the manufacturer specific cluster is not compatible with Moes and more info is needed.
I have checked and it had no effect on controls.
Will ask the manufacturer for the cluster information
But it loaded the minimum quirk? Then we can use that as a starting point for implementing the manufacturer specific cluster.
It did load the minimum quirk. but I am unable to do anything else.
The thermal-runaway bug [bug where the temp keeps going up] keeps happening even with the minimal quirk.
{In order to properly load the quirk each time, I removed the device, and rebooted hass}
We could try the Haozee cluster for a test. It seems from your log that it is looking for this. Let me throw something together.
OK. please send me some files for me to test, and I will report back
Give this a shot: ts0601_heating_avatto.txt
this one does not look to work either
Ok, there is one last thing we could try, let me do a little research. I might be able to find the manufacturer cluster spec.
OK.
Found a bug, try this instead: ts0601_avatto2.txt
This is based on a known Avatto device and should use the same manufacturer cluster.
That one shows much more information:
The climate panel still does not work. and the [climate heat/off] does not change status when {DISPLAY ON/OFF } pressed on the panel.
Can you remove/delete the device, then add it again?
Tried removing/adding it back, and it did not change anything in the controls/sensors
For full functionality, I believe we need the full spec from the manufacturer. But you are able to control the device from within HA? Child lock works?
Child lock does not work. [To activate it on the panel its: HOLD temp-up/temp-down 5 seconds] When activating it on the panel, it does not change the state of the "switch"
I am unable to control the thermostat
"Thermal-runaway still happens. when childlock is off"
Checking the logs:
[0x3887:1:0x0006]: async_initialize: all attempts have failed: [DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>')] [0xD52B:1:0x0102]: async_initialize: all attempts have failed: [DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>')] [0x3887:1:0x0008]: async_initialize: all attempts have failed: [DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>')] [0x3887:1:0x0300]: async_initialize: all attempts have failed: [DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>')] [0xD52B:1:0x0006]: async_initialize: all attempts have failed: [DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>'), DeliveryError('Failed to deliver message: <EmberStatus.DELIVERY_FAILED: 102>')]
Instead of Thermal runaway, it now keeps triggering the "change time" button
When letting the panel sit on my desk, it stops the change time trigger, and returns to the thermal-runaway
According to the seller the File I linked are the Zigbee2MQTT firmware details they also gave Zigbee2MQTT