zha-device-handlers: [BUG] quirk (that removes level control) not loaded for all Tradfi plugs
Bug description
I have 3, IKEA tradfri plug outlets (relais on off). To my knowledge they are identical and have the same firmware. I added them to ZHA long before there existed a quirk. Since the quirk was added to ZHA last year, only one of the plugs adopter the quirk (nicely not exposing level control anymore). But the other two plugs still run without the quirk. Do I have to do something?
Steps to reproduce
N/A
Expected behavior
I would expect the quirk loads for all, unless there is a device signature difference, that is not yet incorporated by the quirk
Screenshots/Video
Screenshots/Video
[Paste/upload your media here]
Device signature
Device signature of plug without quirk
{
"node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.FullFunctionDevice|MainsPowered|RxOnWhenIdle|AllocateAddress: 142>, manufacturer_code=4476, maximum_buffer_size=82, maximum_incoming_transfer_size=82, server_mask=11264, maximum_outgoing_transfer_size=82, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *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",
"0x0008",
"0x1000",
"0xfc7c"
],
"output_clusters": [
"0x0005",
"0x0019",
"0x0020",
"0x1000"
]
},
"242": {
"profile_id": "0xa1e0",
"device_type": "0x0061",
"input_clusters": [
"0x0021"
],
"output_clusters": [
"0x0021"
]
}
},
"manufacturer": "IKEA of Sweden",
"model": "TRADFRI control outlet",
"class": "zigpy.device.Device"
}
Diagnostic information
Diagnostic information of plug without quirk
{
"home_assistant": {
"installation_type": "Home Assistant OS",
"version": "2024.2.1",
"dev": false,
"hassio": true,
"virtualenv": false,
"python_version": "3.12.1",
"docker": true,
"arch": "aarch64",
"timezone": "Europe/Amsterdam",
"os_name": "Linux",
"os_version": "6.1.21-v8",
"supervisor": "2024.01.1",
"host_os": "Home Assistant OS 11.1",
"docker_version": "24.0.6",
"chassis": "embedded",
"run_as_root": true
},
'** cut some non relevant stuff **'
"zha_toolkit": {
"version": "v1.1.8",
"requirements": [
"pytz"
]
}
},
"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": 18893,
"manufacturer": "IKEA of Sweden",
"model": "TRADFRI control outlet",
"name": "IKEA of Sweden TRADFRI control outlet",
"quirk_applied": false,
"quirk_class": "zigpy.device.Device",
"quirk_id": null,
"manufacturer_code": 4476,
"power_source": "Mains",
"lqi": 255,
"rssi": -73,
"last_seen": "2024-02-10T13:13:55",
"available": true,
"device_type": "Router",
"signature": {
"node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.FullFunctionDevice|MainsPowered|RxOnWhenIdle|AllocateAddress: 142>, manufacturer_code=4476, maximum_buffer_size=82, maximum_incoming_transfer_size=82, server_mask=11264, maximum_outgoing_transfer_size=82, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *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",
"0x0008",
"0x1000",
"0xfc7c"
],
"output_clusters": [
"0x0005",
"0x0019",
"0x0020",
"0x1000"
]
},
"242": {
"profile_id": "0xa1e0",
"device_type": "0x0061",
"input_clusters": [
"0x0021"
],
"output_clusters": [
"0x0021"
]
}
},
"manufacturer": "IKEA of Sweden",
"model": "TRADFRI control outlet"
},
"active_coordinator": false,
"entities": [
{
"entity_id": "button.ikea_of_sweden_tradfri_control_outlet_c44e05fe_identify",
"name": "IKEA of Sweden TRADFRI control outlet"
},
{
"entity_id": "number.ikea_of_sweden_tradfri_control_outlet_c44e05fe_level_on_off_transition_time",
"name": "IKEA of Sweden TRADFRI control outlet"
},
{
"entity_id": "number.ikea_of_sweden_tradfri_control_outlet_c44e05fe_level_on_level",
"name": "IKEA of Sweden TRADFRI control outlet"
},
{
"entity_id": "number.ikea_of_sweden_tradfri_control_outlet_c44e05fe_level_start_up_current_level",
"name": "IKEA of Sweden TRADFRI control outlet"
},
{
"entity_id": "select.ikea_of_sweden_tradfri_control_outlet_c44e05fe_on_off_startuponoff",
"name": "IKEA of Sweden TRADFRI control outlet"
},
{
"entity_id": "switch.ikea_of_sweden_tradfri_control_outlet_c44e05fe_on_off",
"name": "IKEA of Sweden TRADFRI control outlet"
},
{
"entity_id": "update.aquarium_firmware_2",
"name": "IKEA of Sweden TRADFRI control outlet"
}
],
"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": "115"
},
{
"device_type": "Router",
"rx_on_when_idle": "On",
"relationship": "Sibling",
"extended_pan_id": "**REDACTED**",
"ieee": "**REDACTED**",
"nwk": "0x028F",
"permit_joining": "Unknown",
"depth": "15",
"lqi": "74"
},
{
"device_type": "Router",
"rx_on_when_idle": "On",
"relationship": "Sibling",
"extended_pan_id": "**REDACTED**",
"ieee": "**REDACTED**",
"nwk": "0x047F",
"permit_joining": "Unknown",
"depth": "15",
"lqi": "86"
},
{
"device_type": "Router",
"rx_on_when_idle": "On",
"relationship": "Sibling",
"extended_pan_id": "**REDACTED**",
"ieee": "**REDACTED**",
"nwk": "0x1353",
"permit_joining": "Unknown",
"depth": "15",
"lqi": "55"
},
{
"device_type": "Router",
"rx_on_when_idle": "On",
"relationship": "Sibling",
"extended_pan_id": "**REDACTED**",
"ieee": "**REDACTED**",
"nwk": "0x26B7",
"permit_joining": "Unknown",
"depth": "15",
"lqi": "85"
},
{
"device_type": "Router",
"rx_on_when_idle": "On",
"relationship": "Sibling",
"extended_pan_id": "**REDACTED**",
"ieee": "**REDACTED**",
"nwk": "0x39A8",
"permit_joining": "Unknown",
"depth": "15",
"lqi": "78"
},
{
"device_type": "Router",
"rx_on_when_idle": "On",
"relationship": "Sibling",
"extended_pan_id": "**REDACTED**",
"ieee": "**REDACTED**",
"nwk": "0x4499",
"permit_joining": "Unknown",
"depth": "15",
"lqi": "109"
},
{
"device_type": "Router",
"rx_on_when_idle": "On",
"relationship": "Sibling",
"extended_pan_id": "**REDACTED**",
"ieee": "**REDACTED**",
"nwk": "0x58B7",
"permit_joining": "Unknown",
"depth": "15",
"lqi": "34"
},
{
"device_type": "Router",
"rx_on_when_idle": "On",
"relationship": "Sibling",
"extended_pan_id": "**REDACTED**",
"ieee": "**REDACTED**",
"nwk": "0x890D",
"permit_joining": "Unknown",
"depth": "15",
"lqi": "91"
},
{
"device_type": "Router",
"rx_on_when_idle": "On",
"relationship": "Sibling",
"extended_pan_id": "**REDACTED**",
"ieee": "**REDACTED**",
"nwk": "0x8C41",
"permit_joining": "Unknown",
"depth": "15",
"lqi": "43"
},
{
"device_type": "Router",
"rx_on_when_idle": "On",
"relationship": "Sibling",
"extended_pan_id": "**REDACTED**",
"ieee": "**REDACTED**",
"nwk": "0xA56F",
"permit_joining": "Unknown",
"depth": "15",
"lqi": "75"
},
{
"device_type": "Router",
"rx_on_when_idle": "On",
"relationship": "Sibling",
"extended_pan_id": "**REDACTED**",
"ieee": "**REDACTED**",
"nwk": "0xA911",
"permit_joining": "Unknown",
"depth": "15",
"lqi": "35"
},
{
"device_type": "Router",
"rx_on_when_idle": "On",
"relationship": "Sibling",
"extended_pan_id": "**REDACTED**",
"ieee": "**REDACTED**",
"nwk": "0xB663",
"permit_joining": "Unknown",
"depth": "15",
"lqi": "100"
},
{
"device_type": "Router",
"rx_on_when_idle": "On",
"relationship": "Sibling",
"extended_pan_id": "**REDACTED**",
"ieee": "**REDACTED**",
"nwk": "0xD785",
"permit_joining": "Unknown",
"depth": "15",
"lqi": "49"
}
],
"routes": [
{
"dest_nwk": "0x0000",
"route_status": "Active",
"memory_constrained": false,
"many_to_one": true,
"route_record_required": false,
"next_hop": "0x0000"
},
{
"dest_nwk": "0xA81B",
"route_status": "Active",
"memory_constrained": false,
"many_to_one": false,
"route_record_required": false,
"next_hop": "0xA56F"
},
{
"dest_nwk": "0x58B7",
"route_status": "Active",
"memory_constrained": false,
"many_to_one": false,
"route_record_required": false,
"next_hop": "0x890D"
},
{
"dest_nwk": "0x26B7",
"route_status": "Active",
"memory_constrained": false,
"many_to_one": false,
"route_record_required": false,
"next_hop": "0x0000"
},
{
"dest_nwk": "0x39A8",
"route_status": "Active",
"memory_constrained": false,
"many_to_one": false,
"route_record_required": false,
"next_hop": "0x39A8"
},
{
"dest_nwk": "0xB663",
"route_status": "Active",
"memory_constrained": false,
"many_to_one": false,
"route_record_required": false,
"next_hop": "0xB663"
},
{
"dest_nwk": "0xA56F",
"route_status": "Active",
"memory_constrained": false,
"many_to_one": false,
"route_record_required": false,
"next_hop": "0xA56F"
}
],
"endpoint_names": [
{
"name": "ON_OFF_PLUG_IN_UNIT"
},
{
"name": "PROXY_BASIC"
}
],
"user_given_name": "Aquarium",
"device_reg_id": "ede3816efa87826f51d03958fc0d810c",
"area_id": "automatisch",
"cluster_details": {
"1": {
"device_type": {
"name": "ON_OFF_PLUG_IN_UNIT",
"id": 266
},
"profile_id": 260,
"in_clusters": {
"0x0000": {
"endpoint_attribute": "basic",
"attributes": {
"0x0004": {
"attribute_name": "manufacturer",
"value": "IKEA of Sweden"
},
"0x0005": {
"attribute_name": "model",
"value": "TRADFRI control outlet"
}
},
"unsupported_attributes": {}
},
"0x0003": {
"endpoint_attribute": "identify",
"attributes": {},
"unsupported_attributes": {}
},
"0x0004": {
"endpoint_attribute": "groups",
"attributes": {},
"unsupported_attributes": {}
},
"0x0005": {
"endpoint_attribute": "scenes",
"attributes": {
"0x0001": {
"attribute_name": "current_scene",
"value": 0
}
},
"unsupported_attributes": {}
},
"0x0006": {
"endpoint_attribute": "on_off",
"attributes": {
"0x0000": {
"attribute_name": "on_off",
"value": 1
},
"0x4003": {
"attribute_name": "start_up_on_off",
"value": 255
}
},
"unsupported_attributes": {}
},
"0x0008": {
"endpoint_attribute": "level",
"attributes": {
"0x0000": {
"attribute_name": "current_level",
"value": 254
},
"0x0011": {
"attribute_name": "on_level",
"value": 254
},
"0x0010": {
"attribute_name": "on_off_transition_time",
"value": 0
},
"0x4000": {
"attribute_name": "start_up_current_level",
"value": 255
}
},
"unsupported_attributes": {
"0x0014": {
"attribute_name": "default_move_rate"
},
"0x0012": {
"attribute_name": "on_transition_time"
},
"0x0013": {
"attribute_name": "off_transition_time"
}
}
},
"0x1000": {
"endpoint_attribute": "lightlink",
"attributes": {},
"unsupported_attributes": {}
},
"0xfc7c": {
"endpoint_attribute": "manufacturer_specific",
"attributes": {},
"unsupported_attributes": {}
}
},
"out_clusters": {
"0x0005": {
"endpoint_attribute": "scenes",
"attributes": {},
"unsupported_attributes": {}
},
"0x0019": {
"endpoint_attribute": "ota",
"attributes": {
"0x0002": {
"attribute_name": "current_file_version",
"value": 537019939
}
},
"unsupported_attributes": {}
},
"0x0020": {
"endpoint_attribute": "poll_control",
"attributes": {},
"unsupported_attributes": {}
},
"0x1000": {
"endpoint_attribute": "lightlink",
"attributes": {},
"unsupported_attributes": {}
}
}
},
"242": {
"device_type": {
"name": "PROXY_BASIC",
"id": 97
},
"profile_id": 41440,
"in_clusters": {
"0x0021": {
"endpoint_attribute": "green_power",
"attributes": {},
"unsupported_attributes": {}
}
},
"out_clusters": {
"0x0021": {
"endpoint_attribute": "green_power",
"attributes": {},
"unsupported_attributes": {}
}
}
}
}
}
}
Logs
Logs
[Paste the logs here]
Additional information
No response
About this issue
- Original URL
- State: open
- Created 5 months ago
- Comments: 18 (7 by maintainers)
Just as a note, this original issue is still present. We just need to also add a quirk for that signature (which can be generated using quirk-generator btw) or wait for “quirks v2” that can replace multiple quirks for slightly different signatures.