zigpy / zha-device-handlers

ZHA device handlers bridge the functionality gap created when manufacturers deviate from the ZCL specification, handling deviations and exceptions by parsing custom messages to and from Zigbee devices.
Apache License 2.0
741 stars 674 forks source link

[Device Support Request] TS0601 _TZE200_znzs7yaw (TuYa thermostat) #1015

Closed Sirse closed 2 years ago

Sirse commented 3 years ago

One of the best cheap chiniese thermostate (internal and external temp sensors, overload/overheat protections, 0.5C settings step with hysteresis, settings restore after powerfail, almost zero network spam) doesn`t have ZHA support (because proprietary TuYa proto).

{
  "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.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4098, maximum_buffer_size=82, maximum_incoming_transfer_size=82, server_mask=11264, maximum_outgoing_transfer_size=82, 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": 260,
      "device_type": "0x0051",
      "in_clusters": [
        "0x0000",
        "0x0004",
        "0x0005",
        "0xef00"
      ],
      "out_clusters": [
        "0x000a",
        "0x0019"
      ]
    }
  },
  "manufacturer": "_TZE200_znzs7yaw",
  "model": "TS0601",
  "class": "zigpy.device.Device"
}
New device 0xc69b (84:2e:14:ff:fe:fd:ad:36) joined the network
[0xc69b] Scheduling initialization
Received frame on uninitialized device <Device model=None manuf=None nwk=0xC69B ieee=84:2e:14:ff:fe:fd:ad:36 is_initialized=False> from ep 0 to ep 0, cluster ZDOCmd.Device_annce: b'\xFF\x9B\xC6\x36\xAD\xFD\xFE\xFF\x14\x2E\x84\x8E'
[0xc69b:zdo] ZDO request ZDOCmd.Device_annce: [0xC69B, 84:2e:14:ff:fe:fd:ad:36, 142]
Tries remaining: 3
[0xc69b] Requesting 'Node Descriptor'
Tries remaining: 2
[0xc69b] Extending timeout for 0x0e request
Received frame on uninitialized device <Device model=None manuf=None nwk=0xC69B ieee=84:2e:14:ff:fe:fd:ad:36 is_initialized=False> from ep 0 to ep 0, cluster ZDOCmd.Node_Desc_rsp: b'\x0E\x00\x9B\xC6\x01\x40\x8E\x02\x10\x52\x52\x00\x00\x2C\x52\x00\x00'
[0xc69b] Got 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.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4098, maximum_buffer_size=82, maximum_incoming_transfer_size=82, server_mask=11264, maximum_outgoing_transfer_size=82, 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)
[0xc69b] Discovering endpoints
Tries remaining: 3
Received frame on uninitialized device <Device model=None manuf=None nwk=0xC69B ieee=84:2e:14:ff:fe:fd:ad:36 is_initialized=False> from ep 0 to ep 0, cluster ZDOCmd.Active_EP_rsp: b'\x0F\x00\x9B\xC6\x01\x01'
[0xc69b] Discovered endpoints: [1]
[0xc69b] Initializing endpoints [<Endpoint id=1 in=[] out=[] status=<Status.NEW: 0>>]
[0xc69b:1] Discovering endpoint information
Tries remaining: 3
Received frame on uninitialized device <Device model=None manuf=None nwk=0xC69B ieee=84:2e:14:ff:fe:fd:ad:36 is_initialized=False> from ep 0 to ep 0, cluster ZDOCmd.Simple_Desc_rsp: b'\x10\x00\x9B\xC6\x14\x01\x04\x01\x51\x00\x01\x04\x00\x00\x04\x00\x05\x00\x00\xEF\x02\x19\x00\x0A\x00'
[0xc69b:1] Discovered endpoint information: SizePrefixedSimpleDescriptor(endpoint=1, profile=260, device_type=81, device_version=1, input_clusters=[0, 4, 5, 61184], output_clusters=[25, 10])
Unknown cluster 61184
[0xc69b:1:0x0000] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=True disable_default_response=True> manufacturer=None tsn=17 command_id=Command.Read_Attributes_rsp>
[0xc69b] Read model 'TS0601' and manufacturer '_TZE200_znzs7yaw' from <Endpoint id=1 in=[basic:0x0000, groups:0x0004, scenes:0x0005, None:0xEF00] out=[ota:0x0019, time:0x000A] status=<Status.ZDO_INIT: 1>>
[0xc69b] Discovered basic device information for <Device model='TS0601' manuf='_TZE200_znzs7yaw' nwk=0xC69B ieee=84:2e:14:ff:fe:fd:ad:36 is_initialized=True>
Device is initialized <Device model='TS0601' manuf='_TZE200_znzs7yaw' nwk=0xC69B ieee=84:2e:14:ff:fe:fd:ad:36 is_initialized=True>
Checking quirks for _TZE200_znzs7yaw TS0601 (84:2e:14:ff:fe:fd:ad:36)
Considering <class 'zhaquirks.xbee.xbee_io.XBeeSensor'>
Fail because endpoint list mismatch: {232, 230} {1}
Considering <class 'zhaquirks.xbee.xbee3_io.XBee3Sensor'>
Fail because endpoint list mismatch: {232, 230} {1}
Considering <class 'zhaquirks.smartthings.tag_v4.SmartThingsTagV4'>
Fail because device_type mismatch on at least one endpoint
Considering <class 'zhaquirks.smartthings.multi.SmartthingsMultiPurposeSensor'>
Fail because device_type mismatch on at least one endpoint
Considering <class 'zhaquirks.netvox.z308e3ed.Z308E3ED'>
Fail because device_type mismatch on at least one endpoint
Considering <class 'zhaquirks.gledopto.soposhgu10.SoposhGU10'>
Fail because endpoint list mismatch: {11, 13} {1}
Considering <class 'bellows.zigbee.application.EZSPCoordinator'>
Fail because device_type mismatch on at least one endpoint
device - 0xC69B:84:2e:14:ff:fe:fd:ad:36 entering async_device_initialized - is_new_join: True
device - 0xC69B:84:2e:14:ff:fe:fd:ad:36 has joined the ZHA zigbee network
[0xC69B](TS0601): started configuration
[0xC69B:ZDO](TS0601): 'async_configure' stage succeeded
[0xC69B:1:0x0000]: finished channel configuration
[0xC69B:1:0x0019]: finished channel configuration
Error handling '_save_attribute' event with (84:2e:14:ff:fe:fd:ad:36, 1, 0, 4, '_TZE200_znzs7yaw') params: FOREIGN KEY constraint failed
[0xC69B:1:0x0000]: 'async_configure' stage succeeded
[0xC69B:1:0x0019]: 'async_configure' stage succeeded
Error handling '_save_attribute' event with (84:2e:14:ff:fe:fd:ad:36, 1, 0, 5, 'TS0601') params: FOREIGN KEY constraint failed
[0xC69B](TS0601): completed configuration
[0xC69B](TS0601): stored in registry: ZhaDeviceEntry(name='_TZE200_znzs7yaw TS0601', ieee='84:2e:14:ff:fe:fd:ad:36', last_seen=1630410876.8612177)
[0xC69B](TS0601): started initialization
[0xC69B:ZDO](TS0601): 'async_initialize' stage succeeded
[0xC69B:1:0x0000]: initializing channel: from_cache: False
[0xC69B:1:0x0000]: finished channel configuration
[0xC69B:1:0x0019]: initializing channel: from_cache: False
[0xC69B:1:0x0019]: finished channel configuration
[0xC69B:1:0x0000]: 'async_initialize' stage succeeded
[0xC69B:1:0x0019]: 'async_initialize' stage succeeded
[0xC69B](TS0601): power source: Mains
[0xC69B](TS0601): completed initialization
[0xc69b:1:0x000a] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=False> manufacturer=None tsn=71 command_id=Command.Read_Attributes>
[0xc69b:1:0x000a] ZCL request 0x0000: [[7]]
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=True> manufacturer=None tsn=73 command_id=36>
[0xc69b:1:0xef00] Unknown cluster-specific command 36
[0xc69b:1:0xef00] ZCL request 0x0024: b'C\xb4'
[0xc69b:1:0xef00] No handler for cluster command 36
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=74 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00`}\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=75 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00a\x80\x04\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=76 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00b~\x02\x00\x04\x00\x00\x00\xc8'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=77 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00c\x7f\x02\x00\x04\x00\x00\x00\xdc'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=78 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00d\x81\x01\x00\x01\x00'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=79 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00e\x82\x05\x00\x01\x00'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=80 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00fe\x01\x00\x01\x00'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=81 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00gf\x01\x00\x01\x00'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=82 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00hg\x02\x00\x04\x00\x00\x00\x00'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=83 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00ih\x02\x00\x04\x00\x00\x00\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=84 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00ji\x02\x00\x04\x00\x00\x00\x0f'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=85 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00kj\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=86 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00lk\x01\x00\x01\x01'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=88 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00nm\x02\x00\x04\xff\xff\xff\xba'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=89 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00on\x02\x00\x04\x00\x00\x00\n'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=90 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00po\x02\x00\x04\x00\x00\x00\x02'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=91 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00qp\x02\x00\x04\x00\x00\x00-'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=92 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00rq\x02\x00\x04\x00\x00\x00\x05'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=93 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00sr\x02\x00\x04\x00\x00\x00#'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=94 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00ts\x02\x00\x04\x00\x00\x00\x05'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=95 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00ut\x04\x00\x01\x00'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=96 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00vu\x04\x00\x01\x00'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=97 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00wv\x04\x00\x01\x00'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=98 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00xw\x00\x00\t\x05\x00\x14\x08\x00\x0f\x0b\x1e\x0f'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=99 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00yx\x00\x00\t\r\x1e\x0f\x11\x00\x0f\x16\x00\x0f'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=100 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00zy\x00\x00\t\x86\x00\x14\x08\x00\x0f\x0b\x1e\x0f'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=101 command_id=1>
[0xc69b:1:0xef00] Unknown cluster-specific command 1
[0xc69b:1:0xef00] ZCL request 0x0001: b'\x00{z\x00\x00\t\r\x1e\x0f\x11\x00\x0f\x16\x00\x0f'
[0xc69b:1:0xef00] No handler for cluster command 1
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=True> manufacturer=None tsn=102 command_id=36>
[0xc69b:1:0xef00] Unknown cluster-specific command 36
[0xc69b:1:0xef00] ZCL request 0x0024: b'\x00\x00'
[0xc69b:1:0xef00] No handler for cluster command 36
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=103 command_id=17>
[0xc69b:1:0xef00] Unknown cluster-specific command 17
[0xc69b:1:0xef00] ZCL request 0x0011: b'C\xb6\x80'
[0xc69b:1:0xef00] No handler for cluster command 17
[0xc69b:1:0xef00] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=True> manufacturer=None tsn=104 command_id=36>
[0xc69b:1:0xef00] Unknown cluster-specific command 36
[0xc69b:1:0xef00] ZCL request 0x0024: b'\x00\x00'
[0xc69b:1:0xef00] No handler for cluster command 36

Support was already implemented in Z2M (via https://github.com/Koenkk/zigbee-herdsman-converters/pull/1694)

MattWestb commented 3 years ago

You can trying if its compatible with the normal tuya electrical heating thermostat that is in https://github.com/zigpy/zha-device-handlers/blob/dev/zhaquirks/tuya/electric_heating.py (the cluster looks the same so that is good).

Add your new manufacturer at https://github.com/zigpy/zha-device-handlers/blob/d43df422d103f2bfa5d4cd37c6721f32cdbde984/zhaquirks/tuya/electric_heating.py#L140 and configuring local quirk and testing the new made quirk.

Sirse commented 3 years ago

Device uses two different time offsets for UTC and local time payloads: UTC timestamp with time offset 2000 Local timestamp with time offset 1970 Current time sync code supports only one universal offset value for both timestamps via _set_timeoffset https://github.com/zigpy/zha-device-handlers/blob/28bd89a2f34da9a15dd37370734af4e222850316/zhaquirks/tuya/__init__.py#L236

Bug or one more TuYa proto specification?

MattWestb commented 3 years ago

Its known that tuya TRVs is using 2 different methods setting the time and if some new devices is using the other method then its need doing some changes in the quirk for getting it working OK.

Sirse commented 3 years ago

Temporary quirk draft for this device - https://gist.github.com/Sirse/3cf8172935d81c5c00655650854e3160 (almost untested, without schedule support). Works only with https://github.com/zigpy/zha-device-handlers/pull/1021 due to own timesync mechanism

MattWestb commented 3 years ago

The time fix is merged in dev and is coming in HA 2021.10.

Did you have more time testing it ??

I think its more users that like getting the device supported in ZHA if its possible so its being great if you can making it all the way.

Thanks in advance !!

Sirse commented 3 years ago

All basic features (set/get temp, on/off, get state) works fine. image

Current problems:

I can create PR with current quirk (https://gist.github.com/Sirse/3cf8172935d81c5c00655650854e3160) and fix these issues later.

MattWestb commented 3 years ago

I think its much better then not working at all and the "original" Moes is also not having all parts working like the schedule .

I think is only the Moes TRVs that have getting all possible functions implanted and working but i have not betting and feedback from user of all TRVs that is implanted.

My Revolt (Siterwell) is not having all but they is working well for 10 mounts and other users is using them 2 so i think its better little then not at all.

If you like to knowing what DP the thermostat is one dev have saying that if you is disconnecting the power for some minutes and ting it they is sending all possible DP they is supporting (I have trying and finding that my is supporting valve jammed but i cant implanting it then i can not do the coding ;-(( ).

Also if Z2M and deCONZ have implanting it its possible looking what DP they is using.

If you do one PR its being great bit not one must and im sure users is valuing it much then they is getting devices that can working OK in there systems.

MattWestb commented 3 years ago

Z2M have it but i have not looking how they have doing the DP things in to and from zigbee.

https://github.com/Koenkk/zigbee-herdsman-converters/blob/09b3b3df0c86707921272a775ce6f9d279043714/devices/tuya.js#L1132

domnich commented 2 years ago

Any updates here ? really waiting for this device support =)

Sirse commented 2 years ago

Any updates here ? really waiting for this device support =)

You can use custom quirk :) Now tuya dp can be discovered via their own api (https://www.zigbee2mqtt.io/how_tos/how_to_find_tuya_data_points.html), i'm waiting for my tuya hub shipping :)

github-actions[bot] commented 2 years ago

There hasn't been any activity on this issue recently. Due to the high number of incoming GitHub notifications, we have to clean some of the old issues, as many of them have already been resolved with the latest updates. Please make sure to update to the latest version and check if that solves the issue. Let us know if that works for you by adding a comment 👍 This issue has now been marked as stale and will be closed if no further activity occurs. Thank you for your contributions.