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
683 stars 636 forks source link

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

Open wurmloch1337 opened 1 month ago

wurmloch1337 commented 1 month 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 4 weeks 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 4 weeks ago

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

Thks.