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

[Device Support Request] Tuya AirBox Air Quality sensor #2884

Open csib opened 9 months ago

csib commented 9 months ago

Problem description

I've got this device: https://zigbee.blakadder.com/Tuya_AirBox.html

Added to HA, but I see only the "VOCs" as sensor, nothing else.

Solution description

Sensors must show up for VOCs, CO2, Formaldehide etc.

Screenshots/Video

Screenshots/Video ![image](https://github.com/zigpy/zha-device-handlers/assets/24816101/bd5212c8-94d8-4a16-b8ad-f81007ff361d)

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": "0x0100", "input_clusters": [ "0x0000", "0x0004", "0x0005", "0x0402", "0x0405", "0x040d", "0x042b", "0x042e", "0xef00" ], "output_clusters": [ "0x000a", "0x0019" ] }, "242": { "profile_id": "0xa1e0", "device_type": "0x0061", "input_clusters": [], "output_clusters": [ "0x0021" ] } }, "manufacturer": "_TZE200_dwcarsat", "model": "TS0601", "class": "zhaquirks.tuya.air.ts0601_air_quality.TuyaCO2SensorGPP" } ```

Diagnostic information

Diagnostic information ```json { "home_assistant": { "installation_type": "Home Assistant OS", "version": "2023.12.4", "dev": false, "hassio": true, "virtualenv": false, "python_version": "3.11.6", "docker": true, "arch": "x86_64", "timezone": "Europe/Budapest", "os_name": "Linux", "os_version": "6.1.63-haos", "supervisor": "2023.12.0", "host_os": "Home Assistant OS 11.2", "docker_version": "24.0.7", "chassis": "vm", "run_as_root": true }, "custom_components": { "hass_agent": { "version": "2022.11.9", "requirements": [] }, "imou_life": { "version": "1.0.13", "requirements": [ "imouapi==1.0.13" ] }, "tuya_local": { "version": "2023.12.0", "requirements": [ "tinytuya==1.13.1" ] }, "frigate": { "version": "4.0.0", "requirements": [ "pytz==2022.7" ] }, "localtuya": { "version": "5.2.1", "requirements": [] }, "browser_mod": { "version": "2.3.0", "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", "@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.37.4", "pyserial==3.5", "pyserial-asyncio==0.6", "zha-quirks==0.0.108", "zigpy-deconz==0.22.3", "zigpy==0.60.2", "zigpy-xbee==0.20.1", "zigpy-zigate==0.12.0", "zigpy-znp==0.12.1", "universal-silabs-flasher==0.0.15", "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": "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": 11379, "manufacturer": "_TZE200_dwcarsat", "model": "TS0601", "name": "_TZE200_dwcarsat TS0601", "quirk_applied": true, "quirk_class": "zhaquirks.tuya.air.ts0601_air_quality.TuyaCO2SensorGPP", "quirk_id": null, "manufacturer_code": 4417, "power_source": "Mains", "lqi": 24, "rssi": null, "last_seen": "2024-01-05T12:17:51", "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": "0x0100", "input_clusters": [ "0x0000", "0x0004", "0x0005", "0x0402", "0x0405", "0x040d", "0x042b", "0x042e", "0xef00" ], "output_clusters": [ "0x000a", "0x0019" ] }, "242": { "profile_id": "0xa1e0", "device_type": "0x0061", "input_clusters": [], "output_clusters": [ "0x0021" ] } }, "manufacturer": "_TZE200_dwcarsat", "model": "TS0601" }, "active_coordinator": false, "entities": [ { "entity_id": "sensor.airqualitylivingroom_vocs", "name": "_TZE200_dwcarsat TS0601" } ], "neighbors": [], "routes": [], "endpoint_names": [ { "name": "ON_OFF_LIGHT" }, { "name": "PROXY_BASIC" } ], "user_given_name": "AirQualityLivingRoom", "device_reg_id": "a6d39ae4477766337f91a5af19a307ef", "area_id": "nappali", "cluster_details": { "1": { "device_type": { "name": "ON_OFF_LIGHT", "id": 256 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": { "0x0001": { "attribute_name": "app_version", "value": 70 }, "0xfffd": { "attribute_name": "cluster_revision", "value": 2 }, "0x0007": { "attribute_name": "power_source", "value": 1 } }, "unsupported_attributes": { "0x0013": { "attribute_name": "alarm_mask" } } }, "0x0004": { "endpoint_attribute": "groups", "attributes": {}, "unsupported_attributes": {} }, "0x0005": { "endpoint_attribute": "scenes", "attributes": {}, "unsupported_attributes": {} }, "0xef00": { "endpoint_attribute": "tuya_manufacturer", "attributes": {}, "unsupported_attributes": {} }, "0x040d": { "endpoint_attribute": "carbon_dioxide_concentration", "attributes": { "0x0000": { "attribute_name": "measured_value", "value": 7e-06 } }, "unsupported_attributes": { "0x0001": { "attribute_name": "min_measured_value" }, "0x0002": { "attribute_name": "max_measured_value" }, "0xfffd": { "attribute_name": "cluster_revision" } } }, "0x042b": { "endpoint_attribute": "formaldehyde_concentration", "attributes": { "0x0000": { "attribute_name": "measured_value", "value": 0.00089 } }, "unsupported_attributes": { "0x0001": { "attribute_name": "min_measured_value" }, "0x0002": { "attribute_name": "max_measured_value" }, "0x0003": { "attribute_name": "tolerance" }, "0xfffd": { "attribute_name": "cluster_revision" } } }, "0x0405": { "endpoint_attribute": "humidity", "attributes": { "0x0000": { "attribute_name": "measured_value", "value": 5750 } }, "unsupported_attributes": {} }, "0x0402": { "endpoint_attribute": "temperature", "attributes": { "0xef12": { "attribute_name": "custom_temperature", "value": { "field_1": 0, "temperature": 234 } }, "0x0000": { "attribute_name": "measured_value", "value": 2340 } }, "unsupported_attributes": { "0xfffd": { "attribute_name": "cluster_revision" } } }, "0x042e": { "endpoint_attribute": "voc_level", "attributes": { "0x0000": { "attribute_name": "measured_value", "value": 0.0006799999999999999 } }, "unsupported_attributes": { "0x0001": { "attribute_name": "min_measured_value" }, "0x0002": { "attribute_name": "max_measured_value" }, "0x0003": { "attribute_name": "tolerance" } } } }, "out_clusters": { "0x000a": { "endpoint_attribute": "time", "attributes": {}, "unsupported_attributes": {} }, "0x0019": { "endpoint_attribute": "ota", "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

csib commented 9 months ago

Strange. Due to an eletricity outage the HA stopped then started now, and everything is working properly. I see all the entities. :)

peterclary commented 6 months ago

I had the same problem (actually had two entities but lost one of them when I removed and re-added the device).

After I saw @csib's comment about their electricity outage, I first tried doing a "Quick Reload". which didn't help. The next thing I tried was "Restart Home Assistant", and that fixed the issue for me.

Thanks @csib !

lc8DrBean commented 2 months ago

same here:

if not all entities are present in 1st place:

refresh browser window of main dashboard an you should have following sensors:

image

unfortunately the entities are mixed-up (at least CO2 and formaldehyde(=CH2O)) : see also https://github.com/Koenkk/zigbee2mqtt/issues/11033

any solutions for that?