From 6aa07243cd450164db7944dbe66bed1f52a590b6 Mon Sep 17 00:00:00 2001 From: TimL Date: Fri, 13 Sep 2024 21:36:54 +1000 Subject: [PATCH] Add info based sensors to Smlight integration (#125482) * Move entity category to class * improve type hints * Regenerate sensor snapshots to remove some invalid entries * Add info sensors that display various device settings/modes * Add strings for info sensors * Update sensor snapshot with new sensors * Use StateType Co-authored-by: Joost Lekkerkerker * Use icon translations * statetype * drop ip sensor * Lookup enum values before translating * entities use options * update options strings strings * lookup values from options * update sensor snapshot --------- Co-authored-by: Joost Lekkerkerker --- homeassistant/components/smlight/icons.json | 15 + homeassistant/components/smlight/sensor.py | 73 +- homeassistant/components/smlight/strings.json | 23 + .../smlight/snapshots/test_sensor.ambr | 802 ++++-------------- 4 files changed, 278 insertions(+), 635 deletions(-) create mode 100644 homeassistant/components/smlight/icons.json diff --git a/homeassistant/components/smlight/icons.json b/homeassistant/components/smlight/icons.json new file mode 100644 index 00000000000..3d086466b4f --- /dev/null +++ b/homeassistant/components/smlight/icons.json @@ -0,0 +1,15 @@ +{ + "entity": { + "sensor": { + "device_mode": { + "default": "mdi:connection" + }, + "firmware_channel": { + "default": "mdi:update" + }, + "zigbee_type": { + "default": "mdi:zigbee" + } + } + } +} diff --git a/homeassistant/components/smlight/sensor.py b/homeassistant/components/smlight/sensor.py index f5193522c4c..8da6e354fd7 100644 --- a/homeassistant/components/smlight/sensor.py +++ b/homeassistant/components/smlight/sensor.py @@ -7,7 +7,7 @@ from dataclasses import dataclass from datetime import datetime, timedelta from itertools import chain -from pysmlight import Sensors +from pysmlight import Info, Sensors from homeassistant.components.sensor import ( SensorDeviceClass, @@ -18,6 +18,7 @@ from homeassistant.components.sensor import ( from homeassistant.const import EntityCategory, UnitOfInformation, UnitOfTemperature from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import StateType from homeassistant.util.dt import utcnow from . import SmConfigEntry @@ -30,11 +31,42 @@ from .entity import SmEntity class SmSensorEntityDescription(SensorEntityDescription): """Class describing SMLIGHT sensor entities.""" - entity_category = EntityCategory.DIAGNOSTIC value_fn: Callable[[Sensors], float | None] -SENSORS = [ +@dataclass(frozen=True, kw_only=True) +class SmInfoEntityDescription(SensorEntityDescription): + """Class describing SMLIGHT information entities.""" + + value_fn: Callable[[Info], StateType] + + +INFO: list[SmInfoEntityDescription] = [ + SmInfoEntityDescription( + key="device_mode", + translation_key="device_mode", + device_class=SensorDeviceClass.ENUM, + options=["eth", "wifi", "usb"], + value_fn=lambda x: x.coord_mode, + ), + SmInfoEntityDescription( + key="firmware_channel", + translation_key="firmware_channel", + device_class=SensorDeviceClass.ENUM, + options=["dev", "release"], + value_fn=lambda x: x.fw_channel, + ), + SmInfoEntityDescription( + key="zigbee_type", + translation_key="zigbee_type", + device_class=SensorDeviceClass.ENUM, + options=["coordinator", "router", "thread"], + value_fn=lambda x: x.zb_type, + ), +] + + +SENSORS: list[SmSensorEntityDescription] = [ SmSensorEntityDescription( key="core_temperature", translation_key="core_temperature", @@ -71,7 +103,7 @@ SENSORS = [ ), ] -UPTIME = [ +UPTIME: list[SmSensorEntityDescription] = [ SmSensorEntityDescription( key="core_uptime", translation_key="core_uptime", @@ -99,6 +131,7 @@ async def async_setup_entry( async_add_entities( chain( + (SmInfoSensorEntity(coordinator, description) for description in INFO), (SmSensorEntity(coordinator, description) for description in SENSORS), (SmUptimeSensorEntity(coordinator, description) for description in UPTIME), ) @@ -109,6 +142,7 @@ class SmSensorEntity(SmEntity, SensorEntity): """Representation of a slzb sensor.""" entity_description: SmSensorEntityDescription + _attr_entity_category = EntityCategory.DIAGNOSTIC def __init__( self, @@ -122,11 +156,40 @@ class SmSensorEntity(SmEntity, SensorEntity): self._attr_unique_id = f"{coordinator.unique_id}_{description.key}" @property - def native_value(self) -> datetime | float | None: + def native_value(self) -> datetime | str | float | None: """Return the sensor value.""" return self.entity_description.value_fn(self.coordinator.data.sensors) +class SmInfoSensorEntity(SmEntity, SensorEntity): + """Representation of a slzb info sensor.""" + + entity_description: SmInfoEntityDescription + _attr_entity_category = EntityCategory.DIAGNOSTIC + + def __init__( + self, + coordinator: SmDataUpdateCoordinator, + description: SmInfoEntityDescription, + ) -> None: + """Initiate slzb sensor.""" + super().__init__(coordinator) + + self.entity_description = description + self._attr_unique_id = f"{coordinator.unique_id}_{description.key}" + + @property + def native_value(self) -> StateType: + """Return the sensor value.""" + value = self.entity_description.value_fn(self.coordinator.data.info) + options = self.entity_description.options + + if isinstance(value, int) and options is not None: + value = options[value] if 0 <= value < len(options) else None + + return value + + class SmUptimeSensorEntity(SmSensorEntity): """Representation of a slzb uptime sensor.""" diff --git a/homeassistant/components/smlight/strings.json b/homeassistant/components/smlight/strings.json index 8628a49a13c..ad36711528b 100644 --- a/homeassistant/components/smlight/strings.json +++ b/homeassistant/components/smlight/strings.json @@ -68,6 +68,29 @@ }, "socket_uptime": { "name": "Zigbee uptime" + }, + "device_mode": { + "name": "Connection mode", + "state": { + "eth": "Ethernet", + "wifi": "Wi-Fi", + "usb": "USB" + } + }, + "firmware_channel": { + "name": "Firmware channel", + "state": { + "dev": "Development", + "release": "Stable" + } + }, + "zigbee_type": { + "name": "Zigbee type", + "state": { + "coordinator": "Coordinator", + "router": "Router", + "thread": "Thread" + } } }, "button": { diff --git a/tests/components/smlight/snapshots/test_sensor.ambr b/tests/components/smlight/snapshots/test_sensor.ambr index 6895a8473bd..7abc5ef4f64 100644 --- a/tests/components/smlight/snapshots/test_sensor.ambr +++ b/tests/components/smlight/snapshots/test_sensor.ambr @@ -1,4 +1,62 @@ # serializer version: 1 +# name: test_sensors[sensor.mock_title_connection_mode-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'options': list([ + 'eth', + 'wifi', + 'usb', + ]), + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': , + 'entity_id': 'sensor.mock_title_connection_mode', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Connection mode', + 'platform': 'smlight', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'device_mode', + 'unique_id': 'aa:bb:cc:dd:ee:ff_device_mode', + 'unit_of_measurement': None, + }) +# --- +# name: test_sensors[sensor.mock_title_connection_mode-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'enum', + 'friendly_name': 'Mock Title Connection mode', + 'options': list([ + 'eth', + 'wifi', + 'usb', + ]), + }), + 'context': , + 'entity_id': 'sensor.mock_title_connection_mode', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'eth', + }) +# --- # name: test_sensors[sensor.mock_title_core_chip_temp-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ @@ -148,6 +206,62 @@ 'state': '188', }) # --- +# name: test_sensors[sensor.mock_title_firmware_channel-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'options': list([ + 'dev', + 'release', + ]), + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': , + 'entity_id': 'sensor.mock_title_firmware_channel', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Firmware channel', + 'platform': 'smlight', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'firmware_channel', + 'unique_id': 'aa:bb:cc:dd:ee:ff_firmware_channel', + 'unit_of_measurement': None, + }) +# --- +# name: test_sensors[sensor.mock_title_firmware_channel-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'enum', + 'friendly_name': 'Mock Title Firmware channel', + 'options': list([ + 'dev', + 'release', + ]), + }), + 'context': , + 'entity_id': 'sensor.mock_title_firmware_channel', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'dev', + }) +# --- # name: test_sensors[sensor.mock_title_ram_usage-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ @@ -196,100 +310,6 @@ 'state': '99', }) # --- -# name: test_sensors[sensor.mock_title_timestamp-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.mock_title_timestamp', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'labels': set({ - }), - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': None, - 'original_name': 'Timestamp', - 'platform': 'smlight', - 'previous_unique_id': None, - 'supported_features': 0, - 'translation_key': 'core_uptime', - 'unique_id': 'aa:bb:cc:dd:ee:ff_core_uptime', - 'unit_of_measurement': None, - }) -# --- -# name: test_sensors[sensor.mock_title_timestamp-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'timestamp', - 'friendly_name': 'Mock Title Timestamp', - }), - 'context': , - 'entity_id': 'sensor.mock_title_timestamp', - 'last_changed': , - 'last_reported': , - 'last_updated': , - 'state': '2024-06-25T02:51:15+00:00', - }) -# --- -# name: test_sensors[sensor.mock_title_timestamp_2-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.mock_title_timestamp_2', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'labels': set({ - }), - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': None, - 'original_name': 'Timestamp', - 'platform': 'smlight', - 'previous_unique_id': None, - 'supported_features': 0, - 'translation_key': 'socket_uptime', - 'unique_id': 'aa:bb:cc:dd:ee:ff_socket_uptime', - 'unit_of_measurement': None, - }) -# --- -# name: test_sensors[sensor.mock_title_timestamp_2-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'timestamp', - 'friendly_name': 'Mock Title Timestamp', - }), - 'context': , - 'entity_id': 'sensor.mock_title_timestamp_2', - 'last_changed': , - 'last_reported': , - 'last_updated': , - 'state': '2024-06-30T23:57:53+00:00', - }) -# --- # name: test_sensors[sensor.mock_title_zigbee_chip_temp-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ @@ -344,6 +364,64 @@ 'state': '32.7', }) # --- +# name: test_sensors[sensor.mock_title_zigbee_type-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'options': list([ + 'coordinator', + 'router', + 'thread', + ]), + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': , + 'entity_id': 'sensor.mock_title_zigbee_type', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Zigbee type', + 'platform': 'smlight', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'zigbee_type', + 'unique_id': 'aa:bb:cc:dd:ee:ff_zigbee_type', + 'unit_of_measurement': None, + }) +# --- +# name: test_sensors[sensor.mock_title_zigbee_type-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'enum', + 'friendly_name': 'Mock Title Zigbee type', + 'options': list([ + 'coordinator', + 'router', + 'thread', + ]), + }), + 'context': , + 'entity_id': 'sensor.mock_title_zigbee_type', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- # name: test_sensors[sensor.mock_title_zigbee_uptime-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ @@ -391,539 +469,3 @@ 'state': '2024-06-30T23:57:53+00:00', }) # --- -# name: test_sensors[sensor.slzb_06_core_chip_temp-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.slzb_06_core_chip_temp', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'labels': set({ - }), - 'name': None, - 'options': dict({ - 'sensor': dict({ - 'suggested_display_precision': 1, - }), - }), - 'original_device_class': , - 'original_icon': None, - 'original_name': 'Core chip temp', - 'platform': 'smlight', - 'previous_unique_id': None, - 'supported_features': 0, - 'translation_key': 'core_temperature', - 'unique_id': 'aa:bb:cc:dd:ee:ff_core_temperature', - 'unit_of_measurement': , - }) -# --- -# name: test_sensors[sensor.slzb_06_core_chip_temp-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'temperature', - 'friendly_name': 'slzb-06 Core chip temp', - 'state_class': , - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.slzb_06_core_chip_temp', - 'last_changed': , - 'last_reported': , - 'last_updated': , - 'state': '35.0', - }) -# --- -# name: test_sensors[sensor.slzb_06_core_chip_temp] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'temperature', - 'friendly_name': 'slzb-06 Core chip temp', - 'state_class': , - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.slzb_06_core_chip_temp', - 'last_changed': , - 'last_reported': , - 'last_updated': , - 'state': '35.0', - }) -# --- -# name: test_sensors[sensor.slzb_06_core_chip_temp].1 - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.slzb_06_core_chip_temp', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'labels': set({ - }), - 'name': None, - 'options': dict({ - 'sensor': dict({ - 'suggested_display_precision': 1, - }), - }), - 'original_device_class': , - 'original_icon': None, - 'original_name': 'Core chip temp', - 'platform': 'smlight', - 'previous_unique_id': None, - 'supported_features': 0, - 'translation_key': 'core_temperature', - 'unique_id': 'aa:bb:cc:dd:ee:ff_core_temperature', - 'unit_of_measurement': , - }) -# --- -# name: test_sensors[sensor.slzb_06_core_chip_temp].2 - DeviceRegistryEntrySnapshot({ - 'area_id': None, - 'config_entries': , - 'configuration_url': 'http://slzb-06.local', - 'connections': set({ - tuple( - 'mac', - 'aa:bb:cc:dd:ee:ff', - ), - }), - 'disabled_by': None, - 'entry_type': None, - 'hw_version': None, - 'id': , - 'identifiers': set({ - }), - 'is_new': False, - 'labels': set({ - }), - 'manufacturer': 'SMLIGHT', - 'model': 'SLZB-06p7', - 'model_id': None, - 'name': 'slzb-06', - 'name_by_user': None, - 'primary_config_entry': , - 'serial_number': None, - 'suggested_area': None, - 'sw_version': 'core: v2.3.1.dev / zigbee: -1', - 'via_device_id': None, - }) -# --- -# name: test_sensors[sensor.slzb_06_filesystem_usage-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.slzb_06_filesystem_usage', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'labels': set({ - }), - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': None, - 'original_name': 'Filesystem usage', - 'platform': 'smlight', - 'previous_unique_id': None, - 'supported_features': 0, - 'translation_key': 'fs_usage', - 'unique_id': 'aa:bb:cc:dd:ee:ff_fs_usage', - 'unit_of_measurement': , - }) -# --- -# name: test_sensors[sensor.slzb_06_filesystem_usage-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'data_size', - 'friendly_name': 'slzb-06 Filesystem usage', - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.slzb_06_filesystem_usage', - 'last_changed': , - 'last_reported': , - 'last_updated': , - 'state': '188', - }) -# --- -# name: test_sensors[sensor.slzb_06_filesystem_usage] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'data_size', - 'friendly_name': 'slzb-06 Filesystem usage', - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.slzb_06_filesystem_usage', - 'last_changed': , - 'last_reported': , - 'last_updated': , - 'state': '188', - }) -# --- -# name: test_sensors[sensor.slzb_06_filesystem_usage].1 - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.slzb_06_filesystem_usage', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'labels': set({ - }), - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': None, - 'original_name': 'Filesystem usage', - 'platform': 'smlight', - 'previous_unique_id': None, - 'supported_features': 0, - 'translation_key': 'fs_usage', - 'unique_id': 'aa:bb:cc:dd:ee:ff_fs_usage', - 'unit_of_measurement': , - }) -# --- -# name: test_sensors[sensor.slzb_06_filesystem_usage].2 - DeviceRegistryEntrySnapshot({ - 'area_id': None, - 'config_entries': , - 'configuration_url': 'http://slzb-06.local', - 'connections': set({ - tuple( - 'mac', - 'aa:bb:cc:dd:ee:ff', - ), - }), - 'disabled_by': None, - 'entry_type': None, - 'hw_version': None, - 'id': , - 'identifiers': set({ - }), - 'is_new': False, - 'labels': set({ - }), - 'manufacturer': 'SMLIGHT', - 'model': 'SLZB-06p7', - 'model_id': None, - 'name': 'slzb-06', - 'name_by_user': None, - 'primary_config_entry': , - 'serial_number': None, - 'suggested_area': None, - 'sw_version': 'core: v2.3.1.dev / zigbee: -1', - 'via_device_id': None, - }) -# --- -# name: test_sensors[sensor.slzb_06_ram_usage-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.slzb_06_ram_usage', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'labels': set({ - }), - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': None, - 'original_name': 'RAM usage', - 'platform': 'smlight', - 'previous_unique_id': None, - 'supported_features': 0, - 'translation_key': 'ram_usage', - 'unique_id': 'aa:bb:cc:dd:ee:ff_ram_usage', - 'unit_of_measurement': , - }) -# --- -# name: test_sensors[sensor.slzb_06_ram_usage-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'data_size', - 'friendly_name': 'slzb-06 RAM usage', - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.slzb_06_ram_usage', - 'last_changed': , - 'last_reported': , - 'last_updated': , - 'state': '99', - }) -# --- -# name: test_sensors[sensor.slzb_06_ram_usage] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'data_size', - 'friendly_name': 'slzb-06 RAM usage', - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.slzb_06_ram_usage', - 'last_changed': , - 'last_reported': , - 'last_updated': , - 'state': '99', - }) -# --- -# name: test_sensors[sensor.slzb_06_ram_usage].1 - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.slzb_06_ram_usage', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'labels': set({ - }), - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': None, - 'original_name': 'RAM usage', - 'platform': 'smlight', - 'previous_unique_id': None, - 'supported_features': 0, - 'translation_key': 'ram_usage', - 'unique_id': 'aa:bb:cc:dd:ee:ff_ram_usage', - 'unit_of_measurement': , - }) -# --- -# name: test_sensors[sensor.slzb_06_ram_usage].2 - DeviceRegistryEntrySnapshot({ - 'area_id': None, - 'config_entries': , - 'configuration_url': 'http://slzb-06.local', - 'connections': set({ - tuple( - 'mac', - 'aa:bb:cc:dd:ee:ff', - ), - }), - 'disabled_by': None, - 'entry_type': None, - 'hw_version': None, - 'id': , - 'identifiers': set({ - }), - 'is_new': False, - 'labels': set({ - }), - 'manufacturer': 'SMLIGHT', - 'model': 'SLZB-06p7', - 'model_id': None, - 'name': 'slzb-06', - 'name_by_user': None, - 'primary_config_entry': , - 'serial_number': None, - 'suggested_area': None, - 'sw_version': 'core: v2.3.1.dev / zigbee: -1', - 'via_device_id': None, - }) -# --- -# name: test_sensors[sensor.slzb_06_zigbee_chip_temp-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.slzb_06_zigbee_chip_temp', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'labels': set({ - }), - 'name': None, - 'options': dict({ - 'sensor': dict({ - 'suggested_display_precision': 1, - }), - }), - 'original_device_class': , - 'original_icon': None, - 'original_name': 'Zigbee chip temp', - 'platform': 'smlight', - 'previous_unique_id': None, - 'supported_features': 0, - 'translation_key': 'zigbee_temperature', - 'unique_id': 'aa:bb:cc:dd:ee:ff_zigbee_temperature', - 'unit_of_measurement': , - }) -# --- -# name: test_sensors[sensor.slzb_06_zigbee_chip_temp-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'temperature', - 'friendly_name': 'slzb-06 Zigbee chip temp', - 'state_class': , - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.slzb_06_zigbee_chip_temp', - 'last_changed': , - 'last_reported': , - 'last_updated': , - 'state': '32.7', - }) -# --- -# name: test_sensors[sensor.slzb_06_zigbee_chip_temp] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'temperature', - 'friendly_name': 'slzb-06 Zigbee chip temp', - 'state_class': , - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.slzb_06_zigbee_chip_temp', - 'last_changed': , - 'last_reported': , - 'last_updated': , - 'state': '32.7', - }) -# --- -# name: test_sensors[sensor.slzb_06_zigbee_chip_temp].1 - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.slzb_06_zigbee_chip_temp', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'labels': set({ - }), - 'name': None, - 'options': dict({ - 'sensor': dict({ - 'suggested_display_precision': 1, - }), - }), - 'original_device_class': , - 'original_icon': None, - 'original_name': 'Zigbee chip temp', - 'platform': 'smlight', - 'previous_unique_id': None, - 'supported_features': 0, - 'translation_key': 'zigbee_temperature', - 'unique_id': 'aa:bb:cc:dd:ee:ff_zigbee_temperature', - 'unit_of_measurement': , - }) -# --- -# name: test_sensors[sensor.slzb_06_zigbee_chip_temp].2 - DeviceRegistryEntrySnapshot({ - 'area_id': None, - 'config_entries': , - 'configuration_url': 'http://slzb-06.local', - 'connections': set({ - tuple( - 'mac', - 'aa:bb:cc:dd:ee:ff', - ), - }), - 'disabled_by': None, - 'entry_type': None, - 'hw_version': None, - 'id': , - 'identifiers': set({ - }), - 'is_new': False, - 'labels': set({ - }), - 'manufacturer': 'SMLIGHT', - 'model': 'SLZB-06p7', - 'model_id': None, - 'name': 'slzb-06', - 'name_by_user': None, - 'primary_config_entry': , - 'serial_number': None, - 'suggested_area': None, - 'sw_version': 'core: v2.3.1.dev / zigbee: -1', - 'via_device_id': None, - }) -# ---