Update sw_version in device registry for ZHA devices (#33184)

* Update firmware version in device registry.
Parse recevied OTA requests for firmware version and update device
registry.

* Update tests.
* Cleanup sw_id_update listener.
* Update ZHA test devices list.
This commit is contained in:
Alexei Chetroi 2020-03-23 12:42:41 -04:00 committed by GitHub
parent b8fdebd05c
commit bf4b099f11
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 154 additions and 82 deletions

View File

@ -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)

View File

@ -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"

View File

@ -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):

View File

@ -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

View File

@ -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",