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
734 stars 673 forks source link

[Device Support Request] Modkam.ru ptvo_counter_2ch support for pulse counter #1977

Closed WiktorBuczko closed 1 year ago

WiktorBuczko commented 1 year ago

Is your feature request related to a problem? Please describe. Device pairs using ZHA but pulse counter entities are missing, only water leak, battery and signal strength sensors are present. This device is based on E18-MS1-PCB module

Describe the solution you'd like Add support for pulse counter entities

Device signature ```yaml { "node_descriptor": "NodeDescriptor(logical_type=, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=, mac_capability_flags=, manufacturer_code=4447, maximum_buffer_size=80, maximum_incoming_transfer_size=160, server_mask=0, maximum_outgoing_transfer_size=160, descriptor_capability_field=, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=True, *is_full_function_device=False, *is_mains_powered=False, *is_receiver_on_when_idle=False, *is_router=False, *is_security_capable=False)", "endpoints": { "1": { "profile_id": 260, "device_type": "0x0100", "in_clusters": [ "0x0000", "0x0001" ], "out_clusters": [ "0x0000", "0x0001" ] }, "3": { "profile_id": 260, "device_type": "0x0100", "in_clusters": [ "0x000c" ], "out_clusters": [] }, "5": { "profile_id": 260, "device_type": "0x0100", "in_clusters": [ "0x000c" ], "out_clusters": [] }, "6": { "profile_id": 260, "device_type": "0x0100", "in_clusters": [ "0x0006" ], "out_clusters": [ "0x0006" ] } }, "manufacturer": "modkam.ru", "model": "ptvo_counter_2ch", "class": "zigpy.device.Device" } ```
Diagnostic information ```yaml { "home_assistant": { "installation_type": "Home Assistant Supervised", "version": "2022.11.5", "dev": false, "hassio": true, "virtualenv": false, "python_version": "3.10.7", "docker": true, "arch": "x86_64", "timezone": "Europe/Warsaw", "os_name": "Linux", "os_version": "5.10.0-19-amd64", "supervisor": "2022.11.2", "host_os": "Debian GNU/Linux 11 (bullseye)", "docker_version": "20.10.21", "chassis": "desktop", "run_as_root": true }, "custom_components": { "garbage_collection": { "version": "4.9.0", "requirements": [ "python-dateutil>=2.8.2" ] }, "scheduler": { "version": "v0.0.0", "requirements": [] }, "blitzortung": { "version": "1.0.1", "requirements": [ "paho-mqtt>=1.5.0" ] }, "car_wash": { "version": "1.5.4", "requirements": [] }, "dwains_dashboard": { "version": "3.3.0", "requirements": [] }, "adaptive_lighting": { "version": "1.2.0", "requirements": [] }, "hacs": { "version": "1.28.4", "requirements": [ "aiogithubapi>=22.2.4" ] }, "pirateweather": { "version": "0.1.0", "requirements": [ "python-forecastio==1.4.0" ] }, "iphonedetect": { "version": "1.4.0", "requirements": [] }, "burze_dzis_net": { "version": "v1.0.4", "requirements": [ "zeep" ] } }, "integration_manifest": { "domain": "zha", "name": "Zigbee Home Automation", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/zha", "requirements": [ "bellows==0.34.4", "pyserial==3.5", "pyserial-asyncio==0.6", "zha-quirks==0.0.87", "zigpy-deconz==0.19.1", "zigpy==0.51.6", "zigpy-xbee==0.16.2", "zigpy-zigate==0.10.3", "zigpy-znp==0.9.1" ], "usb": [ { "vid": "10C4", "pid": "EA60", "description": "*2652*", "known_devices": [ "slae.sh cc2652rb stick" ] }, { "vid": "1A86", "pid": "55D4", "description": "*sonoff*plus*", "known_devices": [ "sonoff zigbee dongle plus v2" ] }, { "vid": "10C4", "pid": "EA60", "description": "*sonoff*plus*", "known_devices": [ "sonoff zigbee dongle plus" ] }, { "vid": "10C4", "pid": "EA60", "description": "*tubeszb*", "known_devices": [ "TubesZB Coordinator" ] }, { "vid": "1A86", "pid": "7523", "description": "*tubeszb*", "known_devices": [ "TubesZB Coordinator" ] }, { "vid": "1A86", "pid": "7523", "description": "*zigstar*", "known_devices": [ "ZigStar Coordinators" ] }, { "vid": "1CF1", "pid": "0030", "description": "*conbee*", "known_devices": [ "Conbee II" ] }, { "vid": "10C4", "pid": "8A2A", "description": "*zigbee*", "known_devices": [ "Nortek HUSBZB-1" ] }, { "vid": "0403", "pid": "6015", "description": "*zigate*", "known_devices": [ "ZiGate+" ] }, { "vid": "10C4", "pid": "EA60", "description": "*zigate*", "known_devices": [ "ZiGate" ] }, { "vid": "10C4", "pid": "8B34", "description": "*bv 2010/10*", "known_devices": [ "Bitron Video AV2010/10" ] } ], "codeowners": [ "@dmulcahey", "@adminiuga", "@puddly" ], "zeroconf": [ { "type": "_esphomelib._tcp.local.", "name": "tube*" }, { "type": "_zigate-zigbee-gateway._tcp.local.", "name": "*zigate*" }, { "type": "_zigstar_gw._tcp.local.", "name": "*zigstar*" } ], "dependencies": [ "file_upload" ], "after_dependencies": [ "onboarding", "usb", "zeroconf" ], "iot_class": "local_polling", "loggers": [ "aiosqlite", "bellows", "crccheck", "pure_pcapy3", "zhaquirks", "zigpy", "zigpy_deconz", "zigpy_xbee", "zigpy_zigate", "zigpy_znp" ], "is_built_in": true }, "data": { "ieee": "**REDACTED**", "nwk": 29787, "manufacturer": "modkam.ru", "model": "ptvo_counter_2ch", "name": "modkam.ru ptvo_counter_2ch", "quirk_applied": false, "quirk_class": "zigpy.device.Device", "manufacturer_code": 4447, "power_source": "Battery or Unknown", "lqi": 255, "rssi": -42, "last_seen": "2022-12-01T14:38:58", "available": true, "device_type": "EndDevice", "signature": { "node_descriptor": "NodeDescriptor(logical_type=, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=, mac_capability_flags=, manufacturer_code=4447, maximum_buffer_size=80, maximum_incoming_transfer_size=160, server_mask=0, maximum_outgoing_transfer_size=160, descriptor_capability_field=, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=True, *is_full_function_device=False, *is_mains_powered=False, *is_receiver_on_when_idle=False, *is_router=False, *is_security_capable=False)", "endpoints": { "1": { "profile_id": 260, "device_type": "0x0100", "in_clusters": [ "0x0000", "0x0001" ], "out_clusters": [ "0x0000", "0x0001" ] }, "3": { "profile_id": 260, "device_type": "0x0100", "in_clusters": [ "0x000c" ], "out_clusters": [] }, "5": { "profile_id": 260, "device_type": "0x0100", "in_clusters": [ "0x000c" ], "out_clusters": [] }, "6": { "profile_id": 260, "device_type": "0x0100", "in_clusters": [ "0x0006" ], "out_clusters": [ "0x0006" ] } } }, "active_coordinator": false, "entities": [ { "entity_id": "binary_sensor.modkam_ru_ptvo_counter_2ch_opening", "name": "modkam.ru ptvo_counter_2ch" }, { "entity_id": "light.modkam_ru_ptvo_counter_2ch_light", "name": "modkam.ru ptvo_counter_2ch" }, { "entity_id": "sensor.modkam_ru_ptvo_counter_2ch_battery", "name": "modkam.ru ptvo_counter_2ch" } ], "neighbors": [], "endpoint_names": [ { "name": "ON_OFF_LIGHT" }, { "name": "ON_OFF_LIGHT" }, { "name": "ON_OFF_LIGHT" }, { "name": "ON_OFF_LIGHT" } ], "user_given_name": null, "device_reg_id": "2963234a248f5ab22af2b6c2f3b1438c", "area_id": "na_zewnatrz", "cluster_details": { "6": { "device_type": { "name": "ON_OFF_LIGHT", "id": 256 }, "profile_id": 260, "in_clusters": { "0x0006": { "endpoint_attribute": "on_off", "attributes": { "0x0000": { "attribute_name": "on_off", "value": 0 } }, "unsupported_attributes": { "0x4003": { "attribute_name": "start_up_on_off" } } } }, "out_clusters": { "0x0006": { "endpoint_attribute": "on_off", "attributes": {}, "unsupported_attributes": {} } } }, "5": { "device_type": { "name": "ON_OFF_LIGHT", "id": 256 }, "profile_id": 260, "in_clusters": { "0x000c": { "endpoint_attribute": "analog_input", "attributes": { "0x001c": { "attribute_name": "description", "value": ",0A" }, "0x0055": { "attribute_name": "present_value", "value": 15.0 }, "0x006f": { "attribute_name": "status_flags", "value": 0 } }, "unsupported_attributes": {} } }, "out_clusters": {} }, "3": { "device_type": { "name": "ON_OFF_LIGHT", "id": 256 }, "profile_id": 260, "in_clusters": { "0x000c": { "endpoint_attribute": "analog_input", "attributes": { "0x001c": { "attribute_name": "description", "value": ",0A" }, "0x0055": { "attribute_name": "present_value", "value": 23.0 }, "0x006f": { "attribute_name": "status_flags", "value": 0 } }, "unsupported_attributes": {} } }, "out_clusters": {} }, "1": { "device_type": { "name": "ON_OFF_LIGHT", "id": 256 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": { "0x0004": { "attribute_name": "manufacturer", "value": "modkam.ru" }, "0x0005": { "attribute_name": "model", "value": "ptvo_counter_2ch" } }, "unsupported_attributes": {} }, "0x0001": { "endpoint_attribute": "power", "attributes": { "0x0020": { "attribute_name": "battery_voltage", "value": 31 }, "0x0021": { "attribute_name": "battery_percentage_remaining", "value": 200 } }, "unsupported_attributes": { "0x0031": { "attribute_name": "battery_size" }, "0x0033": { "attribute_name": "battery_quantity" } } } }, "out_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": {}, "unsupported_attributes": {} }, "0x0001": { "endpoint_attribute": "power", "attributes": {}, "unsupported_attributes": {} } } } } } } ```
Additional logs Logs from pairing process ``` [0xA547](lumi.remote.b486opcn01): Device seen - marking the device available and resetting counter [0xA547](lumi.remote.b486opcn01): Update device availability - device available: True - new availability: True - changed: False Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=0, dst=AddrModeAddress(addr_mode=, address=), dst_ep=0, source_route=None, extended_timeout=False, tsn=None, profile_id=0, cluster_id=19, data=Serialized[b'\x00[t\xcc\xedC$\x00K\x12\x00\x80'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-46) New device 0x745b (00:12:4b:00:24:43:ed:cc) joined the network [0x745b] Scheduling initialization Received frame on uninitialized device from ep 0 to ep 0, cluster 19: b'\x00[t\xcc\xedC$\x00K\x12\x00\x80' [0x745b:zdo] ZDO request ZDOCmd.Device_annce: [0x745B, 00:12:4b:00:24:43:ed:cc, 128] Tries remaining: 3 [0x745b] Requesting 'Node Descriptor' Tries remaining: 2 [0x745b] Extending timeout for 0x05 request Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=0, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=None, profile_id=0, cluster_id=32770, data=Serialized[b'\x05\x00[t\x02@\x80_\x11P\xa0\x00\x00\x00\xa0\x00\x00'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-46) Received frame on uninitialized device from ep 0 to ep 0, cluster 32770: b'\x05\x00[t\x02@\x80_\x11P\xa0\x00\x00\x00\xa0\x00\x00' [0x745b] Got Node Descriptor: NodeDescriptor(logical_type=, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=, mac_capability_flags=, manufacturer_code=4447, maximum_buffer_size=80, maximum_incoming_transfer_size=160, server_mask=0, maximum_outgoing_transfer_size=160, descriptor_capability_field=, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=True, *is_full_function_device=False, *is_mains_powered=False, *is_receiver_on_when_idle=False, *is_router=False, *is_security_capable=False) [0x745b] Discovering endpoints Tries remaining: 3 [0x745b] Extending timeout for 0x07 request Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=0, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=None, profile_id=0, cluster_id=32773, data=Serialized[b'\x07\x00[t\x04\x06\x05\x03\x01'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-46) Received frame on uninitialized device from ep 0 to ep 0, cluster 32773: b'\x07\x00[t\x04\x06\x05\x03\x01' [0x745b] Discovered endpoints: [6, 5, 3, 1] [0x745b] Initializing endpoints [>, >, >, >] [0x745b:6] Discovering endpoint information Tries remaining: 3 [0x745b] Extending timeout for 0x09 request Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=0, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=None, profile_id=0, cluster_id=32772, data=Serialized[b'\t\x00[t\x0c\x06\x04\x01\x00\x01\x00\x01\x06\x00\x01\x06\x00'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-46) Received frame on uninitialized device from ep 0 to ep 0, cluster 32772: b'\t\x00[t\x0c\x06\x04\x01\x00\x01\x00\x01\x06\x00\x01\x06\x00' [0x745b:6] Discovered endpoint information: SizePrefixedSimpleDescriptor(endpoint=6, profile=260, device_type=256, device_version=0, input_clusters=[6], output_clusters=[6]) [0x745b:5] Discovering endpoint information Tries remaining: 3 [0x745b] Extending timeout for 0x0b request Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=0, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=None, profile_id=0, cluster_id=32772, data=Serialized[b'\x0b\x00[t\n\x05\x04\x01\x00\x01\x00\x01\x0c\x00\x00'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-46) Received frame on uninitialized device from ep 0 to ep 0, cluster 32772: b'\x0b\x00[t\n\x05\x04\x01\x00\x01\x00\x01\x0c\x00\x00' [0x745b:5] Discovered endpoint information: SizePrefixedSimpleDescriptor(endpoint=5, profile=260, device_type=256, device_version=0, input_clusters=[12], output_clusters=[]) [0x745b:3] Discovering endpoint information Tries remaining: 3 [0x745b] Extending timeout for 0x0d request Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0xA547), src_ep=1, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=64704, data=Serialized[b'\x1c_\x11a\n\xf7\x00A$\x01!\x9b\x0b\x03(\x19\x04!\xa8C\x05!s\x01\x06$\x03\x00\x00\x00\x00\x08!\x11\x01\n!\x00\x00\x0c \x01d\x10\x00'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-66) [0xA547:1:0xfcc0] Received ZCL frame: b'\x1c_\x11a\n\xf7\x00A$\x01!\x9b\x0b\x03(\x19\x04!\xa8C\x05!s\x01\x06$\x03\x00\x00\x00\x00\x08!\x11\x01\n!\x00\x00\x0c \x01d\x10\x00' [0xA547:1:0xfcc0] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=True, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), manufacturer=4447, tsn=97, command_id=10, *direction=, *is_reply=True) [0xA547:1:0xfcc0] Decoded ZCL frame: OppleCluster:Report_Attributes(attribute_reports=[Attribute(attrid=0x00F7, value=TypeValue(type=LVBytes, value=b'\x01!\x9b\x0b\x03(\x19\x04!\xa8C\x05!s\x01\x06$\x03\x00\x00\x00\x00\x08!\x11\x01\n!\x00\x00\x0c \x01d\x10\x00'))]) [0xA547:1:0xfcc0] Received command 0x0A (TSN 97): Report_Attributes(attribute_reports=[Attribute(attrid=0x00F7, value=TypeValue(type=LVBytes, value=b'\x01!\x9b\x0b\x03(\x19\x04!\xa8C\x05!s\x01\x06$\x03\x00\x00\x00\x00\x08!\x11\x01\n!\x00\x00\x0c \x01d\x10\x00'))]) [0xA547:1:0xfcc0] Attribute report received: 0x00F7=b'\x01!\x9b\x0b\x03(\x19\x04!\xa8C\x05!s\x01\x06$\x03\x00\x00\x00\x00\x08!\x11\x01\n!\x00\x00\x0c \x01d\x10\x00' Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=0, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=None, profile_id=0, cluster_id=32772, data=Serialized[b'\r\x00[t\n\x03\x04\x01\x00\x01\x00\x01\x0c\x00\x00'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-46) Received frame on uninitialized device from ep 0 to ep 0, cluster 32772: b'\r\x00[t\n\x03\x04\x01\x00\x01\x00\x01\x0c\x00\x00' [0x745b:3] Discovered endpoint information: SizePrefixedSimpleDescriptor(endpoint=3, profile=260, device_type=256, device_version=0, input_clusters=[12], output_clusters=[]) [0x745b:1] Discovering endpoint information Tries remaining: 3 [0x745b] Extending timeout for 0x0f request Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=0, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=None, profile_id=0, cluster_id=32772, data=Serialized[b'\x0f\x00[t\x10\x01\x04\x01\x00\x01\x00\x02\x00\x00\x01\x00\x02\x00\x00\x01\x00'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-46) Received frame on uninitialized device from ep 0 to ep 0, cluster 32772: b'\x0f\x00[t\x10\x01\x04\x01\x00\x01\x00\x02\x00\x00\x01\x00\x02\x00\x00\x01\x00' [0x745b:1] Discovered endpoint information: SizePrefixedSimpleDescriptor(endpoint=1, profile=260, device_type=256, device_version=0, input_clusters=[0, 1], output_clusters=[0, 1]) [0x745b] Read model None and manufacturer None from > [0x745b] Read model None and manufacturer None from > [0x745b] Read model None and manufacturer None from > [0x745B:1:0x0000] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=False, direction=, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=False), tsn=17, command_id=, *direction=, *is_reply=False) [0x745B:1:0x0000] Sending request: Read_Attributes(attribute_ids=[4, 5]) [0x745b] Extending timeout for 0x11 request Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=1, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=0, data=Serialized[b'\x18\x11\x01\x04\x00\x00B\tmodkam.ru\x05\x00\x00B\x10ptvo_counter_2ch'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-46) [0x745B:1:0x0000] Received ZCL frame: b'\x18\x11\x01\x04\x00\x00B\tmodkam.ru\x05\x00\x00B\x10ptvo_counter_2ch' [0x745B:1:0x0000] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=17, command_id=1, *direction=, *is_reply=True) [0x745B:1:0x0000] Decoded ZCL frame: Basic:Read_Attributes_rsp(status_records=[ReadAttributeRecord(attrid=0x0004, status=, value=TypeValue(type=CharacterString, value='modkam.ru')), ReadAttributeRecord(attrid=0x0005, status=, value=TypeValue(type=CharacterString, value='ptvo_counter_2ch'))]) [0x745b] Read model 'ptvo_counter_2ch' and manufacturer 'modkam.ru' from > [0x745b] Discovered basic device information for Device is initialized Checking quirks for modkam.ru ptvo_counter_2ch (00:12:4b:00:24:43:ed:cc) Considering Fail because endpoint list mismatch: {1, 2, 242} {1, 3, 5, 6} Considering Fail because endpoint list mismatch: {1, 2, 41, 42, 242, 51, 21, 31} {1, 3, 5, 6} Considering Fail because endpoint list mismatch: {232, 230} {1, 3, 5, 6} Considering Fail because endpoint list mismatch: {232, 230} {1, 3, 5, 6} Considering Fail because endpoint list mismatch: {1} {1, 3, 5, 6} Considering Fail because endpoint list mismatch: {1} {1, 3, 5, 6} Considering Fail because endpoint list mismatch: {1} {1, 3, 5, 6} Considering Fail because endpoint list mismatch: {1} {1, 3, 5, 6} Considering Fail because endpoint list mismatch: {11, 13} {1, 3, 5, 6} 'sensor' component -> 'Battery' using ['power'] 'sensor' component -> 'RSSISensor' using ['basic'] 'sensor' component -> 'LQISensor' using ['basic'] 'select' component -> 'ZHAStartupOnOffSelectEntity' using ['on_off'] device - 0x745B:00:12:4b:00:24:43:ed:cc entering async_device_initialized - is_new_join: True device - 0x745B:00:12:4b:00:24:43:ed:cc has joined the ZHA zigbee network [0x745B](ptvo_counter_2ch): started configuration [0x745B:ZDO](ptvo_counter_2ch): 'async_configure' stage succeeded Error handling '_save_attribute' event with (00:12:4b:00:24:43:ed:cc, 1, 0, 4, 'modkam.ru') params: FOREIGN KEY constraint failed [0x745B:1:0x0000]: Configuring cluster attribute reporting [0x745B:1:0x0000]: finished channel configuration [0x745B:1:0x0001]: Performing cluster binding [0x745b] Extending timeout for 0x13 request [0x745B:6:0x0006]: Performing cluster binding [0x745b] Extending timeout for 0x15 request [0x745B:6:0x0006]: Performing cluster binding [0x745b] Extending timeout for 0x17 request Error handling '_save_attribute' event with (00:12:4b:00:24:43:ed:cc, 1, 0, 5, 'ptvo_counter_2ch') params: FOREIGN KEY constraint failed [0x15CE](lumi.sensor_wleak.aq1): Device seen - marking the device available and resetting counter [0x15CE](lumi.sensor_wleak.aq1): Update device availability - device available: True - new availability: True - changed: False Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=0, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=None, profile_id=0, cluster_id=32801, data=Serialized[b'\x13\x00'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-44) [0x745B:1:0x0001]: bound 'power' cluster: Status.SUCCESS [0x745B:1:0x0001]: Configuring cluster attribute reporting [0x745B:1:0x0001] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=False, direction=, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=False), tsn=25, command_id=, *direction=, *is_reply=False) [0x745B:1:0x0001] Sending request: Configure_Reporting(config_records=[AttributeReportingConfig(direction=0, attrid=0x0020, datatype=32, min_interval=3600, max_interval=10800, reportable_change=1), AttributeReportingConfig(direction=0, attrid=0x0021, datatype=32, min_interval=3600, max_interval=10800, reportable_change=1)]) [0x745b] Extending timeout for 0x19 request Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=0, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=None, profile_id=0, cluster_id=32801, data=Serialized[b'\x15\x00'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-44) [0x745B:6:0x0006]: bound 'on_off' cluster: Status.SUCCESS [0x745B:6:0x0006]: Configuring cluster attribute reporting [0x745B:6:0x0006] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=False, direction=, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=False), tsn=27, command_id=, *direction=, *is_reply=False) [0x745B:6:0x0006] Sending request: Configure_Reporting(config_records=[AttributeReportingConfig(direction=0, attrid=0x0000, datatype=16, min_interval=0, max_interval=900, reportable_change=1)]) [0x745b] Extending timeout for 0x1b request Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=0, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=0, source_route=None, extended_timeout=False, tsn=None, profile_id=0, cluster_id=32801, data=Serialized[b'\x17\x00'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-43) [0x745B:6:0x0006]: bound 'on_off' cluster: Status.SUCCESS [0x745B:6:0x0006]: finished channel configuration Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=1, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=1, data=Serialized[b'\x18\x19\x07\x8c\x00 \x00\x8c\x00!\x00'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-44) [0x745B:1:0x0001] Received ZCL frame: b'\x18\x19\x07\x8c\x00 \x00\x8c\x00!\x00' [0x745B:1:0x0001] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=25, command_id=7, *direction=, *is_reply=True) [0x745B:1:0x0001] Decoded ZCL frame: PowerConfiguration:Configure_Reporting_rsp(status_records=[ConfigureReportingResponseRecord(status=, direction=, attrid=32), ConfigureReportingResponseRecord(status=, direction=, attrid=33)]) [0x745B:1:0x0001]: Successfully configured reporting for 'set()' on 'power' cluster [0x745B:1:0x0001]: Failed to configure reporting for '['battery_voltage', 'battery_percentage_remaining']' on 'power' cluster: [ConfigureReportingResponseRecord(status=, direction=, attrid=32), ConfigureReportingResponseRecord(status=, direction=, attrid=33)] [0x745B:1:0x0001]: finished channel configuration [0x745B:1:0x0000]: 'async_configure' stage succeeded [0x745B:1:0x0001]: 'async_configure' stage succeeded Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=6, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=6, data=Serialized[b'\x18\x1b\x07\x00'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-44) [0x745B:6:0x0006] Received ZCL frame: b'\x18\x1b\x07\x00' [0x745B:6:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=27, command_id=7, *direction=, *is_reply=True) [0x745B:6:0x0006] Decoded ZCL frame: OnOff:Configure_Reporting_rsp(status_records=[ConfigureReportingResponseRecord(status=)]) [0x745B:6:0x0006]: Successfully configured reporting for '{'on_off': (0, 900, 1)}' on 'on_off' cluster: [ConfigureReportingResponseRecord(status=)] [0x745B:6:0x0006]: finished channel configuration [0x745B:6:0x0006]: 'async_configure' stage succeeded [0x745B:6:0x0006]: 'async_configure' stage succeeded [0x745B](ptvo_counter_2ch): completed configuration [0x745B](ptvo_counter_2ch): started initialization [0x745B:ZDO](ptvo_counter_2ch): 'async_initialize' stage succeeded [0x745B:1:0x0000]: initializing channel: from_cache: False [0x745B:1:0x0000]: finished channel initialization [0x745B:1:0x0001]: initializing channel: from_cache: False [0x745B:1:0x0001]: initializing uncached channel attributes: ['battery_voltage', 'battery_percentage_remaining'] - from cache[False] [0x745B:1:0x0001]: Reading attributes in chunks: ['battery_voltage', 'battery_percentage_remaining'] [0x745B:1:0x0001] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=False, direction=, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=False), tsn=29, command_id=, *direction=, *is_reply=False) [0x745B:1:0x0001] Sending request: Read_Attributes(attribute_ids=[32, 33]) [0x745b] Extending timeout for 0x1d request [0x745B:6:0x0006]: initializing channel: from_cache: False [0x745B:6:0x0006]: initializing cached channel attributes: ['start_up_on_off'] [0x745B:6:0x0006]: Reading attributes in chunks: ['start_up_on_off'] [0x745B:6:0x0006] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=False, direction=, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=False), tsn=31, command_id=, *direction=, *is_reply=False) [0x745B:6:0x0006] Sending request: Read_Attributes(attribute_ids=[16387]) [0x745b] Extending timeout for 0x1f request [0x745B:6:0x0006]: initializing channel: from_cache: False [0x745B:6:0x0006]: finished channel initialization Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=1, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=1, data=Serialized[b'\x18\x1d\x01 \x00\x00 \xff!\x00\x00 \xff'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-44) [0x745B:1:0x0001] Received ZCL frame: b'\x18\x1d\x01 \x00\x00 \xff!\x00\x00 \xff' [0x745B:1:0x0001] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=29, command_id=1, *direction=, *is_reply=True) [0x745B:1:0x0001] Decoded ZCL frame: PowerConfiguration:Read_Attributes_rsp(status_records=[ReadAttributeRecord(attrid=0x0020, status=, value=TypeValue(type=uint8_t, value=255)), ReadAttributeRecord(attrid=0x0021, status=, value=TypeValue(type=uint8_t, value=255))]) [0x745B:1:0x0001]: Performing channel specific initialization: ['battery_voltage', 'battery_percentage_remaining'] [0x745B:1:0x0001]: Reading attributes in chunks: ['battery_size', 'battery_quantity'] [0x745B:1:0x0001] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=False, direction=, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=False), tsn=33, command_id=, *direction=, *is_reply=False) [0x745B:1:0x0001] Sending request: Read_Attributes(attribute_ids=[49, 51]) [0x745b] Extending timeout for 0x21 request Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=6, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=6, data=Serialized[b'\x18\x1f\x01\x03@\x86'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-44) [0x745B:6:0x0006] Received ZCL frame: b'\x18\x1f\x01\x03@\x86' [0x745B:6:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=31, command_id=1, *direction=, *is_reply=True) [0x745B:6:0x0006] Decoded ZCL frame: OnOff:Read_Attributes_rsp(status_records=[ReadAttributeRecord(attrid=0x4003, status=)]) [0x745B:6:0x0006]: initializing uncached channel attributes: ['on_off'] - from cache[False] [0x745B:6:0x0006]: Reading attributes in chunks: ['on_off'] [0x745B:6:0x0006] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=False, direction=, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True, *is_reply=False), tsn=35, command_id=, *direction=, *is_reply=False) [0x745B:6:0x0006] Sending request: Read_Attributes(attribute_ids=[0]) [0x745b] Extending timeout for 0x23 request Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=1, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=1, data=Serialized[b'\x18!\x011\x00\x863\x00\x86'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-44) [0x745B:1:0x0001] Received ZCL frame: b'\x18!\x011\x00\x863\x00\x86' [0x745B:1:0x0001] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=33, command_id=1, *direction=, *is_reply=True) [0x745B:1:0x0001] Decoded ZCL frame: PowerConfiguration:Read_Attributes_rsp(status_records=[ReadAttributeRecord(attrid=0x0031, status=), ReadAttributeRecord(attrid=0x0033, status=)]) [0x745B:1:0x0001]: finished channel initialization [0x745B:1:0x0000]: 'async_initialize' stage succeeded [0x745B:1:0x0001]: 'async_initialize' stage succeeded [0xE4C5](lumi.remote.b486opcn01): Device seen - marking the device available and resetting counter [0xE4C5](lumi.remote.b486opcn01): Update device availability - device available: True - new availability: True - changed: False Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=6, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=6, data=Serialized[b'\x18#\x01\x00\x00\x00\x10\x00'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-44) [0x745B:6:0x0006] Received ZCL frame: b'\x18#\x01\x00\x00\x00\x10\x00' [0x745B:6:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=35, command_id=1, *direction=, *is_reply=True) [0x745B:6:0x0006] Decoded ZCL frame: OnOff:Read_Attributes_rsp(status_records=[ReadAttributeRecord(attrid=0x0000, status=, value=TypeValue(type=Bool, value=))]) [0x745B:6:0x0006]: finished channel initialization [0x745B:6:0x0006]: 'async_initialize' stage succeeded [0x745B:6:0x0006]: 'async_initialize' stage succeeded [0x745B](ptvo_counter_2ch): power source: Battery or Unknown [0x745B](ptvo_counter_2ch): completed initialization start_up_on_off is not supported - skipping ZHAStartupOnOffSelectEntity entity creation [0xC85C](lumi.remote.b486opcn01): Device seen - marking the device available and resetting counter [0xC85C](lumi.remote.b486opcn01): Update device availability - device available: True - new availability: True - changed: False [0xFD20](lumi.remote.b486opcn01): Device seen - marking the device available and resetting counter [0xFD20](lumi.remote.b486opcn01): Update device availability - device available: True - new availability: True - changed: False [0xE4C5](lumi.remote.b486opcn01): Device seen - marking the device available and resetting counter [0xE4C5](lumi.remote.b486opcn01): Update device availability - device available: True - new availability: True - changed: False [0xA547](lumi.remote.b486opcn01): Device seen - marking the device available and resetting counter [0xA547](lumi.remote.b486opcn01): Update device availability - device available: True - new availability: True - changed: False [0xC85C](lumi.remote.b486opcn01): Device seen - marking the device available and resetting counter [0xC85C](lumi.remote.b486opcn01): Update device availability - device available: True - new availability: True - changed: False Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=1, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=1, data=Serialized[b'\x18\x00\n!\x00 \xc8 \x00 '], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-46) [0x745B:1:0x0001] Received ZCL frame: b'\x18\x00\n!\x00 \xc8 \x00 ' [0x745B:1:0x0001] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=0, command_id=10, *direction=, *is_reply=True) [0x745B:1:0x0001] Decoded ZCL frame: PowerConfiguration:Report_Attributes(attribute_reports=[Attribute(attrid=0x0021, value=TypeValue(type=uint8_t, value=200)), Attribute(attrid=0x0020, value=TypeValue(type=uint8_t, value=32))]) [0x745B:1:0x0001] Received command 0x0A (TSN 0): Report_Attributes(attribute_reports=[Attribute(attrid=0x0021, value=TypeValue(type=uint8_t, value=200)), Attribute(attrid=0x0020, value=TypeValue(type=uint8_t, value=32))]) [0x745B:1:0x0001] Attribute report received: battery_percentage_remaining=200, battery_voltage=32 Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=6, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=6, data=Serialized[b'\x18\x01\n\x00\x00\x10\x00'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-46) [0x745B:6:0x0006] Received ZCL frame: b'\x18\x01\n\x00\x00\x10\x00' [0x745B:6:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=1, command_id=10, *direction=, *is_reply=True) [0x745B:6:0x0006] Decoded ZCL frame: OnOff:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=))]) [0x745B:6:0x0006] Received command 0x0A (TSN 1): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=))]) [0x745B:6:0x0006] Attribute report received: on_off= Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=3, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=12, data=Serialized[b'\x18\x02\nU\x009\x00\x00\xb8Ao\x00\x18\x00\x1c\x00B\x03,0A'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-46) [0x745B:3:0x000c] Received ZCL frame: b'\x18\x02\nU\x009\x00\x00\xb8Ao\x00\x18\x00\x1c\x00B\x03,0A' [0x745B:3:0x000c] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=2, command_id=10, *direction=, *is_reply=True) [0x745B:3:0x000c] Decoded ZCL frame: AnalogInput:Report_Attributes(attribute_reports=[Attribute(attrid=0x0055, value=TypeValue(type=Single, value=23.0)), Attribute(attrid=0x006F, value=TypeValue(type=bitmap8, value=)), Attribute(attrid=0x001C, value=TypeValue(type=CharacterString, value=',0A'))]) [0x745B:3:0x000c] Received command 0x0A (TSN 2): Report_Attributes(attribute_reports=[Attribute(attrid=0x0055, value=TypeValue(type=Single, value=23.0)), Attribute(attrid=0x006F, value=TypeValue(type=bitmap8, value=)), Attribute(attrid=0x001C, value=TypeValue(type=CharacterString, value=',0A'))]) [0x745B:3:0x000c] Attribute report received: present_value=23.0, status_flags=, description=',0A' Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=5, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=12, data=Serialized[b'\x18\x03\nU\x009\x00\x00pAo\x00\x18\x00\x1c\x00B\x03,0A'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-46) [0x745B:5:0x000c] Received ZCL frame: b'\x18\x03\nU\x009\x00\x00pAo\x00\x18\x00\x1c\x00B\x03,0A' [0x745B:5:0x000c] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=3, command_id=10, *direction=, *is_reply=True) [0x745B:5:0x000c] Decoded ZCL frame: AnalogInput:Report_Attributes(attribute_reports=[Attribute(attrid=0x0055, value=TypeValue(type=Single, value=15.0)), Attribute(attrid=0x006F, value=TypeValue(type=bitmap8, value=)), Attribute(attrid=0x001C, value=TypeValue(type=CharacterString, value=',0A'))]) [0x745B:5:0x000c] Received command 0x0A (TSN 3): Report_Attributes(attribute_reports=[Attribute(attrid=0x0055, value=TypeValue(type=Single, value=15.0)), Attribute(attrid=0x006F, value=TypeValue(type=bitmap8, value=)), Attribute(attrid=0x001C, value=TypeValue(type=CharacterString, value=',0A'))]) [0x745B:5:0x000c] Attribute report received: present_value=15.0, status_flags=, description=',0A' [0x15CE](lumi.sensor_wleak.aq1): Device seen - marking the device available and resetting counter [0x15CE](lumi.sensor_wleak.aq1): Update device availability - device available: True - new availability: True - changed: False [0xFD20](lumi.remote.b486opcn01): Device seen - marking the device available and resetting counter [0xFD20](lumi.remote.b486opcn01): Update device availability - device available: True - new availability: True - changed: False [0x15CE](lumi.sensor_wleak.aq1): Device seen - marking the device available and resetting counter [0x15CE](lumi.sensor_wleak.aq1): Update device availability - device available: True - new availability: True - changed: False [0x745B](ptvo_counter_2ch): Device seen - marking the device available and resetting counter [0x745B](ptvo_counter_2ch): Update device availability - device available: True - new availability: True - changed: False [0xE4C5](lumi.remote.b486opcn01): Device seen - marking the device available and resetting counter [0xE4C5](lumi.remote.b486opcn01): Update device availability - device available: True - new availability: True - changed: False [0xA547](lumi.remote.b486opcn01): Device seen - marking the device available and resetting counter [0xA547](lumi.remote.b486opcn01): Update device availability - device available: True - new availability: True - changed: False Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=6, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=6, data=Serialized[b'\x18\x04\n\x00\x00\x10\x01'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-53) [0x745B:6:0x0006] Received ZCL frame: b'\x18\x04\n\x00\x00\x10\x01' [0x745B:6:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=4, command_id=10, *direction=, *is_reply=True) [0x745B:6:0x0006] Decoded ZCL frame: OnOff:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=))]) [0x745B:6:0x0006] Received command 0x0A (TSN 4): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=))]) [0x745B:6:0x0006] Attribute report received: on_off= Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=1, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=1, data=Serialized[b'\x18\x05\n!\x00 \xc8 \x00 \x1f'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-54) [0x745B:1:0x0001] Received ZCL frame: b'\x18\x05\n!\x00 \xc8 \x00 \x1f' [0x745B:1:0x0001] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=5, command_id=10, *direction=, *is_reply=True) [0x745B:1:0x0001] Decoded ZCL frame: PowerConfiguration:Report_Attributes(attribute_reports=[Attribute(attrid=0x0021, value=TypeValue(type=uint8_t, value=200)), Attribute(attrid=0x0020, value=TypeValue(type=uint8_t, value=31))]) [0x745B:1:0x0001] Received command 0x0A (TSN 5): Report_Attributes(attribute_reports=[Attribute(attrid=0x0021, value=TypeValue(type=uint8_t, value=200)), Attribute(attrid=0x0020, value=TypeValue(type=uint8_t, value=31))]) [0x745B:1:0x0001] Attribute report received: battery_percentage_remaining=200, battery_voltage=31 Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=1, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=1, data=Serialized[b'\x18\x06\n!\x00 \xc8 \x00 \x1f'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-54) [0x745B:1:0x0001] Received ZCL frame: b'\x18\x06\n!\x00 \xc8 \x00 \x1f' [0x745B:1:0x0001] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=6, command_id=10, *direction=, *is_reply=True) [0x745B:1:0x0001] Decoded ZCL frame: PowerConfiguration:Report_Attributes(attribute_reports=[Attribute(attrid=0x0021, value=TypeValue(type=uint8_t, value=200)), Attribute(attrid=0x0020, value=TypeValue(type=uint8_t, value=31))]) [0x745B:1:0x0001] Received command 0x0A (TSN 6): Report_Attributes(attribute_reports=[Attribute(attrid=0x0021, value=TypeValue(type=uint8_t, value=200)), Attribute(attrid=0x0020, value=TypeValue(type=uint8_t, value=31))]) [0x745B:1:0x0001] Attribute report received: battery_percentage_remaining=200, battery_voltage=31 Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=6, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=6, data=Serialized[b'\x18\x07\n\x00\x00\x10\x01'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-55) [0x745B:6:0x0006] Received ZCL frame: b'\x18\x07\n\x00\x00\x10\x01' [0x745B:6:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=7, command_id=10, *direction=, *is_reply=True) [0x745B:6:0x0006] Decoded ZCL frame: OnOff:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=))]) [0x745B:6:0x0006] Received command 0x0A (TSN 7): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=))]) [0x745B:6:0x0006] Attribute report received: on_off= Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=3, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=12, data=Serialized[b'\x18\x08\nU\x009\x00\x00\xb8Ao\x00\x18\x00\x1c\x00B\x03,0A'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-55) [0x745B:3:0x000c] Received ZCL frame: b'\x18\x08\nU\x009\x00\x00\xb8Ao\x00\x18\x00\x1c\x00B\x03,0A' [0x745B:3:0x000c] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=8, command_id=10, *direction=, *is_reply=True) [0x745B:3:0x000c] Decoded ZCL frame: AnalogInput:Report_Attributes(attribute_reports=[Attribute(attrid=0x0055, value=TypeValue(type=Single, value=23.0)), Attribute(attrid=0x006F, value=TypeValue(type=bitmap8, value=)), Attribute(attrid=0x001C, value=TypeValue(type=CharacterString, value=',0A'))]) [0x745B:3:0x000c] Received command 0x0A (TSN 8): Report_Attributes(attribute_reports=[Attribute(attrid=0x0055, value=TypeValue(type=Single, value=23.0)), Attribute(attrid=0x006F, value=TypeValue(type=bitmap8, value=)), Attribute(attrid=0x001C, value=TypeValue(type=CharacterString, value=',0A'))]) [0x745B:3:0x000c] Attribute report received: present_value=23.0, status_flags=, description=',0A' [0xE4C5](lumi.remote.b486opcn01): Device seen - marking the device available and resetting counter [0xE4C5](lumi.remote.b486opcn01): Update device availability - device available: True - new availability: True - changed: False Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=5, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=12, data=Serialized[b'\x18\t\nU\x009\x00\x00pAo\x00\x18\x00\x1c\x00B\x03,0A'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-54) [0x745B:5:0x000c] Received ZCL frame: b'\x18\t\nU\x009\x00\x00pAo\x00\x18\x00\x1c\x00B\x03,0A' [0x745B:5:0x000c] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=9, command_id=10, *direction=, *is_reply=True) [0x745B:5:0x000c] Decoded ZCL frame: AnalogInput:Report_Attributes(attribute_reports=[Attribute(attrid=0x0055, value=TypeValue(type=Single, value=15.0)), Attribute(attrid=0x006F, value=TypeValue(type=bitmap8, value=)), Attribute(attrid=0x001C, value=TypeValue(type=CharacterString, value=',0A'))]) [0x745B:5:0x000c] Received command 0x0A (TSN 9): Report_Attributes(attribute_reports=[Attribute(attrid=0x0055, value=TypeValue(type=Single, value=15.0)), Attribute(attrid=0x006F, value=TypeValue(type=bitmap8, value=)), Attribute(attrid=0x001C, value=TypeValue(type=CharacterString, value=',0A'))]) [0x745B:5:0x000c] Attribute report received: present_value=15.0, status_flags=, description=',0A' [0xC85C](lumi.remote.b486opcn01): Device seen - marking the device available and resetting counter [0xC85C](lumi.remote.b486opcn01): Update device availability - device available: True - new availability: True - changed: False Received a packet: ZigbeePacket(src=AddrModeAddress(addr_mode=, address=0x745B), src_ep=6, dst=AddrModeAddress(addr_mode=, address=0x0000), dst_ep=1, source_route=None, extended_timeout=False, tsn=None, profile_id=260, cluster_id=6, data=Serialized[b'\x18\n\n\x00\x00\x10\x00'], tx_options=, radius=0, non_member_radius=0, lqi=255, rssi=-55) [0x745B:6:0x0006] Received ZCL frame: b'\x18\n\n\x00\x00\x10\x00' [0x745B:6:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=, is_manufacturer_specific=0, direction=, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True, *is_reply=True), tsn=10, command_id=10, *direction=, *is_reply=True) [0x745B:6:0x0006] Decoded ZCL frame: OnOff:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=))]) [0x745B:6:0x0006] Received command 0x0A (TSN 10): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=))]) [0x745B:6:0x0006] Attribute report received: on_off= [0xFD20](lumi.remote.b486opcn01): Device seen - marking the device available and resetting counter [0xFD20](lumi.remote.b486opcn01): Update device availability - device available: True - new availability: True - changed: False ```

[Additional context Add any other context or screenshots about the feature request here. Original post https://modkam.ru/2021/04/29/schetchik-impulsov-zigbee/?fbclid=IwAR0WIscexuTcIHgT7jxiSWtjLfeWT2RZ9_4AU9m14UmLeTme0i5xh8A6Y3o

MattWestb commented 1 year ago

Then ptvo have making the firmware the easy way and not making it Zigbee compatible is ZHA only showing the cluster that is OK by Zigbee standard. If ptvo or some other user is making one quirk for correcting it shall the device working OK until that you can only using the standard function from the device.

WiktorBuczko commented 1 year ago

Does it mean I have to flash the module with other firmware from ptvo? How it should be done in order to get the pulse counter to be recognized by ZHA?

WiktorBuczko commented 1 year ago

I have also found external converter file for zigbee2mqtt, maybe that will help.

Code ptvo_counter_2ch.js ```js const zigbeeHerdsmanConverters = require('zigbee-herdsman-converters'); const exposes = zigbeeHerdsmanConverters.exposes; const ea = exposes.access; const e = exposes.presets; const fz = zigbeeHerdsmanConverters.fromZigbeeConverters; const tz = zigbeeHerdsmanConverters.toZigbeeConverters; const ptvo_switch = zigbeeHerdsmanConverters.findByDevice({ modelID: 'ptvo.switch' }); fz.legacy = ptvo_switch.meta.tuyaThermostatPreset; tz.ptvo_config_scale_factor = { options: [exposes.numeric(`scale_factor3`, ea.SET).withValueMin(0).withDescription('Scale factor for counter 1'), exposes.numeric(`scale_factor5`, ea.SET).withValueMin(0).withDescription('Scale factor for counter 2'), ], }; fz.ptvo_switch_analog_input_scaled = { cluster: 'genAnalogInput', type: ['attributeReport', 'readResponse'], convert: (model, msg, publish, options, meta) => { const channel = msg.endpoint.ID; const scaleName = `scale_factor${channel}`; if (options && options.hasOwnProperty(scaleName)) { const scaleFactor = parseFloat(options[scaleName]); if (scaleFactor != 0) { msg.data['presentValue'] *= scaleFactor; } } const payload = fz.ptvo_switch_analog_input.convert(model, msg, publish, options, meta); return payload; }, }; const device = { zigbeeModel: ['ptvo_counter_2ch'], model: 'ptvo_counter_2ch', vendor: 'Custom devices (DiY)', description: '[Configurable firmware](https://ptvo.info/zigbee-configurable-firmware-features/)', fromZigbee: [fz.ignore_basic_report, fz.battery, fz.ptvo_switch_analog_input_scaled, fz.on_off], toZigbee: [tz.ptvo_switch_trigger, tz.ptvo_switch_analog_input, tz.on_off, tz.ptvo_config_scale_factor], exposes: [e.battery(), exposes.numeric('l3', ea.STATE_SET).withValueMax(999999999).withDescription('Counter 1 value. Write zero or positive value to set a counter value. Write a negative value to set a wakeup interval in minutes'), exposes.numeric('l5', ea.STATE_SET).withValueMax(999999999).withDescription('Counter 2 value. Write zero or positive value to set a counter value. Write a negative value to set a wakeup interval in minutes'), e.switch().withEndpoint('l6'), e.battery_voltage(), e.linkquality(), ], meta: { multiEndpoint: true, }, endpoint: (device) => { return { l3: 3, l5: 5, l6: 6, }; }, icon: 'data:image/png;base64,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', }; module.exports = device; ```
github-actions[bot] commented 1 year 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.