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
773 stars 703 forks source link

[BUG] innr SP240 updates energy usage irregularly (power usage OK) #3243

Open tvwerkhoven opened 4 months ago

tvwerkhoven commented 4 months ago

Bug description

After using the innr SP240 plugs for a while, I notice the energy update (i.e. in kWh) is very irregular (e.g. sometimes only once a day at random times), while the power update (i.e. in kW) works almost real time (updates multiple times per minute). This is a bit annoying to diagnose energy consumption in my house. See screenshots for clarification of the problem.

N.B. I already found and solved this issue https://github.com/zigpy/zha-device-handlers/issues/2781 before running into this problem.

Steps to reproduce

  1. Connect innr sp240
  2. Read power/energy data
  3. Get power data real time, energy data sporadically ~1x/day

Expected behavior

  1. Connect innr sp240
  2. Read power/energy data
  3. Get power & energy data real time

Screenshots/Video

Screenshots/Video Observed behaviour (energy meter updates irregularly): ![Screenshot 2024-07-05 at 11 11 44](https://github.com/zigpy/zha-device-handlers/assets/78742/1bacf617-12fc-4b8f-bbda-3d825387833e) Expected behaviour (other ZHA plug, energy meter updates regularly, in sync with power): ![Screenshot 2024-07-05 at 11 13 46](https://github.com/zigpy/zha-device-handlers/assets/78742/de1edd73-1645-4ea2-bb22-7dfd60e2542a)

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=4454, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, 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", "0x0702", "0x0b04", "0x1000", "0xe001" ], "output_clusters": [ "0x000a", "0x0019" ] }, "242": { "profile_id": "0xa1e0", "device_type": "0x0061", "input_clusters": [], "output_clusters": [ "0x0021" ] } }, "manufacturer": "innr", "model": "SP 240", "class": "zhaquirks.innr.innr_sp240_plug.SP240" }```

Diagnostic information

Diagnostic information ```json [Paste the diagnostic information here] ```

Logs

Logs ```python { "home_assistant": { "installation_type": "Home Assistant Container", "version": "2024.5.4", "dev": false, "hassio": false, "virtualenv": false, "python_version": "3.12.2", "docker": true, "arch": "x86_64", "timezone": "Europe/Amsterdam", "os_name": "Linux", "os_version": "5.15.149-1-pve", "run_as_root": true }, "custom_components": { "powercalc": { "documentation": "https://github.com/bramstroker/homeassistant-powercalc", "version": "v1.12.1", "requirements": [ "numpy>=1.21.1" ] }, "plugwise": { "documentation": "https://github.com/plugwise/plugwise-beta", "version": "0.27.0a3", "requirements": [ "plugwise==0.22.0" ] }, "solaredge_modbus": { "documentation": "https://github.com/binsentsu/home-assistant-solaredge-modbus", "version": "1.4.0", "requirements": [ "pymodbus==3.1.1" ] }, "alfen_wallbox": { "documentation": "https://github.com/leeyuentuen/alfen_wallbox", "version": "0.0.1", "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.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": 60731, "manufacturer": "innr", "model": "SP 240", "name": "innr SP 240", "quirk_applied": true, "quirk_class": "zhaquirks.innr.innr_sp240_plug.SP240", "quirk_id": null, "manufacturer_code": 4454, "power_source": "Mains", "lqi": 95, "rssi": -82, "last_seen": "2024-07-05T11:17:41", "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=4454, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, 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", "0x0702", "0x0b04", "0x1000", "0xe001" ], "output_clusters": [ "0x000a", "0x0019" ] }, "242": { "profile_id": "0xa1e0", "device_type": "0x0061", "input_clusters": [], "output_clusters": [ "0x0021" ] } }, "manufacturer": "innr", "model": "SP 240" }, "active_coordinator": false, "entities": [ { "entity_id": "button.innr_sp_240_identify", "name": "innr SP 240" }, { "entity_id": "select.innr_sp_240_start_up_behavior", "name": "innr SP 240" }, { "entity_id": "sensor.innr_sp_240_rms_current", "name": "innr SP 240" }, { "entity_id": "sensor.innr_sp_240_rms_voltage", "name": "innr SP 240" }, { "entity_id": "sensor.innr_sp_240_active_power", "name": "innr SP 240" }, { "entity_id": "sensor.innr_sp_240_summation_delivered", "name": "innr SP 240" }, { "entity_id": "switch.innr_sp_240_switch", "name": "innr SP 240" }, { "entity_id": "update.triplesolar_firmware", "name": "innr SP 240" } ], "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": "0" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x36D5", "permit_joining": "Unknown", "depth": "1", "lqi": "192" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0xE257", "permit_joining": "Unknown", "depth": "3", "lqi": "175" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x0E27", "permit_joining": "Unknown", "depth": "0", "lqi": "123" }, { "device_type": "Router", "rx_on_when_idle": "On", "relationship": "Sibling", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x9604", "permit_joining": "Unknown", "depth": "4", "lqi": "51" }, { "device_type": "EndDevice", "rx_on_when_idle": "Off", "relationship": "Child", "extended_pan_id": "**REDACTED**", "ieee": "**REDACTED**", "nwk": "0x4014", "permit_joining": "Unknown", "depth": "2", "lqi": "85" } ], "routes": [], "endpoint_names": [ { "name": "ON_OFF_PLUG_IN_UNIT" }, { "name": "PROXY_BASIC" } ], "user_given_name": "triplesolar", "device_reg_id": "3d3455b7c5bb8a2d93d5be245e9734ed", "area_id": "storage", "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": "innr" }, "0x0005": { "attribute_name": "model", "value": "SP 240" } }, "unsupported_attributes": {} }, "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": { "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": 1 } }, "unsupported_attributes": { "0x0011": { "attribute_name": "on_level" }, "0x0013": { "attribute_name": "off_transition_time" }, "0x4000": { "attribute_name": "start_up_current_level" }, "0x0012": { "attribute_name": "on_transition_time" }, "0x0014": { "attribute_name": "default_move_rate" }, "0x0010": { "attribute_name": "on_off_transition_time" } } }, "0x0702": { "endpoint_attribute": "smartenergy_metering", "attributes": { "0x0000": { "attribute_name": "current_summ_delivered", "value": 2744 }, "0x0302": { "attribute_name": "divisor", "value": 100 }, "0x0306": { "attribute_name": "metering_device_type", "value": 0 }, "0x0301": { "attribute_name": "multiplier", "value": 1 }, "0x0200": { "attribute_name": "status", "value": 0 }, "0x0303": { "attribute_name": "summation_formatting", "value": 42 }, "0x0300": { "attribute_name": "unit_of_measure", "value": 0 } }, "unsupported_attributes": { "0x0400": { "attribute_name": "instantaneous_demand" }, "0x0100": { "attribute_name": "current_tier1_summ_delivered" }, "0x0102": { "attribute_name": "current_tier2_summ_delivered" }, "0x0104": { "attribute_name": "current_tier3_summ_delivered" }, "0x0304": { "attribute_name": "demand_formatting" }, "0x0106": { "attribute_name": "current_tier4_summ_delivered" }, "0x0302": { "attribute_name": "divisor" }, "0x0108": { "attribute_name": "current_tier5_summ_delivered" }, "0x0301": { "attribute_name": "multiplier" }, "0x010a": { "attribute_name": "current_tier6_summ_delivered" }, "0x0001": { "attribute_name": "current_summ_received" } } }, "0x0b04": { "endpoint_attribute": "electrical_measurement", "attributes": { "0x0603": { "attribute_name": "ac_current_divisor", "value": 1000 }, "0x0602": { "attribute_name": "ac_current_multiplier", "value": 1 }, "0x0605": { "attribute_name": "ac_power_divisor", "value": 1 }, "0x0604": { "attribute_name": "ac_power_multiplier", "value": 1 }, "0x0601": { "attribute_name": "ac_voltage_divisor", "value": 1 }, "0x0600": { "attribute_name": "ac_voltage_multiplier", "value": 1 }, "0x050b": { "attribute_name": "active_power", "value": 3 }, "0x0000": { "attribute_name": "measurement_type", "value": 3221762439 }, "0x0508": { "attribute_name": "rms_current", "value": 41 }, "0x0505": { "attribute_name": "rms_voltage", "value": 235 } }, "unsupported_attributes": { "0x0300": { "attribute_name": "ac_frequency" }, "0x0401": { "attribute_name": "ac_frequency_divisor" }, "0x0302": { "attribute_name": "ac_frequency_max" }, "0x0400": { "attribute_name": "ac_frequency_multiplier" }, "0x0403": { "attribute_name": "power_divisor" }, "0x0402": { "attribute_name": "power_multiplier" }, "0x0507": { "attribute_name": "rms_voltage_max" }, "0x0510": { "attribute_name": "power_factor" }, "0x050a": { "attribute_name": "rms_current_max" }, "0x050d": { "attribute_name": "active_power_max" }, "0x050f": { "attribute_name": "apparent_power" } } }, "0x1000": { "endpoint_attribute": "lightlink", "attributes": {}, "unsupported_attributes": {} }, "0xe001": { "endpoint_attribute": null, "attributes": {}, "unsupported_attributes": {} } }, "out_clusters": { "0x000a": { "endpoint_attribute": "time", "attributes": {}, "unsupported_attributes": {} }, "0x0019": { "endpoint_attribute": "ota", "attributes": { "0x0002": { "attribute_name": "current_file_version", "value": 335754882 } }, "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": {} } } } } } }```

Additional information

No response

MrBearPresident commented 2 months ago

I had the same problem you have. Then I switched to Z2MQTT over there you have to option set some reporting settings. The standard setting for reporting are to coarse on the energy.

It should also be possible to do this through https://github.com/mdeweerd/zha-toolkit

hhopke commented 2 months ago

Having the same problem. Sometime summation_delivered is not updated for days. Thanks for the tip @MrBearPresident, right now just a bit reluctant to spend a lot of energy into this.

MrBearPresident commented 2 months ago

I've noticed after an firmware upgrade these thing revert back to the same settings. I also had the experience that when you press the fysical button on the device this was not updated in ZHA/Z2MQTT.

This are the setting I changed through Zigbee2MQTT:

Setting OnOff - Minimum reporting change Active Power - Minimum reporting change rmsCurrent - Minimum reporting change cuurentSummDelivered - Minimum reporting change
Original 1 5 50
Corrected 0 0,005 0,005 0,005
Jaapapa commented 1 month ago

I didnt want to migrate to Zigbee2MQTT for this, so i tried settings the same with ZHA-toolkit. Posting here for anyone else with the same idea. I had some trouble installing due to bugs (unrelated to the innr SP240 issues) with the current HA versions but managed to get it working:

Steps:

You can check the values using the following action:

action: zha_toolkit.conf_report_read
data:
  ieee: 11:22:33:44:55:66:77:88
  cluster: 0x0702
  attribute: 0x0000
  event_success: my_read_success_trigger_event
  event_fail: my_read_fail_trigger_event
  event_done: my_read_done_trigger_event

You should substitute your own ieee for your device.