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

[Device Support Request] VALLHORN Wireless Motion Sensor #3165

Open fzakfeld opened 6 months ago

fzakfeld commented 6 months ago

Problem description

Sensor is either stuck at "Configuring" (in Home Assistant) or - when configured - won't report any state (just shows the state from when it was added). Binding to a light surprisingly works, just doesn't report any actual state to HA.

Solution description

Fix support for VALLHORN motion sensors.

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=4476, 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=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": "0x0850", "input_clusters": [ "0x0000", "0x0001", "0x0003", "0x0020", "0x0b05", "0x1000", "0xfc7c", "0xfc81" ], "output_clusters": [ "0x0003", "0x0004", "0x0006", "0x0019", "0x1000" ] }, "2": { "profile_id": "0x0104", "device_type": "0x0107", "input_clusters": [ "0x0000", "0x0003", "0x0406" ], "output_clusters": [ "0x0003" ] }, "3": { "profile_id": "0x0104", "device_type": "0x0106", "input_clusters": [ "0x0000", "0x0003", "0x0400" ], "output_clusters": [ "0x0003" ] } }, "manufacturer": "IKEA of Sweden", "model": "VALLHORN Wireless Motion Sensor", "class": "zigpy.device.Device" } ```

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": "aarch64", "timezone": "Europe/Berlin", "os_name": "Linux", "os_version": "6.1.63-haos-raspi", "supervisor": "2024.05.1", "host_os": "Home Assistant OS 11.3", "docker_version": "24.0.7", "chassis": "embedded", "run_as_root": true }, "custom_components": {}, "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": 6762, "manufacturer": "IKEA of Sweden", "model": "VALLHORN Wireless Motion Sensor", "name": "IKEA of Sweden VALLHORN Wireless Motion Sensor", "quirk_applied": false, "quirk_class": "zigpy.device.Device", "quirk_id": null, "manufacturer_code": 4476, "power_source": "Battery or Unknown", "lqi": null, "rssi": null, "last_seen": "2024-05-22T23:32:51", "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=4476, 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=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": "0x0850", "input_clusters": [ "0x0000", "0x0001", "0x0003", "0x0020", "0x0b05", "0x1000", "0xfc7c", "0xfc81" ], "output_clusters": [ "0x0003", "0x0004", "0x0006", "0x0019", "0x1000" ] }, "2": { "profile_id": "0x0104", "device_type": "0x0107", "input_clusters": [ "0x0000", "0x0003", "0x0406" ], "output_clusters": [ "0x0003" ] }, "3": { "profile_id": "0x0104", "device_type": "0x0106", "input_clusters": [ "0x0000", "0x0003", "0x0400" ], "output_clusters": [ "0x0003" ] } }, "manufacturer": "IKEA of Sweden", "model": "VALLHORN Wireless Motion Sensor" }, "active_coordinator": false, "entities": [ { "entity_id": "binary_sensor.hallway_motion_sensor_opening", "name": "IKEA of Sweden VALLHORN Wireless Motion Sensor" }, { "entity_id": "binary_sensor.hallway_motion_sensor_occupancy", "name": "IKEA of Sweden VALLHORN Wireless Motion Sensor" }, { "entity_id": "button.hallway_motion_sensor_identify", "name": "IKEA of Sweden VALLHORN Wireless Motion Sensor" }, { "entity_id": "sensor.hallway_motion_sensor_battery", "name": "IKEA of Sweden VALLHORN Wireless Motion Sensor" }, { "entity_id": "sensor.hallway_motion_sensor_illuminance", "name": "IKEA of Sweden VALLHORN Wireless Motion Sensor" }, { "entity_id": "update.hallway_motion_sensor_firmware", "name": "IKEA of Sweden VALLHORN Wireless Motion Sensor" } ], "neighbors": [], "routes": [], "endpoint_names": [ { "name": "ON_OFF_SENSOR" }, { "name": "OCCUPANCY_SENSOR" }, { "name": "LIGHT_SENSOR" } ], "user_given_name": "Hallway Motion Sensor", "device_reg_id": "f448cd04eabc8dcf8cdc9f4e6a562ef8", "area_id": "hallway", "cluster_details": { "1": { "device_type": { "name": "ON_OFF_SENSOR", "id": 2128 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": { "0x0004": { "attribute_name": "manufacturer", "value": "IKEA of Sweden" }, "0x0005": { "attribute_name": "model", "value": "VALLHORN Wireless Motion Sensor" } }, "unsupported_attributes": {} }, "0x0001": { "endpoint_attribute": "power", "attributes": { "0x0021": { "attribute_name": "battery_percentage_remaining", "value": 162 }, "0x0033": { "attribute_name": "battery_quantity", "value": 2 }, "0x0031": { "attribute_name": "battery_size", "value": 4 }, "0x0020": { "attribute_name": "battery_voltage", "value": 26 } }, "unsupported_attributes": {} }, "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0x0020": { "endpoint_attribute": "poll_control", "attributes": { "0x0000": { "attribute_name": "checkin_interval", "value": 13200 } }, "unsupported_attributes": {} }, "0x0b05": { "endpoint_attribute": "diagnostic", "attributes": {}, "unsupported_attributes": {} }, "0x1000": { "endpoint_attribute": "lightlink", "attributes": {}, "unsupported_attributes": {} }, "0xfc7c": { "endpoint_attribute": "manufacturer_specific", "attributes": {}, "unsupported_attributes": {} }, "0xfc81": { "endpoint_attribute": "manufacturer_specific", "attributes": {}, "unsupported_attributes": {} } }, "out_clusters": { "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0x0004": { "endpoint_attribute": "groups", "attributes": {}, "unsupported_attributes": {} }, "0x0006": { "endpoint_attribute": "on_off", "attributes": { "0x0000": { "attribute_name": "on_off", "value": 0 } }, "unsupported_attributes": {} }, "0x0019": { "endpoint_attribute": "ota", "attributes": {}, "unsupported_attributes": {} }, "0x1000": { "endpoint_attribute": "lightlink", "attributes": {}, "unsupported_attributes": {} } } }, "2": { "device_type": { "name": "OCCUPANCY_SENSOR", "id": 263 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": {}, "unsupported_attributes": {} }, "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0x0406": { "endpoint_attribute": "occupancy", "attributes": { "0x0000": { "attribute_name": "occupancy", "value": 1 } }, "unsupported_attributes": {} } }, "out_clusters": { "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} } } }, "3": { "device_type": { "name": "LIGHT_SENSOR", "id": 262 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": {}, "unsupported_attributes": {} }, "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0x0400": { "endpoint_attribute": "illuminance", "attributes": { "0x0000": { "attribute_name": "measured_value", "value": 16812 } }, "unsupported_attributes": {} } }, "out_clusters": { "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} } } } } } } ```

Logs

No response

Custom quirk

No response

Additional information

No response

danvolchek commented 3 months ago

I'm also experiencing this

Fraighas commented 3 months ago

Hi, Did you guys found something to solve this ? I'm also experiencing this

danvolchek commented 3 months ago

After reading a bunch of threads, it looked to be a problem with the firmware of my Zigbee dongle - that it was too old.

The one I had was using Texas Instruments based firmware, and after more reading, there didn't seem to be an easy way to update TI based dongle firmware.

Instead, I purchased an SI Labs based dongle. The firmware it shipped worked out of the box - I didn't even need to upgrade it (I was going to use https://darkxst.github.io/silabs-firmware-builder/). It just came 30 minutes ago, you commented at the perfect time :)

So in my case it wasn't a zigpy or device handler problem, but rather a dongle firmware problem.

Also note: replacing the dongle required me to re-pair all my zigbee devices. There is a backup/import from backup flow when migrating to a new radio, but it didn't work for me.