diff --git a/homeassistant/components/zha/core/channels/general.py b/homeassistant/components/zha/core/channels/general.py index ffd5a03fc13d153e386532cda71585f565f586dc..f2afadbd657c818b3cd8b7331ae2b8fa5b3e5e33 100644 --- a/homeassistant/components/zha/core/channels/general.py +++ b/homeassistant/components/zha/core/channels/general.py @@ -19,6 +19,7 @@ from ..const import ( SIGNAL_MOVE_LEVEL, SIGNAL_SET_LEVEL, SIGNAL_STATE_ATTR, + SIGNAL_UPDATE_DEVICE, ) from .base import ClientChannel, ZigbeeChannel, parse_and_log_command @@ -333,11 +334,20 @@ class OnOffConfiguration(ZigbeeChannel): pass +@registries.CLIENT_CHANNELS_REGISTRY.register(general.Ota.cluster_id) @registries.ZIGBEE_CHANNEL_REGISTRY.register(general.Ota.cluster_id) class Ota(ZigbeeChannel): """OTA Channel.""" - pass + @callback + def cluster_command( + self, tsn: int, command_id: int, args: Optional[List[Any]] + ) -> None: + """Handle OTA commands.""" + cmd_name = self.cluster.server_commands.get(command_id, [command_id])[0] + signal_id = self._ch_pool.unique_id.split("-")[0] + if cmd_name == "query_next_image": + self.async_send_signal(SIGNAL_UPDATE_DEVICE.format(signal_id), args[3]) @registries.ZIGBEE_CHANNEL_REGISTRY.register(general.Partition.cluster_id) diff --git a/homeassistant/components/zha/core/const.py b/homeassistant/components/zha/core/const.py index 4b5a5a0c6a1c1cf828dd8121d6d3f011557b61ff..c2813c464e57904a583abd6d1ea8ff74e87d9397 100644 --- a/homeassistant/components/zha/core/const.py +++ b/homeassistant/components/zha/core/const.py @@ -206,6 +206,7 @@ SIGNAL_MOVE_LEVEL = "move_level" SIGNAL_REMOVE = "remove" SIGNAL_SET_LEVEL = "set_level" SIGNAL_STATE_ATTR = "update_state_attribute" +SIGNAL_UPDATE_DEVICE = "{}_zha_update_device" UNKNOWN = "unknown" UNKNOWN_MANUFACTURER = "unk_manufacturer" diff --git a/homeassistant/components/zha/core/device.py b/homeassistant/components/zha/core/device.py index f2544b438824b3182dae5cd32cf59af1b25086ab..47b564f176722f96c090918a6d0a3a626ab6a1d1 100644 --- a/homeassistant/components/zha/core/device.py +++ b/homeassistant/components/zha/core/device.py @@ -54,6 +54,7 @@ from .const import ( POWER_BATTERY_OR_UNKNOWN, POWER_MAINS_POWERED, SIGNAL_AVAILABLE, + SIGNAL_UPDATE_DEVICE, UNKNOWN, UNKNOWN_MANUFACTURER, UNKNOWN_MODEL, @@ -92,8 +93,11 @@ class ZHADevice(LogMixin): self.name, self.ieee, SIGNAL_AVAILABLE ) self._checkins_missed_count = 0 - self._unsub = async_dispatcher_connect( - self.hass, self._available_signal, self.async_initialize + self.unsubs = [] + self.unsubs.append( + async_dispatcher_connect( + self.hass, self._available_signal, self.async_initialize + ) ) self.quirk_applied = isinstance(self._zigpy_device, zigpy.quirks.CustomDevice) self.quirk_class = "{}.{}".format( @@ -105,8 +109,10 @@ class ZHADevice(LogMixin): else: self._consider_unavailable_time = _CONSIDER_UNAVAILABLE_BATTERY keep_alive_interval = random.randint(*_UPDATE_ALIVE_INTERVAL) - self._cancel_available_check = async_track_time_interval( - self.hass, self._check_available, timedelta(seconds=keep_alive_interval) + self.unsubs.append( + async_track_time_interval( + self.hass, self._check_available, timedelta(seconds=keep_alive_interval) + ) ) self._ha_device_id = None self.status = DeviceStatus.CREATED @@ -276,8 +282,24 @@ class ZHADevice(LogMixin): """Create new device.""" zha_dev = cls(hass, zigpy_dev, gateway) zha_dev.channels = channels.Channels.new(zha_dev) + zha_dev.unsubs.append( + async_dispatcher_connect( + hass, + SIGNAL_UPDATE_DEVICE.format(zha_dev.channels.unique_id), + zha_dev.async_update_sw_build_id, + ) + ) return zha_dev + @callback + def async_update_sw_build_id(self, sw_version: int): + """Update device sw version.""" + if self.device_id is None: + return + self._zha_gateway.ha_device_registry.async_update_device( + self.device_id, sw_version=f"0x{sw_version:08x}" + ) + async def _check_available(self, *_): if self.last_seen is None: self.update_available(False) @@ -370,8 +392,8 @@ class ZHADevice(LogMixin): @callback def async_cleanup_handles(self) -> None: """Unsubscribe the dispatchers and timers.""" - self._unsub() - self._cancel_available_check() + for unsubscribe in self.unsubs: + unsubscribe() @callback def async_update_last_seen(self, last_seen): diff --git a/tests/components/zha/test_device.py b/tests/components/zha/test_device.py index edfab1d11d1ed2ba2066654329e438667efbc03d..c92f574825d584083368076ca98cf0da529d11d3 100644 --- a/tests/components/zha/test_device.py +++ b/tests/components/zha/test_device.py @@ -8,9 +8,10 @@ import pytest import zigpy.zcl.clusters.general as general import homeassistant.components.zha.core.device as zha_core_device +import homeassistant.helpers.device_registry as ha_dev_reg import homeassistant.util.dt as dt_util -from .common import async_enable_traffic +from .common import async_enable_traffic, make_zcl_header from tests.common import async_fire_time_changed @@ -63,6 +64,26 @@ def device_without_basic_channel(zigpy_device): return zigpy_device(with_basic_channel=False) +@pytest.fixture +async def ota_zha_device(zha_device_restored, zigpy_device_mock): + """ZHA device with OTA cluster fixture.""" + zigpy_dev = zigpy_device_mock( + { + 1: { + "in_clusters": [general.Basic.cluster_id], + "out_clusters": [general.Ota.cluster_id], + "device_type": 0x1234, + } + }, + "00:11:22:33:44:55:66:77", + "test manufacturer", + "test model", + ) + + zha_device = await zha_device_restored(zigpy_dev) + return zha_device + + def _send_time_changed(hass, seconds): """Send a time changed event.""" now = dt_util.utcnow() + timedelta(seconds=seconds) @@ -190,3 +211,20 @@ async def test_check_available_no_basic_channel( await hass.async_block_till_done() assert zha_device.available is False assert "does not have a mandatory basic cluster" in caplog.text + + +async def test_ota_sw_version(hass, ota_zha_device): + """Test device entry gets sw_version updated via OTA channel.""" + + ota_ch = ota_zha_device.channels.pools[0].client_channels["1:0x0019"] + dev_registry = await ha_dev_reg.async_get_registry(hass) + entry = dev_registry.async_get(ota_zha_device.device_id) + assert entry.sw_version is None + + cluster = ota_ch.cluster + hdr = make_zcl_header(1, global_command=False) + sw_version = 0x2345 + cluster.handle_message(hdr, [1, 2, 3, sw_version, None]) + await hass.async_block_till_done() + entry = dev_registry.async_get(ota_zha_device.device_id) + assert int(entry.sw_version, base=16) == sw_version diff --git a/tests/components/zha/zha_devices_list.py b/tests/components/zha/zha_devices_list.py index b92fc64dee2ca24cbc166ccabd79366c4bdd096d..1d88ba69e8d2cb247b18587d807b388b8af60590 100644 --- a/tests/components/zha/zha_devices_list.py +++ b/tests/components/zha/zha_devices_list.py @@ -53,7 +53,7 @@ DEVICES = [ "entity_id": "binary_sensor.bosch_isw_zpr1_wp13_77665544_ias_zone", }, }, - "event_channels": [], + "event_channels": ["5:0x0019"], "manufacturer": "Bosch", "model": "ISW-ZPR1-WP13", "node_descriptor": b"\x02@\x08\x00\x00l\x00\x00\x00\x00\x00\x00\x00", @@ -77,7 +77,7 @@ DEVICES = [ "entity_id": "sensor.centralite_3130_77665544_power", } }, - "event_channels": ["1:0x0006", "1:0x0008"], + "event_channels": ["1:0x0006", "1:0x0008", "1:0x0019"], "manufacturer": "CentraLite", "model": "3130", "node_descriptor": b"\x02@\x80N\x10RR\x00\x00\x00R\x00\x00", @@ -116,7 +116,7 @@ DEVICES = [ "entity_id": "sensor.centralite_3210_l_77665544_electrical_measurement", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "CentraLite", "model": "3210-L", "node_descriptor": b"\x01@\x8eN\x10RR\x00\x00\x00R\x00\x00", @@ -154,7 +154,7 @@ DEVICES = [ "entity_id": "sensor.centralite_3310_s_77665544_manufacturer_specific", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "CentraLite", "model": "3310-S", "node_descriptor": b"\x02@\x80\xdf\xc2RR\x00\x00\x00R\x00\x00", @@ -200,7 +200,7 @@ DEVICES = [ "entity_id": "binary_sensor.centralite_3315_s_77665544_ias_zone", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "CentraLite", "model": "3315-S", "node_descriptor": b"\x02@\x80\xdf\xc2RR\x00\x00\x00R\x00\x00", @@ -246,7 +246,7 @@ DEVICES = [ "entity_id": "binary_sensor.centralite_3320_l_77665544_ias_zone", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "CentraLite", "model": "3320-L", "node_descriptor": b"\x02@\x80\xdf\xc2RR\x00\x00\x00R\x00\x00", @@ -292,7 +292,7 @@ DEVICES = [ "entity_id": "binary_sensor.centralite_3326_l_77665544_ias_zone", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "CentraLite", "model": "3326-L", "node_descriptor": b"\x02@\x80\xdf\xc2RR\x00\x00\x00R\x00\x00", @@ -344,7 +344,7 @@ DEVICES = [ "entity_id": "binary_sensor.centralite_motion_sensor_a_77665544_occupancy", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "CentraLite", "model": "Motion Sensor-A", "node_descriptor": b"\x02@\x80N\x10RR\x00\x00\x00R\x00\x00", @@ -384,7 +384,7 @@ DEVICES = [ "entity_id": "sensor.climaxtechnology_psmp5_00_00_02_02tc_77665544_smartenergy_metering", }, }, - "event_channels": [], + "event_channels": ["4:0x0019"], "manufacturer": "ClimaxTechnology", "model": "PSMP5_00.00.02.02TC", "node_descriptor": b"\x01@\x8e\x00\x00P\xa0\x00\x00\x00\xa0\x00\x00", @@ -501,7 +501,7 @@ DEVICES = [ "entity_id": "binary_sensor.heiman_smokesensor_em_77665544_ias_zone", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "HEIMAN", "model": "SmokeSensor-EM", "node_descriptor": b"\x02@\x80\x0b\x12RR\x00\x00\x00R\x00\x00", @@ -525,7 +525,7 @@ DEVICES = [ "entity_id": "binary_sensor.heiman_co_v16_77665544_ias_zone", } }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Heiman", "model": "CO_V16", "node_descriptor": b"\x02@\x84\xaa\xbb@\x00\x00\x00\x00\x00\x00\x03", @@ -549,7 +549,7 @@ DEVICES = [ "entity_id": "binary_sensor.heiman_warningdevice_77665544_ias_zone", } }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Heiman", "model": "WarningDevice", "node_descriptor": b"\x01@\x8e\x0b\x12RR\x00\x00\x00R\x00\x00", @@ -593,7 +593,7 @@ DEVICES = [ "entity_id": "binary_sensor.hivehome_com_mot003_77665544_ias_zone", }, }, - "event_channels": [], + "event_channels": ["6:0x0019"], "manufacturer": "HiveHome.com", "model": "MOT003", "node_descriptor": b"\x02@\x809\x10PP\x00\x00\x00P\x00\x00", @@ -627,7 +627,7 @@ DEVICES = [ "entity_id": "light.ikea_of_sweden_tradfri_bulb_e12_ws_opal_600lm_77665544_level_light_color_on_off", } }, - "event_channels": ["1:0x0005"], + "event_channels": ["1:0x0005", "1:0x0019"], "manufacturer": "IKEA of Sweden", "model": "TRADFRI bulb E12 WS opal 600lm", "node_descriptor": b"\x01@\x8e|\x11RR\x00\x00,R\x00\x00", @@ -653,7 +653,7 @@ DEVICES = [ "entity_id": "light.ikea_of_sweden_tradfri_bulb_e26_cws_opal_600lm_77665544_level_light_color_on_off", } }, - "event_channels": ["1:0x0005"], + "event_channels": ["1:0x0005", "1:0x0019"], "manufacturer": "IKEA of Sweden", "model": "TRADFRI bulb E26 CWS opal 600lm", "node_descriptor": b"\x01@\x8e|\x11RR\x00\x00\x00R\x00\x00", @@ -679,7 +679,7 @@ DEVICES = [ "entity_id": "light.ikea_of_sweden_tradfri_bulb_e26_w_opal_1000lm_77665544_level_on_off", } }, - "event_channels": ["1:0x0005"], + "event_channels": ["1:0x0005", "1:0x0019"], "manufacturer": "IKEA of Sweden", "model": "TRADFRI bulb E26 W opal 1000lm", "node_descriptor": b"\x01@\x8e|\x11RR\x00\x00\x00R\x00\x00", @@ -705,7 +705,7 @@ DEVICES = [ "entity_id": "light.ikea_of_sweden_tradfri_bulb_e26_ws_opal_980lm_77665544_level_light_color_on_off", } }, - "event_channels": ["1:0x0005"], + "event_channels": ["1:0x0005", "1:0x0019"], "manufacturer": "IKEA of Sweden", "model": "TRADFRI bulb E26 WS opal 980lm", "node_descriptor": b"\x01@\x8e|\x11RR\x00\x00\x00R\x00\x00", @@ -731,7 +731,7 @@ DEVICES = [ "entity_id": "light.ikea_of_sweden_tradfri_bulb_e26_opal_1000lm_77665544_level_on_off", } }, - "event_channels": ["1:0x0005"], + "event_channels": ["1:0x0005", "1:0x0019"], "manufacturer": "IKEA of Sweden", "model": "TRADFRI bulb E26 opal 1000lm", "node_descriptor": b"\x01@\x8e|\x11RR\x00\x00\x00R\x00\x00", @@ -755,7 +755,7 @@ DEVICES = [ "entity_id": "switch.ikea_of_sweden_tradfri_control_outlet_77665544_on_off", } }, - "event_channels": ["1:0x0005"], + "event_channels": ["1:0x0005", "1:0x0019"], "manufacturer": "IKEA of Sweden", "model": "TRADFRI control outlet", "node_descriptor": b"\x01@\x8e|\x11RR\x00\x00,R\x00\x00", @@ -788,7 +788,7 @@ DEVICES = [ "entity_id": "binary_sensor.ikea_of_sweden_tradfri_motion_sensor_77665544_on_off", }, }, - "event_channels": ["1:0x0006"], + "event_channels": ["1:0x0006", "1:0x0019"], "manufacturer": "IKEA of Sweden", "model": "TRADFRI motion sensor", "node_descriptor": b"\x02@\x80|\x11RR\x00\x00\x00R\x00\x00", @@ -813,7 +813,7 @@ DEVICES = [ "entity_id": "sensor.ikea_of_sweden_tradfri_on_off_switch_77665544_power", } }, - "event_channels": ["1:0x0006", "1:0x0008"], + "event_channels": ["1:0x0006", "1:0x0008", "1:0x0019"], "manufacturer": "IKEA of Sweden", "model": "TRADFRI on/off switch", "node_descriptor": b"\x02@\x80|\x11RR\x00\x00,R\x00\x00", @@ -838,7 +838,7 @@ DEVICES = [ "entity_id": "sensor.ikea_of_sweden_tradfri_remote_control_77665544_power", } }, - "event_channels": ["1:0x0005", "1:0x0006", "1:0x0008"], + "event_channels": ["1:0x0005", "1:0x0006", "1:0x0008", "1:0x0019"], "manufacturer": "IKEA of Sweden", "model": "TRADFRI remote control", "node_descriptor": b"\x02@\x80|\x11RR\x00\x00\x00R\x00\x00", @@ -864,7 +864,7 @@ DEVICES = [ }, "entities": [], "entity_map": {}, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "IKEA of Sweden", "model": "TRADFRI signal repeater", "node_descriptor": b"\x01@\x8e|\x11RR\x00\x00,R\x00\x00", @@ -888,7 +888,7 @@ DEVICES = [ "entity_id": "sensor.ikea_of_sweden_tradfri_wireless_dimmer_77665544_power", } }, - "event_channels": ["1:0x0006", "1:0x0008"], + "event_channels": ["1:0x0006", "1:0x0008", "1:0x0019"], "manufacturer": "IKEA of Sweden", "model": "TRADFRI wireless dimmer", "node_descriptor": b"\x02@\x80|\x11RR\x00\x00\x00R\x00\x00", @@ -927,7 +927,7 @@ DEVICES = [ "entity_id": "sensor.jasco_products_45852_77665544_smartenergy_metering", }, }, - "event_channels": ["2:0x0006", "2:0x0008"], + "event_channels": ["1:0x0019", "2:0x0006", "2:0x0008"], "manufacturer": "Jasco Products", "model": "45852", "node_descriptor": b"\x01@\x8e$\x11R\xff\x00\x00\x00\xff\x00\x00", @@ -966,7 +966,7 @@ DEVICES = [ "entity_id": "sensor.jasco_products_45856_77665544_smartenergy_metering", }, }, - "event_channels": ["2:0x0006"], + "event_channels": ["1:0x0019", "2:0x0006"], "manufacturer": "Jasco Products", "model": "45856", "node_descriptor": b"\x01@\x8e$\x11R\xff\x00\x00\x00\xff\x00\x00", @@ -1005,7 +1005,7 @@ DEVICES = [ "entity_id": "sensor.jasco_products_45857_77665544_smartenergy_metering", }, }, - "event_channels": ["2:0x0006", "2:0x0008"], + "event_channels": ["1:0x0019", "2:0x0006", "2:0x0008"], "manufacturer": "Jasco Products", "model": "45857", "node_descriptor": b"\x01@\x8e$\x11R\xff\x00\x00\x00\xff\x00\x00", @@ -1063,7 +1063,7 @@ DEVICES = [ "entity_id": "sensor.keen_home_inc_sv02_610_mp_1_3_77665544_pressure", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Keen Home Inc", "model": "SV02-610-MP-1.3", "node_descriptor": b"\x02@\x80[\x11RR\x00\x00*R\x00\x00", @@ -1121,7 +1121,7 @@ DEVICES = [ "entity_id": "sensor.keen_home_inc_sv02_612_mp_1_2_77665544_pressure", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Keen Home Inc", "model": "SV02-612-MP-1.2", "node_descriptor": b"\x02@\x80[\x11RR\x00\x00*R\x00\x00", @@ -1179,7 +1179,7 @@ DEVICES = [ "entity_id": "sensor.keen_home_inc_sv02_612_mp_1_3_77665544_pressure", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Keen Home Inc", "model": "SV02-612-MP-1.3", "node_descriptor": b"\x02@\x80[\x11RR\x00\x00*R\x00\x00", @@ -1212,7 +1212,7 @@ DEVICES = [ "entity_id": "fan.king_of_fans_inc_hbuniversalcfremote_77665544_fan", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "King Of Fans, Inc.", "model": "HBUniversalCFRemote", "node_descriptor": b"\x02@\x8c\x02\x10RR\x00\x00\x00R\x00\x00", @@ -1237,7 +1237,7 @@ DEVICES = [ "entity_id": "sensor.lds_zbt_cctswitch_d0001_77665544_power", } }, - "event_channels": ["1:0x0006", "1:0x0008", "1:0x0300"], + "event_channels": ["1:0x0006", "1:0x0008", "1:0x0019", "1:0x0300"], "manufacturer": "LDS", "model": "ZBT-CCTSwitch-D0001", "node_descriptor": b"\x02@\x80h\x11RR\x00\x00,R\x00\x00", @@ -1262,7 +1262,7 @@ DEVICES = [ "entity_id": "light.ledvance_a19_rgbw_77665544_level_light_color_on_off", } }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "LEDVANCE", "model": "A19 RGBW", "node_descriptor": b"\x01@\x8e\x89\x11RR\x00\x00\x00R\x00\x00", @@ -1286,7 +1286,7 @@ DEVICES = [ "entity_id": "light.ledvance_flex_rgbw_77665544_level_light_color_on_off", } }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "LEDVANCE", "model": "FLEX RGBW", "node_descriptor": b"\x01@\x8e\x89\x11RR\x00\x00\x00R\x00\x00", @@ -1310,7 +1310,7 @@ DEVICES = [ "entity_id": "switch.ledvance_plug_77665544_on_off", } }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "LEDVANCE", "model": "PLUG", "node_descriptor": b"\x01@\x8e\x89\x11RR\x00\x00\x00R\x00\x00", @@ -1334,7 +1334,7 @@ DEVICES = [ "entity_id": "light.ledvance_rt_rgbw_77665544_level_light_color_on_off", } }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "LEDVANCE", "model": "RT RGBW", "node_descriptor": b"\x01@\x8e\x89\x11RR\x00\x00\x00R\x00\x00", @@ -1399,7 +1399,7 @@ DEVICES = [ "entity_id": "sensor.lumi_lumi_plug_maus01_77665544_analog_input_2", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "LUMI", "model": "lumi.plug.maus01", "node_descriptor": b"\x01@\x8e_\x11\x7fd\x00\x00\x00d\x00\x00", @@ -1451,7 +1451,7 @@ DEVICES = [ "entity_id": "light.lumi_lumi_relay_c2acn01_77665544_on_off_2", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "LUMI", "model": "lumi.relay.c2acn01", "node_descriptor": b"\x01@\x8e7\x10\x7fd\x00\x00\x00d\x00\x00", @@ -1510,7 +1510,7 @@ DEVICES = [ "entity_id": "sensor.lumi_lumi_remote_b186acn01_77665544_multistate_input", }, }, - "event_channels": ["1:0x0005", "2:0x0005", "3:0x0005"], + "event_channels": ["1:0x0005", "1:0x0019", "2:0x0005", "3:0x0005"], "manufacturer": "LUMI", "model": "lumi.remote.b186acn01", "node_descriptor": b"\x02@\x807\x10\x7fd\x00\x00\x00d\x00\x00", @@ -1569,7 +1569,7 @@ DEVICES = [ "entity_id": "sensor.lumi_lumi_remote_b286acn01_77665544_multistate_input", }, }, - "event_channels": ["1:0x0005", "2:0x0005", "3:0x0005"], + "event_channels": ["1:0x0005", "1:0x0019", "2:0x0005", "3:0x0005"], "manufacturer": "LUMI", "model": "lumi.remote.b286acn01", "node_descriptor": b"\x02@\x807\x10\x7fd\x00\x00\x00d\x00\x00", @@ -1925,7 +1925,7 @@ DEVICES = [ "entity_id": "sensor.lumi_lumi_sensor_86sw1_77665544_multistate_input", }, }, - "event_channels": ["1:0x0005", "2:0x0005", "3:0x0005"], + "event_channels": ["1:0x0005", "1:0x0019", "2:0x0005", "3:0x0005"], "manufacturer": "LUMI", "model": "lumi.sensor_86sw1", "node_descriptor": b"\x02@\x807\x10\x7fd\x00\x00\x00d\x00\x00", @@ -1978,7 +1978,7 @@ DEVICES = [ "entity_id": "sensor.lumi_lumi_sensor_cube_aqgl01_77665544_analog_input", }, }, - "event_channels": ["1:0x0005", "2:0x0005", "3:0x0005"], + "event_channels": ["1:0x0005", "1:0x0019", "2:0x0005", "3:0x0005"], "manufacturer": "LUMI", "model": "lumi.sensor_cube.aqgl01", "node_descriptor": b"\x02@\x807\x10\x7fd\x00\x00\x00d\x00\x00", @@ -2031,7 +2031,7 @@ DEVICES = [ "entity_id": "sensor.lumi_lumi_sensor_ht_77665544_humidity", }, }, - "event_channels": ["1:0x0005", "2:0x0005", "3:0x0005"], + "event_channels": ["1:0x0005", "1:0x0019", "2:0x0005", "3:0x0005"], "manufacturer": "LUMI", "model": "lumi.sensor_ht", "node_descriptor": b"\x02@\x807\x10\x7fd\x00\x00\x00d\x00\x00", @@ -2064,7 +2064,7 @@ DEVICES = [ "entity_id": "binary_sensor.lumi_lumi_sensor_magnet_77665544_on_off", }, }, - "event_channels": ["1:0x0005", "1:0x0006", "1:0x0008"], + "event_channels": ["1:0x0005", "1:0x0006", "1:0x0008", "1:0x0019"], "manufacturer": "LUMI", "model": "lumi.sensor_magnet", "node_descriptor": b"\x02@\x807\x10\x7fd\x00\x00\x00d\x00\x00", @@ -2142,7 +2142,7 @@ DEVICES = [ "entity_id": "binary_sensor.lumi_lumi_sensor_motion_aq2_77665544_ias_zone", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "LUMI", "model": "lumi.sensor_motion.aq2", "node_descriptor": b"\x02@\x807\x10\x7fd\x00\x00\x00d\x00\x00", @@ -2187,7 +2187,7 @@ DEVICES = [ "entity_id": "binary_sensor.lumi_lumi_sensor_smoke_77665544_ias_zone", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "LUMI", "model": "lumi.sensor_smoke", "node_descriptor": b"\x02@\x807\x10\x7fd\x00\x00\x00d\x00\x00", @@ -2212,7 +2212,7 @@ DEVICES = [ "entity_id": "sensor.lumi_lumi_sensor_switch_77665544_power", } }, - "event_channels": ["1:0x0005", "1:0x0006", "1:0x0008"], + "event_channels": ["1:0x0005", "1:0x0006", "1:0x0008", "1:0x0019"], "manufacturer": "LUMI", "model": "lumi.sensor_switch", "node_descriptor": b"\x02@\x807\x10\x7fd\x00\x00\x00d\x00\x00", @@ -2303,7 +2303,7 @@ DEVICES = [ "entity_id": "binary_sensor.lumi_lumi_sensor_wleak_aq1_77665544_ias_zone", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "LUMI", "model": "lumi.sensor_wleak.aq1", "node_descriptor": b"\x02@\x807\x10\x7fd\x00\x00\x00d\x00\x00", @@ -2349,7 +2349,7 @@ DEVICES = [ "entity_id": "binary_sensor.lumi_lumi_vibration_aq1_77665544_ias_zone", }, }, - "event_channels": ["1:0x0005", "2:0x0005"], + "event_channels": ["1:0x0005", "1:0x0019", "2:0x0005"], "manufacturer": "LUMI", "model": "lumi.vibration.aq1", "node_descriptor": b"\x02@\x807\x10\x7fd\x00\x00\x00d\x00\x00", @@ -2482,7 +2482,7 @@ DEVICES = [ "profile_id": 41440, }, }, - "entities": [], + "entities": ["1:0x0019"], "entity_map": {}, "event_channels": [], "manufacturer": None, @@ -2526,7 +2526,7 @@ DEVICES = [ "entity_id": "light.osram_lightify_a19_rgbw_77665544_level_light_color_on_off", } }, - "event_channels": [], + "event_channels": ["3:0x0019"], "manufacturer": "OSRAM", "model": "LIGHTIFY A19 RGBW", "node_descriptor": b"\x01@\x8e\xaa\xbb@\x00\x00\x00\x00\x00\x00\x03", @@ -2551,7 +2551,7 @@ DEVICES = [ "entity_id": "sensor.osram_lightify_dimming_switch_77665544_power", } }, - "event_channels": ["1:0x0006", "1:0x0008"], + "event_channels": ["1:0x0006", "1:0x0008", "1:0x0019"], "manufacturer": "OSRAM", "model": "LIGHTIFY Dimming Switch", "node_descriptor": b"\x02@\x80\x0c\x11RR\x00\x00\x00R\x00\x00", @@ -2578,7 +2578,7 @@ DEVICES = [ "entity_id": "light.osram_lightify_flex_rgbw_77665544_level_light_color_on_off", } }, - "event_channels": [], + "event_channels": ["3:0x0019"], "manufacturer": "OSRAM", "model": "LIGHTIFY Flex RGBW", "node_descriptor": b"\x19@\x8e\xaa\xbb@\x00\x00\x00\x00\x00\x00\x03", @@ -2611,7 +2611,7 @@ DEVICES = [ "entity_id": "sensor.osram_lightify_rt_tunable_white_77665544_electrical_measurement", }, }, - "event_channels": [], + "event_channels": ["3:0x0019"], "manufacturer": "OSRAM", "model": "LIGHTIFY RT Tunable White", "node_descriptor": b"\x01@\x8e\xaa\xbb@\x00\x00\x00\x00\x00\x00\x03", @@ -2644,7 +2644,7 @@ DEVICES = [ "entity_id": "sensor.osram_plug_01_77665544_electrical_measurement", }, }, - "event_channels": [], + "event_channels": ["3:0x0019"], "manufacturer": "OSRAM", "model": "Plug 01", "node_descriptor": b"\x01@\x8e\xaa\xbb@\x00\x00\x00\x00\x00\x00\x03", @@ -2707,6 +2707,7 @@ DEVICES = [ "1:0x0005", "1:0x0006", "1:0x0008", + "1:0x0019", "1:0x0300", "2:0x0005", "2:0x0006", @@ -2760,7 +2761,7 @@ DEVICES = [ "entity_id": "sensor.philips_rwl020_77665544_power", } }, - "event_channels": ["1:0x0005", "1:0x0006", "1:0x0008"], + "event_channels": ["1:0x0005", "1:0x0006", "1:0x0008", "2:0x0019"], "manufacturer": "Philips", "model": "RWL020", "node_descriptor": b"\x02@\x80\x0b\x10G-\x00\x00\x00-\x00\x00", @@ -2799,7 +2800,7 @@ DEVICES = [ "entity_id": "binary_sensor.samjin_button_77665544_ias_zone", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Samjin", "model": "button", "node_descriptor": b"\x02@\x80A\x12RR\x00\x00,R\x00\x00", @@ -2845,7 +2846,7 @@ DEVICES = [ "default_match": True, }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Samjin", "model": "multi", "node_descriptor": b"\x02@\x80A\x12RR\x00\x00,R\x00\x00", @@ -2884,7 +2885,7 @@ DEVICES = [ "entity_id": "binary_sensor.samjin_water_77665544_ias_zone", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Samjin", "model": "water", "node_descriptor": b"\x02@\x80A\x12RR\x00\x00,R\x00\x00", @@ -2916,7 +2917,7 @@ DEVICES = [ "entity_id": "sensor.securifi_ltd_unk_model_77665544_electrical_measurement", }, }, - "event_channels": ["1:0x0005", "1:0x0006"], + "event_channels": ["1:0x0005", "1:0x0006", "1:0x0019"], "manufacturer": "Securifi Ltd.", "model": None, "node_descriptor": b"\x01@\x8e\x02\x10RR\x00\x00\x00R\x00\x00", @@ -2954,7 +2955,7 @@ DEVICES = [ "entity_id": "binary_sensor.sercomm_corp_sz_dws04n_sf_77665544_ias_zone", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Sercomm Corp.", "model": "SZ-DWS04N_SF", "node_descriptor": b"\x02@\x801\x11R\xff\x00\x00\x00\xff\x00\x00", @@ -2999,7 +3000,7 @@ DEVICES = [ "entity_id": "sensor.sercomm_corp_sz_esw01_77665544_electrical_measurement", }, }, - "event_channels": ["2:0x0006"], + "event_channels": ["1:0x0019", "2:0x0006"], "manufacturer": "Sercomm Corp.", "model": "SZ-ESW01", "node_descriptor": b"\x01@\x8e1\x11RR\x00\x00\x00R\x00\x00", @@ -3043,7 +3044,7 @@ DEVICES = [ "entity_id": "binary_sensor.sercomm_corp_sz_pir04_77665544_ias_zone", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Sercomm Corp.", "model": "SZ-PIR04", "node_descriptor": b"\x02@\x801\x11RR\x00\x00\x00R\x00\x00", @@ -3075,7 +3076,7 @@ DEVICES = [ "entity_id": "sensor.sinope_technologies_rm3250zb_77665544_electrical_measurement", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Sinope Technologies", "model": "RM3250ZB", "node_descriptor": b"\x11@\x8e\x9c\x11G+\x00\x00*+\x00\x00", @@ -3114,7 +3115,7 @@ DEVICES = [ "entity_id": "sensor.sinope_technologies_th1123zb_77665544_electrical_measurement", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Sinope Technologies", "model": "TH1123ZB", "node_descriptor": b"\x12@\x8c\x9c\x11G+\x00\x00\x00+\x00\x00", @@ -3154,7 +3155,7 @@ DEVICES = [ "entity_id": "sensor.sinope_technologies_th1124zb_77665544_electrical_measurement", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Sinope Technologies", "model": "TH1124ZB", "node_descriptor": b"\x11@\x8e\x9c\x11G+\x00\x00\x00+\x00\x00", @@ -3187,7 +3188,7 @@ DEVICES = [ "entity_id": "sensor.smartthings_outletv4_77665544_electrical_measurement", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "SmartThings", "model": "outletv4", "node_descriptor": b"\x01@\x8e\n\x11RR\x00\x00\x00R\x00\x00", @@ -3211,7 +3212,7 @@ DEVICES = [ "entity_id": "device_tracker.smartthings_tagv4_77665544_power", } }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "SmartThings", "model": "tagv4", "node_descriptor": b"\x02@\x80\n\x11RR\x00\x00\x00R\x00\x00", @@ -3307,7 +3308,7 @@ DEVICES = [ "entity_id": "binary_sensor.visonic_mct_340_e_77665544_ias_zone", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Visonic", "model": "MCT-340 E", "node_descriptor": b"\x02@\x80\x11\x10RR\x00\x00\x00R\x00\x00", @@ -3340,7 +3341,7 @@ DEVICES = [ "entity_id": "fan.zen_within_zen_01_77665544_fan", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "Zen Within", "model": "Zen-01", "node_descriptor": b"\x02@\x80X\x11R\x80\x00\x00\x00\x80\x00\x00", @@ -3405,7 +3406,7 @@ DEVICES = [ "entity_id": "light.tyzb01_ns1ndbww_ts0004_77665544_on_off_2", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "_TYZB01_ns1ndbww", "model": "TS0004", "node_descriptor": b"\x01@\x8e\x02\x10R\x00\x02\x00,\x00\x02\x00", @@ -3470,7 +3471,7 @@ DEVICES = [ "entity_id": "sensor.sengled_e11_g13_77665544_smartenergy_metering", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "sengled", "model": "E11-G13", "node_descriptor": b"\x02@\x8c`\x11RR\x00\x00\x00R\x00\x00", @@ -3502,7 +3503,7 @@ DEVICES = [ "entity_id": "sensor.sengled_e12_n14_77665544_smartenergy_metering", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "sengled", "model": "E12-N14", "node_descriptor": b"\x02@\x8c`\x11RR\x00\x00\x00R\x00\x00", @@ -3534,7 +3535,7 @@ DEVICES = [ "entity_id": "sensor.sengled_z01_a19nae26_77665544_smartenergy_metering", }, }, - "event_channels": [], + "event_channels": ["1:0x0019"], "manufacturer": "sengled", "model": "Z01-A19NAE26", "node_descriptor": b"\x02@\x8c`\x11RR\x00\x00\x00R\x00\x00",