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
687 stars 637 forks source link

[BUG] quirk (that removes level control) not loaded for all Tradfi plugs #2973

Closed erkr closed 3 weeks ago

erkr commented 5 months ago

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 ```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=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 ```json { "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=, 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=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 ```python [Paste the logs here] ```

Additional information

No response

MattWestb commented 5 months ago

With current production firmware and new added they is using version 2 of the quirk. If being added with one older firmware is using version 1 or no quirk (i have one on current firmware and have being in the system for many years it was ZLL firmware and its not using any quirk). If you like getting then quirked delete the device and wait one minute / restart HA and adding it new and it shall loading the V2 if being on current production firmware (endpoints is only read then adding devices new in the database and what the quirk is using for matching).

erkr commented 5 months ago

@MattWestb thanks for you answer. I probably re-added the plug that is loading with the quirk for some reason. Can't recall that. Really pity that re-adding is the only way. It could mess-up the mesh as they act as routers for more remote end points.

MattWestb commented 5 months ago

I dont reparing then some end device (Aqara) is leaving the network if its parent is not online and its more important updating the firmware of the outlet then its some bad bugs in the old firmware that can killing the network. Its shall being possible patching zigbee.db so its looks like the other outlets but its not recommended and not documented and the endpoints is only added then new paring so its little tricky to do it OK. I recommending let tit if you can living with it and not getting other problems.

PS: I have IKEA Outlets as backbone in my Zigbee network and they is working good as long no device is rejoining the network to oft (parent accouterments bug in the Zigbee stack on old firmware) is also Aqara sensors is online for 3 years and only changing battery in them then needed.

MattWestb commented 5 months ago

The endpoints and cluster for the with quirk and without and you see that some cluster is not the same but the "key" ones (On/Off) its the same so its working OK. Both is on Firmware: 0x23089631 = current production version.

{
  "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",
        "0x1000"
      ],
      "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": "plug.TradfriPlug2"
}

{
  "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": [
        "0x0019",
        "0x0020",
        "0x1000"
      ]
    },
    "242": {
      "profile_id": "0xa1e0",
      "device_type": "0x0061",
      "input_clusters": [],
      "output_clusters": [
        "0x0021"
      ]
    }
  },
  "manufacturer": "IKEA of Sweden",
  "model": "TRADFRI control outlet",
  "class": "zigpy.device.Device"
}

PS the quirk is changing the clusters for the report so must looking in the quirk for getting the real clusters.

erkr commented 5 months ago

@MattWestb I will live with the level control (just hided them) to save me the trouble☺️ Mine are all version 0x20024623, according ZHA up te date, but that can't be true. Thanks for your help!

MattWestb commented 5 months ago

Then you is having some strange settings in HA then its one old version. Be sure not using the old very outdated test feed. My config looks like this:

    ota:
      allow_file_providers: True
      otau_directory: /config/zigpy_ota
      ikea_provider: true
#      ikea_update_url: http://fw.test.ota.homesmart.ikea.net/feed/version_info.json

The last line is deactivated then its was the test feed and if you have it put one # or deleting the line and restart HA.

erkr commented 5 months ago

I have ikea_provider false as I don't want to auto update my symfonisk devices. Do you know if updates are manual now (according the ZHA documentation, this setting still enables auto updates for all ikea devices) (Raises this question in the community: https://community.home-assistant.io/t/zha-device-firmware-update/688305)

MattWestb commented 5 months ago

You can downloading the OTA file for your device you like updating and having the IKEA OTA disables then it shall only looking for local files and updating. I dont knowing if the new GUI is disabling the auto update i have not testing it then all my devices is on latest version. One PM: All IKEA controllers is blocked from firmware downgrade so id like going back is needing one SWD probe (J-Tag probe) and flashing one extracted OTA file on the chip. All Routing device looks being not locked and can doing downgrading without problem only need parching ZHA for doing it (have doing some lights but i think the outlet is the same).

erkr commented 5 months ago

Thanks for the advice. I only plan to update my IKEA plus, as I have my some Aqara sensors that are routed via them. These sensors are dropping off the network once in a while

erkr commented 5 months ago

But to come back on to the original issue: As a user I expect that when a quirk becomes available, it activates without the need to re-add the device. I tried reconfigure in ZHA (and misc_initialise in the toolkit), without success. In the mean time I will try to update the firmware

erkr commented 5 months ago

@MattWestb Sorry to bother again. I download the new firmware file for the IKEA Plug in the otau directory, and enabled the option in the configuration. It's not picked up by ZHA. My config:


zha:
  zigpy_config:
    ota:
#      ikea_provider: true
#      ledvance_provider: true 
      otau_directory: /config/zigpy_ota/
  enable_quirks: true
  custom_quirks_path: /config/custom_quirks/

I wonder what the option allow_file_providers: does? It's not documented in ZHA. Same holds for ikea_update_url:.

Ps: the custom quirk part of the configuration works

MattWestb commented 5 months ago

I was punting it in then the devs have blocking IKEA OTA but i dont knowing if its needed or not. The PR is here for adding the option i have not seen any documentation https://github.com/zigpy/zigpy/pull/1337 Must restarting HA after doing the changes for it start being used. The ikea_update_url: was made for IKEA test feed that was putting out beta firmware but some was bad and braking some controller and IKEA was putting in very old firmware in it and have not updating it over 3 years now. ZHA is now using Dirigeras OTA feed that looks being the best then having more devices updated then the standard one for TF. Some information if you like reading little https://github.com/zigpy/zigpy/discussions/660

You is normally the loading in the (Z)HA log or put little debug loging and its writing all and look on the wiki for the options https://github.com/zigpy/zigpy/wiki/OTA-Device-Firmware-Updates

dmulcahey commented 5 months ago

I was punting it in then the devs have blocking IKEA OTA but i dont knowing if its needed or not. The PR is here for adding the option i have not seen any documentation zigpy/zigpy#1337 Must restarting HA after doing the changes for it start being used. The ikea_update_url: was made for IKEA test feed that was putting out beta firmware but some was bad and braking some controller and IKEA was putting in very old firmware in it and have not updating it over 3 years now. ZHA is now using Dirigeras OTA feed that looks being the best then having more devices updated then the standard one for TF. Some information if you like reading little zigpy/zigpy#660

You is normally the loading in the (Z)HA log or put little debug loging and its writing all and look on the wiki for the options https://github.com/zigpy/zigpy/wiki/OTA-Device-Firmware-Updates

We have it disabled by default because some devices can still be changed in ways users may not want. Like losing group binding. We had an issue w/ battery% too but that has since been fixed. We may enable this one by default in the next release. We’ll see…

MattWestb commented 5 months ago

IKEA is not so bad now (the test feed was braking controllers but its long time ago) but the Z2M OTA files have some tuya and Aqara braking firmware (not implanted image number for the correct firmware) and some (TRVs) was very bad for the users.

erkr commented 5 months ago

@MattWestb Thanks for the pointers, I'm not in a hurry to update the firmware, so I just wait until updating specific devices is settled.

@dmulcahey thanks for the great work. One question though; What happens now when we enable the OTA providers? Will it still enable auto update (as documented), OR provide manual control to either update a device or skip the updates?

TheJulianJES commented 4 months ago

What happens now when we enable the OTA providers? Will it still enable auto update (as documented)

No, there are no more "auto-updates". All updates will be shown in the UI and have to be started that way. ("Check for updates" button on the HA settings page has every device check in to see if an update is required)

OR provide manual control to either update a device or skip the updates?

Yes. Although there currently seems to be an issue where skipped update sometimes re-appear (seen with IKEA remotes in my case). If that happens to you, you can just skip them again for now. Still on my list to track that down.

TheJulianJES commented 4 months ago

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.

erkr commented 4 months ago

@TheJulianJES Any indication when quirk v2 is in the release? I don't have a burning issue with these plugs, so I prefer to wait. Best Eric

erkr commented 3 weeks ago

Today I noticed the 3 ikea plugs where running on a new v2 quirk (zigpy.quirks.v2.CustomDeviceV2) that don't expose dimming entities anymore for these on/off plugs 🥳