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
750 stars 685 forks source link

[Device Support Request] Circuit Breaker 63A with Power Monitoring and Threshold TS011F | _TZ3000_lepzuhto #2652

Open giball opened 1 year ago

giball commented 1 year ago

Problem description

Electrical measurements in this device not working properly - current and summation delivered (kWh) are too high.

Solution description

Please correct the current multiplier

Screenshots/Video

Screenshots/Video [Paste/upload your ![Zrzut ekranu 2023-10-16 224616](https://github.com/zigpy/zha-device-handlers/assets/82723610/9377859b-01ec-4a1c-a486-872af2a3dec3) media here]

Device signature

Device signature ```json "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=4098, maximum_buffer_size=82, maximum_incoming_transfer_size=82, server_mask=11264, maximum_outgoing_transfer_size=82, descriptor_capability_field=, *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": "0x010a", "input_clusters": [ "0x0000", "0x0003", "0x0004", "0x0005", "0x0006", "0x0402", "0x0702", "0x0b04", "0xe000", "0xe001" ], "output_clusters": [ "0x000a", "0x0019" ] }, "242": { "profile_id": "0xa1e0", "device_type": "0x0061", "input_clusters": [], "output_clusters": [ "0x0021" ] } }, "manufacturer": "_TZ3000_lepzuhto", "model": "TS011F", "class": "zigpy.device.Device" ```

Diagnostic information

Diagnostic information ```json [{ "home_assistant": { "installation_type": "Home Assistant OS", "version": "2023.10.3", "dev": false, "hassio": true, "virtualenv": false, "python_version": "3.11.5", "docker": true, "arch": "aarch64", "timezone": "Europe/Warsaw", "os_name": "Linux", "os_version": "6.1.21-v8", "supervisor": "2023.10.0", "host_os": "Home Assistant OS 11.0", "docker_version": "24.0.6", "chassis": "embedded", "run_as_root": true }, "custom_components": { "toyota": { "version": "1.2.11", "requirements": [ "mytoyota==0.7.8", "arrow" ] }, "hon": { "version": "0.6.5", "requirements": [] }, "hacs": { "version": "1.33.0", "requirements": [ "aiogithubapi>=22.10.1" ] } }, "integration_manifest": { "domain": "zha", "name": "Zigbee Home Automation", "after_dependencies": [ "onboarding", "usb" ], "codeowners": [ "@dmulcahey", "@adminiuga", "@puddly" ], "config_flow": true, "dependencies": [ "file_upload" ], "documentation": "https://www.home-assistant.io/integrations/zha", "iot_class": "local_polling", "loggers": [ "aiosqlite", "bellows", "crccheck", "pure_pcapy3", "zhaquirks", "zigpy", "zigpy_deconz", "zigpy_xbee", "zigpy_zigate", "zigpy_znp", "universal_silabs_flasher" ], "requirements": [ "bellows==0.36.5", "pyserial==3.5", "pyserial-asyncio==0.6", "zha-quirks==0.0.104", "zigpy-deconz==0.21.1", "zigpy==0.57.2", "zigpy-xbee==0.18.3", "zigpy-zigate==0.11.0", "zigpy-znp==0.11.5", "universal-silabs-flasher==0.0.14", "pyserial-asyncio-fast==0.11" ], "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" ] } ], "zeroconf": [ { "type": "_esphomelib._tcp.local.", "name": "tube*" }, { "type": "_zigate-zigbee-gateway._tcp.local.", "name": "*zigate*" }, { "type": "_zigstar_gw._tcp.local.", "name": "*zigstar*" }, { "type": "_uzg-01._tcp.local.", "name": "uzg-01*" }, { "type": "_slzb-06._tcp.local.", "name": "slzb-06*" } ], "is_built_in": true }, "data": { "ieee": "**REDACTED**", "nwk": 30405, "manufacturer": "_TZ3000_lepzuhto", "model": "TS011F", "name": "_TZ3000_lepzuhto TS011F", "quirk_applied": false, "quirk_class": "zigpy.device.Device", "manufacturer_code": 4098, "power_source": "Mains", "lqi": 255, "rssi": -52, "last_seen": "2023-10-16T22:42:32", "available": true, "device_type": "Router", "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=4098, maximum_buffer_size=82, maximum_incoming_transfer_size=82, server_mask=11264, maximum_outgoing_transfer_size=82, descriptor_capability_field=, *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": "0x010a", "input_clusters": [ "0x0000", "0x0003", "0x0004", "0x0005", "0x0006", "0x0402", "0x0702", "0x0b04", "0xe000", "0xe001" ], "output_clusters": [ "0x000a", "0x0019" ] }, "242": { "profile_id": "0xa1e0", "device_type": "0x0061", "input_clusters": [], "output_clusters": [ "0x0021" ] } }, "manufacturer": "_TZ3000_lepzuhto", "model": "TS011F" }, "active_coordinator": false, "entities": [ { "entity_id": "button.tz3000_lepzuhto_ts011f_identify", "name": "_TZ3000_lepzuhto TS011F" }, { "entity_id": "sensor.tz3000_lepzuhto_ts011f_rms_current", "name": "_TZ3000_lepzuhto TS011F" }, { "entity_id": "sensor.tz3000_lepzuhto_ts011f_rms_voltage", "name": "_TZ3000_lepzuhto TS011F" }, { "entity_id": "sensor.tz3000_lepzuhto_ts011f_power_factor", "name": "_TZ3000_lepzuhto TS011F" }, { "entity_id": "sensor.tz3000_lepzuhto_ts011f_temperature", "name": "_TZ3000_lepzuhto TS011F" }, { "entity_id": "sensor.tz3000_lepzuhto_ts011f_active_power", "name": "_TZ3000_lepzuhto TS011F" }, { "entity_id": "sensor.tz3000_lepzuhto_ts011f_summation_delivered", "name": "_TZ3000_lepzuhto TS011F" }, { "entity_id": "switch.tz3000_lepzuhto_ts011f_switch", "name": "_TZ3000_lepzuhto TS011F" } ], "neighbors": [ { "device_type": "Coordinator", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x0000", "permit_joining": "Unknown", "depth": "0", "lqi": "155" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x1FB0", "permit_joining": "Unknown", "depth": "15", "lqi": "106" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x32BF", "permit_joining": "Unknown", "depth": "15", "lqi": "127" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x5636", "permit_joining": "Unknown", "depth": "15", "lqi": "97" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x71DA", "permit_joining": "Unknown", "depth": "15", "lqi": "150" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Parent", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x88F5", "permit_joining": "Unknown", "depth": "15", "lqi": "204" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x9F02", "permit_joining": "Unknown", "depth": "15", "lqi": "102" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0xA7DA", "permit_joining": "Unknown", "depth": "15", "lqi": "84" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0xF2E1", "permit_joining": "Unknown", "depth": "15", "lqi": "151" } ], "routes": [ { "dest_nwk": "0x0000", "route_status": "Active", "memory_constrained": false, "many_to_one": true, "route_record_required": false, "next_hop": "0x0000" } ], "endpoint_names": [ { "name": "ON_OFF_PLUG_IN_UNIT" }, { "name": "PROXY_BASIC" } ], "user_given_name": null, "device_reg_id": "97403dfa4589b6825af226e1eb663b7d", "area_id": null, "cluster_details": { "1": { "device_type": { "name": "ON_OFF_PLUG_IN_UNIT", "id": 266 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": { "0x0004": { "attribute_name": "manufacturer", "value": "_TZ3000_lepzuhto" }, "0x0005": { "attribute_name": "model", "value": "TS011F" } }, "unsupported_attributes": {} }, "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0x0004": { "endpoint_attribute": "groups", "attributes": {}, "unsupported_attributes": {} }, "0x0005": { "endpoint_attribute": "scenes", "attributes": {}, "unsupported_attributes": {} }, "0x0006": { "endpoint_attribute": "on_off", "attributes": { "0x4002": { "attribute_name": "off_wait_time", "value": 0 }, "0x0000": { "attribute_name": "on_off", "value": 1 }, "0x4001": { "attribute_name": "on_time", "value": 0 } }, "unsupported_attributes": { "0x4003": { "attribute_name": "start_up_on_off" } } }, "0x0702": { "endpoint_attribute": "smartenergy_metering", "attributes": { "0x0000": { "attribute_name": "current_summ_delivered", "value": 5954 }, "0x0306": { "attribute_name": "metering_device_type", "value": 0 }, "0x0200": { "attribute_name": "status", "value": 0 }, "0x0303": { "attribute_name": "summation_formatting", "value": 0 }, "0x0300": { "attribute_name": "unit_of_measure", "value": 0 } }, "unsupported_attributes": { "0x0400": { "attribute_name": "instantaneous_demand" }, "0x0100": { "attribute_name": "current_tier1_summ_delivered" }, "0x0102": { "attribute_name": "current_tier2_summ_delivered" }, "0x0302": { "attribute_name": "divisor" }, "0x0104": { "attribute_name": "current_tier3_summ_delivered" }, "0x0304": { "attribute_name": "demand_formatting" }, "0x0106": { "attribute_name": "current_tier4_summ_delivered" }, "0x0301": { "attribute_name": "multiplier" }, "0x0108": { "attribute_name": "current_tier5_summ_delivered" }, "0x010a": { "attribute_name": "current_tier6_summ_delivered" } } }, "0x0b04": { "endpoint_attribute": "electrical_measurement", "attributes": { "0x050b": { "attribute_name": "active_power", "value": 198 }, "0x0508": { "attribute_name": "rms_current", "value": 1049 }, "0x0505": { "attribute_name": "rms_voltage", "value": 238 } }, "unsupported_attributes": { "0x0300": { "attribute_name": "ac_frequency" }, "0x0601": { "attribute_name": "ac_voltage_divisor" }, "0x0302": { "attribute_name": "ac_frequency_max" }, "0x0603": { "attribute_name": "ac_current_divisor" }, "0x0602": { "attribute_name": "ac_current_multiplier" }, "0x0605": { "attribute_name": "ac_power_divisor" }, "0x0604": { "attribute_name": "ac_power_multiplier" }, "0x0507": { "attribute_name": "rms_voltage_max" }, "0x0600": { "attribute_name": "ac_voltage_multiplier" }, "0x0401": { "attribute_name": "ac_frequency_divisor" }, "0x050a": { "attribute_name": "rms_current_max" }, "0x0000": { "attribute_name": "measurement_type" }, "0x050d": { "attribute_name": "active_power_max" }, "0x050f": { "attribute_name": "apparent_power" }, "0x0402": { "attribute_name": "power_multiplier" }, "0x0400": { "attribute_name": "ac_frequency_multiplier" }, "0x0403": { "attribute_name": "power_divisor" } } }, "0x0402": { "endpoint_attribute": "temperature", "attributes": { "0x0000": { "attribute_name": "measured_value", "value": 3058 } }, "unsupported_attributes": {} }, "0xe000": { "endpoint_attribute": null, "attributes": {}, "unsupported_attributes": {} }, "0xe001": { "endpoint_attribute": null, "attributes": {}, "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

Logs ```python [Paste the logs here] ```

Custom quirk

Custom quirk ```python [Paste your custom quirk here] ```

Additional information

No response

Pajuris commented 9 months ago

Tongou TO-Q-SY2-163JZT - TS011F _TZ3000_cayepv1a.

Wrong amperes (always show 62-63), wrong measurements (kWh), no threshold.

apolloathome commented 9 months ago

Same problem with Tongou TO-Q-SY2-163JZT - TS011F _TZ3000_cayepv1a

Screenshot_2024-01-20-23-26-08-388

{ "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=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": "0x0104", "device_type": "0x010a", "input_clusters": [ "0x0000", "0x0003", "0x0004", "0x0005", "0x0006", "0x0402", "0x0702", "0x0b04", "0xe000", "0xe001" ], "output_clusters": [ "0x000a", "0x0019" ] }, "242": { "profile_id": "0xa1e0", "device_type": "0x0061", "input_clusters": [], "output_clusters": [ "0x0021" ] } }, "manufacturer": "_TZ3000_cayepv1a", "model": "TS011F", "class": "zigpy.device.Device" }

Ampere is x 1000

Cumulated power is x 100 Edit on 29 march 24

dartvader1234 commented 8 months ago

TS011F by _TZ3000_cayepv1a Same problem but different values:

MnM001 commented 7 months ago

If we are talking abut the same device (TO-Q-SY2-163JZT) , and I think we are, the integration into ZHA needs a lot of work. The wrong measurements needs to be fixed, however, there are lot of things missing from this device in ZHA. Zigbee2mqtt has all of them covered.

As it is right now this device function as TO-Q-SY1 device, which is just a normal breaker with an ON/OFF button and displaying some power values. The TO-Q-SY2-163JZT is a different product in the sense that it had all the features of the TO-Q-SY1 device plus more:

This is the zigbee2mqtt page for this device:

https://www.zigbee2mqtt.io/devices/TO-Q-SY2-163JZT.html

Will be good to see the same kind of functionality in ZHA too because with out that it will just acts like a dumb TO-Q-SY1 device offering no protection at all.

The pic below shows what this device exposes in zigbee2mqtt:

image

liouma commented 7 months ago

Hello, I just received this device. The problem we all face is double: 1) x1000 A 2) x2 power

@dartvader1234 : you correctly detected the problem (1). You should have a look at the following discussion. Someone had the same problem with another device and solved (1) with a custom quirck (but not (2)). https://github.com/zigpy/zha-device-handlers/issues/2364

The problem (2) was identified in the thread above but not solved. If you check P=UI you will see that the power value is incorrect. Are everyone here using 220v? Anyone using 11v? The guess from the other thread is that TUYA calculate power from 110v. I can not confirm, the only thing I can say is that there is a x2 error (as the rule P=UI prove it).

I hope someone will be able to write a custom quirck inspired from this one: https://github.com/zigpy/zha-device-handlers/issues/2364

liouma commented 7 months ago

9After some more testing, here are more info. 1/ about the custom quirk from this thread: https://github.com/zigpy/zha-device-handlers/issues/2364 I can say that Current, Voltage and Power values are correct. I measured current and voltage. Then P=UI rule is verified with the displayed power value. (did not test yet summation delivered). -> the custom quirk is good, that would be great if someone could adapt it here!

2/ about the values measured by _TZ3000_cayepv1a: Values displayed in HA are:

Value measured with an external tool (simple AC clamp meter) = 0.130A

Let's simplify for now and says that there is a x1000 factor. There will still be a huge difference between 130 and 194. Can it be explained by the relatively low current and the method (AC clamp)?? Later I'll connect an amperemeter to get a more precise value. But already we can say that the info displayed by HA are:

Unfortunately I'm not able to write a custom quirk. I hope those info will help someone write one on the basis of this one: custom quirk for tuya clamp

For all others: you can make a simple correction using templates

liouma commented 7 months ago
  • The cumulated "summation delivered" in kWh is x100 (not x1000), so 200 kWh indicated with 2 kWh.
  • Power in Watt is ok.

@dartvader1234: can you please double check your power value? are your sure you do not read a value/2 ?? Are you using 110v or 220v ? -> if you are in 110v that could explain why your value is correct and mine /2

apolloathome commented 7 months ago

TS011F by _TZ3000_cayepv1a Same problem but different values:

  • Current in ampere is x1000 so it indicates 10000 Amperes with 10 Amperes load
  • The cumulated "summation delivered" in kWh is x100 (not x1000), so 200 kWh indicated with 2 kWh.
  • Power in Watt is ok.

You are rigth, me wrong, cumulated power is x 100

mortiy commented 7 months ago

Hi, Just want to add that there are two more fingerprints for this device: _TZ3000_cayepv1a and _TZ3000_qystbcjg

Taken from here: https://github.com/Vorta/zigbee-herdsman-converters/blob/master/src/devices/tuya.ts#L4805

apolloathome commented 7 months ago

Thank you mortiy. 👍

Milhauz666 commented 6 months ago

I have TO-Q-SY2-JZT - TS011F __TZ3000cayepv1a with SimpleDescriptor(endpoint=1, profile=260, device_type=266, device_version=1, input_clusters=[0, 3, 4, 5, 6, 1794, 2820, 1026, 57344, 57345], output_clusters=[25, 10]), which is using the default quirk "zigpy.device.Device",

There is a quirk for similar device _TZ3000_qeuvnohg having the same descriptor, but with slightly reordered clusters:

# <SimpleDescriptor endpoint=1 profile=260 device_type=266
            # device_version=1
            # input_clusters=[0, 3, 4, 5, 6, 1026, 1794, 2820, 57344, 57345]
            # output_clusters=[10, 25]>

I suppose tweaking this quirk should help to identify the __TZ3000cayepv1a device properly?

neildsb commented 5 months ago

Hi, please excuse the simple question, I too have this device (TO-Q-SY2-163JZT) and am using ZHA, and have noticed the lack of exposed sensors compared to Zigbee2mqtt (within this thread), will this be updated/rectified overtime, are there manual interventions/configuration changes needed to identify the current product? I am primarily using the switching function (noted the wrong current values) the other sensors are nice to have. Thanks in advance…

meremortals70 commented 5 months ago

Another vote for fixing this please.

apolloathome commented 5 months ago

I can send one TS011F by _TZ3000_cayepv1a to the developper team, for free to resolve this problem. If your are interested, please contact me. I will reply you by email

franortiz commented 2 months ago

I create a custom quirk for this device here

franortiz commented 1 month ago

I updated the file to make use of the quirk v2 features to expose the attributes to HA entities It works great except for some reason the entity names are not generated correctly and everything is suffixed with _none_xxx instead of the declared attribute name. Also, the number entity generator is not reading correctly the mode attribute and its showing a slider instead of an input box I already created an issue

franortiz commented 1 month ago

Updated version with quirks v2 support