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
750 stars 685 forks source link

[Device Support Request] Aeotec Pico Shutter #3107

Open SmartLiving-Rocks opened 6 months ago

SmartLiving-Rocks commented 6 months ago

Problem description

Hello all

I have the Pico Shutter form Aeotec successfully paired with ZHA using Home Assistant. https://store.aeotec.com/products/pico-shutter-zigbee-zga004

Change and Check Attribute: e.g. Switch Mode

I would like to know how I can change the switch type to Momentary switch. In the manual, it says that the 0xFD00 attribute needs to be changed to 0x01

bd1ebb1d30632f702f625956e7ea9dfd047a5f6b_2_1160x1000

ZHA in Home Assistant

If I check the device configuration I find the right section but I am not able to change anything.

53d06ce89825a3aedae9138c4e3ba67f0cae7494_2_1098x1000

Two cover devices

The System generates two cover entities. One has the blind icon the other one the garage door icon. The blind icon shows open, the garage door shows closed (that is physically correct.

I think one should be for the blind mode and the other one for the shutter mode including the tilt position of the lamellas

Blind icon

Wrong state.

Bildschirmfoto 2024-04-12 um 21 26 16

Garage Door Icon

Correct state

Bildschirmfoto 2024-04-12 um 21 26 25

Switch: Inverte Mode

In the UI there are also two switches. If I switch it on it automatically goes back to off. I am not sure if that is the right behavior.

Device Temperature

The device temperature seems also not to be correct.

Bildschirmfoto 2024-04-12 um 21 31 30

Thanks for your advise

Solution description

It would be great if I can see the state of an set attribute and if I can change the attribute using the UI of Home Assistant. A drop-down list with be ideal

It would be good to select the device mode mode (blind/ shutter (lamellas))

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=4880, 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=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": "0x0202", "input_clusters": [ "0x0000", "0x0002", "0x0003", "0x0004", "0x0005", "0x0009", "0x0102", "0xfd01", "0xfd03" ], "output_clusters": [ "0x000a", "0x0019" ] }, "2": { "profile_id": "0x0104", "device_type": "0x0202", "input_clusters": [ "0x0000", "0x0003", "0x0004", "0x0005", "0x0102" ], "output_clusters": [] }, "3": { "profile_id": "0x0104", "device_type": "0x0203", "input_clusters": [ "0x0000", "0x0003" ], "output_clusters": [ "0x0003", "0x0004", "0x0005", "0x0102" ] }, "4": { "profile_id": "0x0104", "device_type": "0x0830", "input_clusters": [ "0x0000", "0x0003", "0x1000", "0xfd00" ], "output_clusters": [ "0x0003", "0x0004", "0x0005", "0x0006", "0x0008", "0x1000" ] }, "5": { "profile_id": "0x0104", "device_type": "0x0830", "input_clusters": [ "0x0000", "0x0003", "0xfd00" ], "output_clusters": [ "0x0003", "0x0004", "0x0005", "0x0006", "0x0008" ] }, "242": { "profile_id": "0xa1e0", "device_type": "0x0061", "input_clusters": [], "output_clusters": [ "0x0021" ] } }, "manufacturer": "AEOTEC", "model": "ZGA004", "class": "zigpy.device.Device" } ```

Diagnostic information

Diagnostic information ```json { "home_assistant": { "installation_type": "Home Assistant OS", "version": "2024.2.2", "dev": false, "hassio": true, "virtualenv": false, "python_version": "3.12.1", "docker": true, "arch": "x86_64", "timezone": "Europe/Berlin", "os_name": "Linux", "os_version": "6.1.74-haos", "supervisor": "2024.04.0", "host_os": "Home Assistant OS 11.5", "docker_version": "24.0.7", "chassis": "vm", "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.0", "pyserial==3.5", "pyserial-asyncio==0.6", "zha-quirks==0.0.111", "zigpy-deconz==0.23.0", "zigpy==0.62.3", "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": "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": 29747, "manufacturer": "AEOTEC", "model": "ZGA004", "name": "AEOTEC ZGA004", "quirk_applied": false, "quirk_class": "zigpy.device.Device", "quirk_id": null, "manufacturer_code": 4880, "power_source": "Mains", "lqi": 164, "rssi": -59, "last_seen": "2024-04-12T21:21:54", "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=4880, 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=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": "0x0202", "input_clusters": [ "0x0000", "0x0002", "0x0003", "0x0004", "0x0005", "0x0009", "0x0102", "0xfd01", "0xfd03" ], "output_clusters": [ "0x000a", "0x0019" ] }, "2": { "profile_id": "0x0104", "device_type": "0x0202", "input_clusters": [ "0x0000", "0x0003", "0x0004", "0x0005", "0x0102" ], "output_clusters": [] }, "3": { "profile_id": "0x0104", "device_type": "0x0203", "input_clusters": [ "0x0000", "0x0003" ], "output_clusters": [ "0x0003", "0x0004", "0x0005", "0x0102" ] }, "4": { "profile_id": "0x0104", "device_type": "0x0830", "input_clusters": [ "0x0000", "0x0003", "0x1000", "0xfd00" ], "output_clusters": [ "0x0003", "0x0004", "0x0005", "0x0006", "0x0008", "0x1000" ] }, "5": { "profile_id": "0x0104", "device_type": "0x0830", "input_clusters": [ "0x0000", "0x0003", "0xfd00" ], "output_clusters": [ "0x0003", "0x0004", "0x0005", "0x0006", "0x0008" ] }, "242": { "profile_id": "0xa1e0", "device_type": "0x0061", "input_clusters": [], "output_clusters": [ "0x0021" ] } }, "manufacturer": "AEOTEC", "model": "ZGA004" }, "active_coordinator": false, "entities": [ { "entity_id": "button.aeotec_zga004_identifizieren", "name": "AEOTEC ZGA004" }, { "entity_id": "cover.aeotec_zga004_abdeckung", "name": "AEOTEC ZGA004" }, { "entity_id": "cover.aeotec_zga004_abdeckung_2", "name": "AEOTEC ZGA004" }, { "entity_id": "sensor.aeotec_zga004_geratetemperatur", "name": "AEOTEC ZGA004" }, { "entity_id": "sensor.aeotec_zga004_art_der_fensterabdeckung", "name": "AEOTEC ZGA004" }, { "entity_id": "sensor.aeotec_zga004_art_der_fensterabdeckung_2", "name": "AEOTEC ZGA004" }, { "entity_id": "switch.aeotec_zga004_invertiert", "name": "AEOTEC ZGA004" }, { "entity_id": "switch.aeotec_zga004_invertiert_2", "name": "AEOTEC ZGA004" }, { "entity_id": "update.aeotec_zga004_firmware", "name": "AEOTEC ZGA004" } ], "neighbors": [ { "device_type": "Coordinator", "rx_on_when_idle": "On", "relationship": "Parent", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x0000", "permit_joining": "Unknown", "depth": "0", "lqi": "96" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x3F37", "permit_joining": "Unknown", "depth": "15", "lqi": "157" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x67B1", "permit_joining": "Unknown", "depth": "15", "lqi": "53" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x79B9", "permit_joining": "Unknown", "depth": "15", "lqi": "83" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x993D", "permit_joining": "Unknown", "depth": "15", "lqi": "101" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0xB176", "permit_joining": "Unknown", "depth": "15", "lqi": "255" } ], "routes": [ { "dest_nwk": "0x0000", "route_status": "Active", "memory_constrained": false, "many_to_one": false, "route_record_required": false, "next_hop": "0x0000" }, { "dest_nwk": "0xB176", "route_status": "Active", "memory_constrained": false, "many_to_one": false, "route_record_required": false, "next_hop": "0xB176" }, { "dest_nwk": "0x67B1", "route_status": "Active", "memory_constrained": false, "many_to_one": false, "route_record_required": false, "next_hop": "0x67B1" } ], "endpoint_names": [ { "name": "WINDOW_COVERING_DEVICE" }, { "name": "WINDOW_COVERING_DEVICE" }, { "name": "WINDOW_COVERING_CONTROLLER" }, { "name": "NON_COLOR_SCENE_CONTROLLER" }, { "name": "NON_COLOR_SCENE_CONTROLLER" }, { "name": "PROXY_BASIC" } ], "user_given_name": "Rolladen GL Rechts", "device_reg_id": "78ea8414249f01f8ea7f80dd04736e4f", "area_id": "dieselstrasse_35_vh_eg_01", "cluster_details": { "1": { "device_type": { "name": "WINDOW_COVERING_DEVICE", "id": 514 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": { "0x0004": { "attribute_name": "manufacturer", "value": "AEOTEC" }, "0x0005": { "attribute_name": "model", "value": "ZGA004" } }, "unsupported_attributes": {} }, "0x0002": { "endpoint_attribute": "device_temperature", "attributes": { "0x0000": { "attribute_name": "current_temperature", "value": 41 } }, "unsupported_attributes": {} }, "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0x0004": { "endpoint_attribute": "groups", "attributes": {}, "unsupported_attributes": {} }, "0x0005": { "endpoint_attribute": "scenes", "attributes": {}, "unsupported_attributes": {} }, "0x0009": { "endpoint_attribute": "alarms", "attributes": {}, "unsupported_attributes": {} }, "0x0102": { "endpoint_attribute": "window_covering", "attributes": { "0x0007": { "attribute_name": "config_status", "value": 10 }, "0x0008": { "attribute_name": "current_position_lift_percentage", "value": 100 }, "0x0009": { "attribute_name": "current_position_tilt_percentage", "value": 255 }, "0x0011": { "attribute_name": "installed_closed_limit_lift", "value": 6000 }, "0x0013": { "attribute_name": "installed_closed_limit_tilt", "value": 300 }, "0x0010": { "attribute_name": "installed_open_limit_lift", "value": 0 }, "0x0012": { "attribute_name": "installed_open_limit_tilt", "value": 0 }, "0x0017": { "attribute_name": "window_covering_mode", "value": 8 }, "0x0000": { "attribute_name": "window_covering_type", "value": 0 } }, "unsupported_attributes": {} }, "0xfd01": { "endpoint_attribute": "manufacturer_specific", "attributes": {}, "unsupported_attributes": {} }, "0xfd03": { "endpoint_attribute": "manufacturer_specific", "attributes": {}, "unsupported_attributes": {} } }, "out_clusters": { "0x000a": { "endpoint_attribute": "time", "attributes": {}, "unsupported_attributes": {} }, "0x0019": { "endpoint_attribute": "ota", "attributes": {}, "unsupported_attributes": { "0x0002": { "attribute_name": "current_file_version" } } } } }, "2": { "device_type": { "name": "WINDOW_COVERING_DEVICE", "id": 514 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": {}, "unsupported_attributes": {} }, "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0x0004": { "endpoint_attribute": "groups", "attributes": {}, "unsupported_attributes": {} }, "0x0005": { "endpoint_attribute": "scenes", "attributes": {}, "unsupported_attributes": {} }, "0x0102": { "endpoint_attribute": "window_covering", "attributes": { "0x0007": { "attribute_name": "config_status", "value": 10 }, "0x0008": { "attribute_name": "current_position_lift_percentage", "value": 100 }, "0x0009": { "attribute_name": "current_position_tilt_percentage", "value": 100 }, "0x0011": { "attribute_name": "installed_closed_limit_lift", "value": 6000 }, "0x0013": { "attribute_name": "installed_closed_limit_tilt", "value": 300 }, "0x0010": { "attribute_name": "installed_open_limit_lift", "value": 0 }, "0x0012": { "attribute_name": "installed_open_limit_tilt", "value": 0 }, "0x0017": { "attribute_name": "window_covering_mode", "value": 8 }, "0x0000": { "attribute_name": "window_covering_type", "value": 6 } }, "unsupported_attributes": {} } }, "out_clusters": {} }, "3": { "device_type": { "name": "WINDOW_COVERING_CONTROLLER", "id": 515 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": {}, "unsupported_attributes": {} }, "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} } }, "out_clusters": { "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0x0004": { "endpoint_attribute": "groups", "attributes": {}, "unsupported_attributes": {} }, "0x0005": { "endpoint_attribute": "scenes", "attributes": {}, "unsupported_attributes": {} }, "0x0102": { "endpoint_attribute": "window_covering", "attributes": {}, "unsupported_attributes": {} } } }, "4": { "device_type": { "name": "NON_COLOR_SCENE_CONTROLLER", "id": 2096 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": {}, "unsupported_attributes": {} }, "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0x1000": { "endpoint_attribute": "lightlink", "attributes": {}, "unsupported_attributes": {} }, "0xfd00": { "endpoint_attribute": "manufacturer_specific", "attributes": {}, "unsupported_attributes": {} } }, "out_clusters": { "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": {}, "unsupported_attributes": {} }, "0x0008": { "endpoint_attribute": "level", "attributes": {}, "unsupported_attributes": {} }, "0x1000": { "endpoint_attribute": "lightlink", "attributes": {}, "unsupported_attributes": {} } } }, "5": { "device_type": { "name": "NON_COLOR_SCENE_CONTROLLER", "id": 2096 }, "profile_id": 260, "in_clusters": { "0x0000": { "endpoint_attribute": "basic", "attributes": {}, "unsupported_attributes": {} }, "0x0003": { "endpoint_attribute": "identify", "attributes": {}, "unsupported_attributes": {} }, "0xfd00": { "endpoint_attribute": "manufacturer_specific", "attributes": {}, "unsupported_attributes": {} } }, "out_clusters": { "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": {}, "unsupported_attributes": {} }, "0x0008": { "endpoint_attribute": "level", "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

terba commented 1 month ago

I have a Picu Duo (two relay switch), everything works but the device temperature is off as above.