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
769 stars 702 forks source link

[Device Support Request] TS011F by _TZ3000_cicwjqth | Greensun Outdoor Plug | Tuya #3158

Open wurmloch1337 opened 6 months ago

wurmloch1337 commented 6 months ago

Problem description

Received a new 16A Tuya plug today from the company "GreenSun" ordered on Amazon. The default integration worked, except it showed the Current value by x1000.

I made it work with a custom quirk. It looks nearly like a normal tuya plug, but the order is different and there is no 242 endpoint.

Unfortunately I am not able to get more readings than Power, Current, Voltage. The product page states, that it should be capable of metering like power delivered.

Solution description

Please have a look at my custom quirk and maybe find the error why it it not showing the other values you would expect.

Screenshots/Video

Screenshots/Video [Paste/upload your 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=4417, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, 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", "0x0702", "0x0b04", "0xe000", "0xe001" ], "output_clusters": [ "0x000a", "0x0019" ] } }, "manufacturer": "_TZ3000_cicwjqth", "model": "TS011F" } ```

Diagnostic information

Diagnostic information ```json { "home_assistant": { "installation_type": "Home Assistant OS", "version": "2024.5.4", "dev": false, "hassio": true, "virtualenv": false, "python_version": "3.12.2", "docker": true, "arch": "x86_64", "timezone": "Europe/Berlin", "os_name": "Linux", "os_version": "6.6.29-haos", "supervisor": "2024.05.1", "host_os": "Home Assistant OS 12.3", "docker_version": "25.0.5", "chassis": "vm", "run_as_root": true }, "custom_components": { "growatt_server_api": { "documentation": "https://github.com/muppet3000/homeassistant-growatt_server_api", "version": "1.0.4", "requirements": [ "growattServer==1.3.0" ] }, "scheduler": { "documentation": "https://github.com/nielsfaber/scheduler-component", "version": "v0.0.0", "requirements": [] }, "dwd_weather": { "documentation": "https://github.com/FL550/dwd_weather", "version": "v2.1.2", "requirements": [ "simple_dwd_weatherforecast==2.0.29", "markdownify==0.6.5", "suntimes==1.1.2" ] }, "zha_toolkit": { "documentation": "https://github.com/mdeweerd/zha-toolkit", "version": "v1.1.10", "requirements": [ "pytz" ] }, "deutschebahn": { "documentation": "https://github.com/faserf/ha-deutschebahn#readme", "version": "2.2.1", "requirements": [ "schiene==0.26" ] }, "hacs": { "documentation": "https://hacs.xyz/docs/configuration/start", "version": "1.34.0", "requirements": [ "aiogithubapi>=22.10.1" ] } }, "integration_manifest": { "domain": "zha", "name": "Zigbee Home Automation", "after_dependencies": [ "onboarding", "usb" ], "codeowners": [ "@dmulcahey", "@adminiuga", "@puddly", "@TheJulianJES" ], "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.38.4", "pyserial==3.5", "pyserial-asyncio==0.6", "zha-quirks==0.0.115", "zigpy-deconz==0.23.1", "zigpy==0.64.0", "zigpy-xbee==0.20.1", "zigpy-zigate==0.12.0", "zigpy-znp==0.12.1", "universal-silabs-flasher==0.0.18", "pyserial-asyncio-fast==0.11" ], "usb": [ { "vid": "10C4", "pid": "EA60", "description": "*2652*", "known_devices": [ "slae.sh cc2652rb stick" ] }, { "vid": "10C4", "pid": "EA60", "description": "*slzb-07*", "known_devices": [ "smlight slzb-07" ] }, { "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": "0403", "pid": "6015", "description": "*conbee*", "known_devices": [ "Conbee III" ] }, { "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": 30000, "manufacturer": "_TZ3000_cicwjqth", "model": "TS011F", "name": "_TZ3000_cicwjqth TS011F", "quirk_applied": true, "quirk_class": "ts011f_switch_greensun.GreenSun_Outdoor_Plug", "quirk_id": null, "manufacturer_code": 4417, "power_source": "Mains", "lqi": 168, "rssi": -58, "last_seen": "2024-05-17T23:14:24", "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=4417, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, 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", "0x0702", "0x0b04", "0xe000", "0xe001" ], "output_clusters": [ "0x000a", "0x0019" ] } }, "manufacturer": "_TZ3000_cicwjqth", "model": "TS011F" }, "active_coordinator": false, "entities": [ { "entity_id": "button.balkon_dose_identifizieren", "name": "_TZ3000_cicwjqth TS011F" }, { "entity_id": "sensor.balkon_dose_stromstarke", "name": "_TZ3000_cicwjqth TS011F" }, { "entity_id": "sensor.balkon_dose_spannung", "name": "_TZ3000_cicwjqth TS011F" }, { "entity_id": "sensor.balkon_dose_leistung", "name": "_TZ3000_cicwjqth TS011F" }, { "entity_id": "switch.balkon_dose_schalter", "name": "_TZ3000_cicwjqth TS011F" }, { "entity_id": "update.balkon_dose_firmware", "name": "_TZ3000_cicwjqth TS011F" } ], "neighbors": [], "routes": [], "endpoint_names": [ { "name": "ON_OFF_PLUG_IN_UNIT" } ], "user_given_name": "Balkon_Dose", "device_reg_id": "e35b118861bddca14bd0f85adaac07bb", "area_id": "balkon", "cluster_details": { "1": { "device_type": { "name": "ON_OFF_PLUG_IN_UNIT", "id": 266 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": { "0x0001": { "attribute_name": "app_version", "value": 116 }, "0x0004": { "attribute_name": "manufacturer", "value": "_TZ3000_cicwjqth" }, "0x0005": { "attribute_name": "model", "value": "TS011F" }, "0x0007": { "attribute_name": "power_source", "value": 1 }, "0x0000": { "attribute_name": "zcl_version", "value": 3 } }, "unsupported_attributes": { "0xfffe": { "attribute_name": "reporting_status" } } }, "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": { "0x8000": { "attribute_name": "child_lock", "value": 0 }, "0x0000": { "attribute_name": "on_off", "value": 1 }, "0x8002": { "attribute_name": "power_on_state", "value": 2 } }, "unsupported_attributes": { "0x4003": { "attribute_name": "start_up_on_off" } } }, "0x0702": { "endpoint_attribute": "smartenergy_metering", "attributes": { "0x0000": { "attribute_name": "current_summ_delivered", "value": 0 }, "0x0302": { "attribute_name": "divisor", "value": 100 }, "0x0301": { "attribute_name": "multiplier", "value": 1 } }, "unsupported_attributes": { "0x0400": { "attribute_name": "instantaneous_demand" }, "0x0000": { "attribute_name": "current_summ_delivered" }, "0x0100": { "attribute_name": "current_tier1_summ_delivered" }, "0x0102": { "attribute_name": "current_tier2_summ_delivered" }, "0x0104": { "attribute_name": "current_tier3_summ_delivered" }, "0x0001": { "attribute_name": "current_summ_received" }, "0x0106": { "attribute_name": "current_tier4_summ_delivered" }, "0x0304": { "attribute_name": "demand_formatting" }, "0x0108": { "attribute_name": "current_tier5_summ_delivered" }, "0x010a": { "attribute_name": "current_tier6_summ_delivered" }, "0x0306": { "attribute_name": "metering_device_type" }, "0x0303": { "attribute_name": "summation_formatting" }, "0x0020": { "attribute_name": "active_register_tier_delivered" }, "0x0200": { "attribute_name": "status" }, "0x0300": { "attribute_name": "unit_of_measure" } } }, "0x0b04": { "endpoint_attribute": "electrical_measurement", "attributes": { "0x0603": { "attribute_name": "ac_current_divisor", "value": 1000 }, "0x0602": { "attribute_name": "ac_current_multiplier", "value": 1 }, "0x050b": { "attribute_name": "active_power", "value": 0 }, "0x0508": { "attribute_name": "rms_current", "value": 102 }, "0x0505": { "attribute_name": "rms_voltage", "value": 233 } }, "unsupported_attributes": { "0x0600": { "attribute_name": "ac_voltage_multiplier" }, "0x0601": { "attribute_name": "ac_voltage_divisor" }, "0x0604": { "attribute_name": "ac_power_multiplier" }, "0x0401": { "attribute_name": "ac_frequency_divisor" }, "0x0605": { "attribute_name": "ac_power_divisor" }, "0x0400": { "attribute_name": "ac_frequency_multiplier" }, "0x0000": { "attribute_name": "measurement_type" }, "0x0403": { "attribute_name": "power_divisor" }, "0x0402": { "attribute_name": "power_multiplier" }, "0x050a": { "attribute_name": "rms_current_max" }, "0x0507": { "attribute_name": "rms_voltage_max" }, "0x050d": { "attribute_name": "active_power_max" }, "0x0510": { "attribute_name": "power_factor" }, "0x050f": { "attribute_name": "apparent_power" }, "0x0300": { "attribute_name": "ac_frequency" }, "0x0302": { "attribute_name": "ac_frequency_max" } } }, "0xe000": { "endpoint_attribute": "tuya_manufacturer_specific_57344", "attributes": {}, "unsupported_attributes": {} }, "0xe001": { "endpoint_attribute": "tuya_external_switch_type", "attributes": {}, "unsupported_attributes": {} } }, "out_clusters": { "0x0019": { "endpoint_attribute": "ota", "attributes": { "0x0002": { "attribute_name": "current_file_version", "value": 1946234881 } }, "unsupported_attributes": {} }, "0x000a": { "endpoint_attribute": "time", "attributes": {}, "unsupported_attributes": {} } } } } } } ```

Logs

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

Custom quirk

Custom quirk ```python """tuya TS011F _TZ3000_cicwjqth Smart Plug Greensun Outdoor""" from zigpy.profiles import zgp, zha from zigpy.zcl.clusters.general import ( Basic, GreenPowerProxy, Groups, Identify, OnOff, Ota, Scenes, Time, ) from zigpy.zcl.clusters.smartenergy import Metering from zigpy.zcl.clusters.homeautomation import ElectricalMeasurement from zhaquirks.const import ( DEVICE_TYPE, ENDPOINTS, INPUT_CLUSTERS, MODEL, MODELS_INFO, OUTPUT_CLUSTERS, PROFILE_ID, ) from zhaquirks.tuya import ( TuyaZBE000Cluster, TuyaZBElectricalMeasurement, TuyaZBExternalSwitchTypeCluster, TuyaZBMeteringCluster, TuyaZBOnOffAttributeCluster, ) from zhaquirks.tuya.mcu import EnchantedDevice from zigpy.zcl.clusters.lightlink import LightLink class GreenSun_Outdoor_Plug(EnchantedDevice): """Tuya plug with metering support.""" signature = { MODELS_INFO: [ ("_TZ3000_cicwjqth", "TS011F"), ], # MODEL: "TS011F", ENDPOINTS: { #

Additional information

ordered here: https://www.amazon.de/dp/B0CYZL8TQH

ftreil commented 5 months ago

Same plug not working for me. The plug is detected , added to network then disconnect and become unavailable.

Tell me if I can provide some info to help.

Regards.

ftreil commented 5 months ago

Retry to add the plug with the 2024.6.1 version and after reload of ZHA it's working perfectly.

Thks.

jipem01 commented 4 months ago

Having same device. I can add it to the network and I can get few entities : switch, voltage, current power and intensity.

But :

I'm not familar with zigbee integration but if you need details/logs let me know i'll try to find them.

lennert-hd commented 2 months ago

I'm having the same issue and the plug is also incapable of recieving OTA updates.