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
682 stars 632 forks source link

[BUG] SONOFF ZBMINIL2 potentially requiring quirk #2949

Open Migsi opened 5 months ago

Migsi commented 5 months ago

Bug description

I've recently got my hands onto an SONOFF ZBMINIL2, which is generally working fine, BUT it appears to be improperly recognized as battery powered (or unknown). ~Also I've noticed it is impossible to add it to a Zigbee group (it doesn't get listed at the group setup page). Being unaware of the inner workings of ZHA, I see potential these two issues could be linked.~ After researching again, the Zigbee group issue appears to be unrelated: https://community.home-assistant.io/t/sonoff-zbminil2-cant-add-to-group/557814

Steps to reproduce

  1. Link the device
  2. Check the available entities (or the signature) ~3. Try to setup a Zigbee group with this device~

Expected behavior

I'd like the device to not have a (useless) battery indicator ~and be able to setup a Zigbee group containing it~.

Screenshots/Video

No response

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=4742, maximum_buffer_size=82, maximum_incoming_transfer_size=1024, server_mask=11264, maximum_outgoing_transfer_size=1024, 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": "0x0104", "device_type": "0x0002", "input_clusters": [ "0x0000", "0x0001", "0x0003", "0x0006", "0x0007", "0x0b05", "0xfc57" ], "output_clusters": [ "0x0019" ] } }, "manufacturer": "SONOFF", "model": "ZBMINIL2", "class": "zigpy.device.Device" } ```

Diagnostic information

Diagnostic information ```json { "home_assistant": { "installation_type": "Unknown", "version": "2024.1.5", "dev": false, "hassio": false, "virtualenv": false, "python_version": "3.11.6", "docker": false, "arch": "x86_64", "timezone": "Europe/Vienna", "os_name": "Linux", "os_version": "6.1.63-production+truenas", "run_as_root": true }, "custom_components": { "thermal_comfort": { "version": "2.2.2", "requirements": [] }, "truenas": { "version": "0.0.0", "requirements": [] }, "zha_toolkit": { "version": "v1.1.8", "requirements": [ "pytz" ] }, "hacs": { "version": "1.34.0", "requirements": [ "aiogithubapi>=22.10.1" ] }, "multiscrape": { "version": "6.5.0", "requirements": [ "lxml>=4.9.1", "beautifulsoup4>=4.12.2" ] }, "openweathermaphistory": { "version": "2.0.2", "requirements": [] } }, "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.6", "pyserial==3.5", "pyserial-asyncio==0.6", "zha-quirks==0.0.109", "zigpy-deconz==0.22.4", "zigpy==0.60.6", "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": 48767, "manufacturer": "SONOFF", "model": "ZBMINIL2", "name": "SONOFF ZBMINIL2", "quirk_applied": false, "quirk_class": "zigpy.device.Device", "quirk_id": null, "manufacturer_code": 4742, "power_source": "Battery or Unknown", "lqi": 76, "rssi": null, "last_seen": "2024-01-29T20:55:30", "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=4742, maximum_buffer_size=82, maximum_incoming_transfer_size=1024, server_mask=11264, maximum_outgoing_transfer_size=1024, 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": "0x0104", "device_type": "0x0002", "input_clusters": [ "0x0000", "0x0001", "0x0003", "0x0006", "0x0007", "0x0b05", "0xfc57" ], "output_clusters": [ "0x0019" ] } }, "manufacturer": "SONOFF", "model": "ZBMINIL2" }, "active_coordinator": false, "entities": [ { "entity_id": "sensor.bathroom_mirror_sw_light_rssi", "name": "SONOFF ZBMINIL2" }, { "entity_id": "sensor.bathroom_mirror_sw_light_lqi", "name": "SONOFF ZBMINIL2" }, { "entity_id": "switch.bathroom_mirror_sw_light", "name": "SONOFF ZBMINIL2" }, { "entity_id": "button.bathroom_mirror_sw_light_identify", "name": "SONOFF ZBMINIL2" }, { "entity_id": "select.bathroom_mirror_sw_light_start_up_behavior", "name": "SONOFF ZBMINIL2" } ], "neighbors": [], "routes": [], "endpoint_names": [ { "name": "ON_OFF_OUTPUT" } ], "user_given_name": "Bad Lampe Spiegel", "device_reg_id": "c9f9a8ea61a1895511a4f5431f488f02", "area_id": "bad", "cluster_details": { "1": { "device_type": { "name": "ON_OFF_OUTPUT", "id": 2 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": { "0x0004": { "attribute_name": "manufacturer", "value": "SONOFF" }, "0x0005": { "attribute_name": "model", "value": "ZBMINIL2" } }, "unsupported_attributes": {} }, "0x0001": { "endpoint_attribute": "power", "attributes": {}, "unsupported_attributes": { "0x0020": { "attribute_name": "battery_voltage" }, "0x0021": { "attribute_name": "battery_percentage_remaining" }, "0x0031": { "attribute_name": "battery_size" }, "0x0033": { "attribute_name": "battery_quantity" } } }, "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0x0006": { "endpoint_attribute": "on_off", "attributes": { "0x0000": { "attribute_name": "on_off", "value": 0 }, "0x4003": { "attribute_name": "start_up_on_off", "value": 0 } }, "unsupported_attributes": {} }, "0x0007": { "endpoint_attribute": "on_off_config", "attributes": {}, "unsupported_attributes": {} }, "0x0b05": { "endpoint_attribute": "diagnostic", "attributes": {}, "unsupported_attributes": {} }, "0xfc57": { "endpoint_attribute": "manufacturer_specific", "attributes": {}, "unsupported_attributes": {} } }, "out_clusters": { "0x0019": { "endpoint_attribute": "ota", "attributes": {}, "unsupported_attributes": {} } } } } } } ```

Logs

Logs ```python None ```

Additional information

~If these two issues are unrelated, I apologize for my wild guess and will happily reduce this ticket to the power source problematic only.~ If someone could provide me a hint on how to create a quirk to overwrite given property, I'd be happy to submit a PR.

noseshimself commented 2 weeks ago

It's not only that the power source is "battery or unknown"; the devices are potential routers but without being "mains" powered they are not eligible. I had to put another device in the area as Zigbee repeater which the switches were intended to be.