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 <joostlek@outlook.com>

* 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 <joostlek@outlook.com>
This commit is contained in:
TimL 2024-09-13 21:36:54 +10:00 committed by GitHub
parent 5d9c986f87
commit 6aa07243cd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 278 additions and 635 deletions

View File

@ -0,0 +1,15 @@
{
"entity": {
"sensor": {
"device_mode": {
"default": "mdi:connection"
},
"firmware_channel": {
"default": "mdi:update"
},
"zigbee_type": {
"default": "mdi:zigbee"
}
}
}
}

View File

@ -7,7 +7,7 @@ from dataclasses import dataclass
from datetime import datetime, timedelta from datetime import datetime, timedelta
from itertools import chain from itertools import chain
from pysmlight import Sensors from pysmlight import Info, Sensors
from homeassistant.components.sensor import ( from homeassistant.components.sensor import (
SensorDeviceClass, SensorDeviceClass,
@ -18,6 +18,7 @@ from homeassistant.components.sensor import (
from homeassistant.const import EntityCategory, UnitOfInformation, UnitOfTemperature from homeassistant.const import EntityCategory, UnitOfInformation, UnitOfTemperature
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from homeassistant.util.dt import utcnow from homeassistant.util.dt import utcnow
from . import SmConfigEntry from . import SmConfigEntry
@ -30,11 +31,42 @@ from .entity import SmEntity
class SmSensorEntityDescription(SensorEntityDescription): class SmSensorEntityDescription(SensorEntityDescription):
"""Class describing SMLIGHT sensor entities.""" """Class describing SMLIGHT sensor entities."""
entity_category = EntityCategory.DIAGNOSTIC
value_fn: Callable[[Sensors], float | None] 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( SmSensorEntityDescription(
key="core_temperature", key="core_temperature",
translation_key="core_temperature", translation_key="core_temperature",
@ -71,7 +103,7 @@ SENSORS = [
), ),
] ]
UPTIME = [ UPTIME: list[SmSensorEntityDescription] = [
SmSensorEntityDescription( SmSensorEntityDescription(
key="core_uptime", key="core_uptime",
translation_key="core_uptime", translation_key="core_uptime",
@ -99,6 +131,7 @@ async def async_setup_entry(
async_add_entities( async_add_entities(
chain( chain(
(SmInfoSensorEntity(coordinator, description) for description in INFO),
(SmSensorEntity(coordinator, description) for description in SENSORS), (SmSensorEntity(coordinator, description) for description in SENSORS),
(SmUptimeSensorEntity(coordinator, description) for description in UPTIME), (SmUptimeSensorEntity(coordinator, description) for description in UPTIME),
) )
@ -109,6 +142,7 @@ class SmSensorEntity(SmEntity, SensorEntity):
"""Representation of a slzb sensor.""" """Representation of a slzb sensor."""
entity_description: SmSensorEntityDescription entity_description: SmSensorEntityDescription
_attr_entity_category = EntityCategory.DIAGNOSTIC
def __init__( def __init__(
self, self,
@ -122,11 +156,40 @@ class SmSensorEntity(SmEntity, SensorEntity):
self._attr_unique_id = f"{coordinator.unique_id}_{description.key}" self._attr_unique_id = f"{coordinator.unique_id}_{description.key}"
@property @property
def native_value(self) -> datetime | float | None: def native_value(self) -> datetime | str | float | None:
"""Return the sensor value.""" """Return the sensor value."""
return self.entity_description.value_fn(self.coordinator.data.sensors) 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): class SmUptimeSensorEntity(SmSensorEntity):
"""Representation of a slzb uptime sensor.""" """Representation of a slzb uptime sensor."""

View File

@ -68,6 +68,29 @@
}, },
"socket_uptime": { "socket_uptime": {
"name": "Zigbee 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": { "button": {

View File

@ -1,4 +1,62 @@
# serializer version: 1 # 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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.mock_title_connection_mode',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'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': <ANY>,
'entity_id': 'sensor.mock_title_connection_mode',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'eth',
})
# ---
# name: test_sensors[sensor.mock_title_core_chip_temp-entry] # name: test_sensors[sensor.mock_title_core_chip_temp-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({
@ -148,6 +206,62 @@
'state': '188', '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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.mock_title_firmware_channel',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'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': <ANY>,
'entity_id': 'sensor.mock_title_firmware_channel',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'dev',
})
# ---
# name: test_sensors[sensor.mock_title_ram_usage-entry] # name: test_sensors[sensor.mock_title_ram_usage-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({
@ -196,100 +310,6 @@
'state': '99', 'state': '99',
}) })
# --- # ---
# name: test_sensors[sensor.mock_title_timestamp-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.mock_title_timestamp',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.TIMESTAMP: 'timestamp'>,
'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': <ANY>,
'entity_id': 'sensor.mock_title_timestamp',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.mock_title_timestamp_2',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.TIMESTAMP: 'timestamp'>,
'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': <ANY>,
'entity_id': 'sensor.mock_title_timestamp_2',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '2024-06-30T23:57:53+00:00',
})
# ---
# name: test_sensors[sensor.mock_title_zigbee_chip_temp-entry] # name: test_sensors[sensor.mock_title_zigbee_chip_temp-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({
@ -344,6 +364,64 @@
'state': '32.7', '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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.mock_title_zigbee_type',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'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': <ANY>,
'entity_id': 'sensor.mock_title_zigbee_type',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_sensors[sensor.mock_title_zigbee_uptime-entry] # name: test_sensors[sensor.mock_title_zigbee_uptime-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({
@ -391,539 +469,3 @@
'state': '2024-06-30T23:57:53+00:00', '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': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.slzb_06_core_chip_temp',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 1,
}),
}),
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
'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': <UnitOfTemperature.CELSIUS: '°C'>,
})
# ---
# 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': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}),
'context': <ANY>,
'entity_id': 'sensor.slzb_06_core_chip_temp',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}),
'context': <ANY>,
'entity_id': 'sensor.slzb_06_core_chip_temp',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '35.0',
})
# ---
# name: test_sensors[sensor.slzb_06_core_chip_temp].1
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.slzb_06_core_chip_temp',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 1,
}),
}),
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
'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': <UnitOfTemperature.CELSIUS: '°C'>,
})
# ---
# name: test_sensors[sensor.slzb_06_core_chip_temp].2
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'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': <ANY>,
'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': <ANY>,
'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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.slzb_06_filesystem_usage',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'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': <UnitOfInformation.KILOBYTES: 'kB'>,
})
# ---
# 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': <UnitOfInformation.KILOBYTES: 'kB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.slzb_06_filesystem_usage',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <UnitOfInformation.KILOBYTES: 'kB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.slzb_06_filesystem_usage',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '188',
})
# ---
# name: test_sensors[sensor.slzb_06_filesystem_usage].1
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.slzb_06_filesystem_usage',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'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': <UnitOfInformation.KILOBYTES: 'kB'>,
})
# ---
# name: test_sensors[sensor.slzb_06_filesystem_usage].2
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'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': <ANY>,
'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': <ANY>,
'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': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.slzb_06_ram_usage',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'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': <UnitOfInformation.KILOBYTES: 'kB'>,
})
# ---
# 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': <UnitOfInformation.KILOBYTES: 'kB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.slzb_06_ram_usage',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <UnitOfInformation.KILOBYTES: 'kB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.slzb_06_ram_usage',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '99',
})
# ---
# name: test_sensors[sensor.slzb_06_ram_usage].1
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.slzb_06_ram_usage',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'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': <UnitOfInformation.KILOBYTES: 'kB'>,
})
# ---
# name: test_sensors[sensor.slzb_06_ram_usage].2
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'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': <ANY>,
'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': <ANY>,
'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': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.slzb_06_zigbee_chip_temp',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 1,
}),
}),
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
'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': <UnitOfTemperature.CELSIUS: '°C'>,
})
# ---
# 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': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}),
'context': <ANY>,
'entity_id': 'sensor.slzb_06_zigbee_chip_temp',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}),
'context': <ANY>,
'entity_id': 'sensor.slzb_06_zigbee_chip_temp',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '32.7',
})
# ---
# name: test_sensors[sensor.slzb_06_zigbee_chip_temp].1
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.slzb_06_zigbee_chip_temp',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 1,
}),
}),
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
'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': <UnitOfTemperature.CELSIUS: '°C'>,
})
# ---
# name: test_sensors[sensor.slzb_06_zigbee_chip_temp].2
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'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': <ANY>,
'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': <ANY>,
'serial_number': None,
'suggested_area': None,
'sw_version': 'core: v2.3.1.dev / zigbee: -1',
'via_device_id': None,
})
# ---