Skip to content

Commit c28dc32

Browse files
authored
Add PSRAM sensor for SMLIGHT integration (#166104)
1 parent eef3472 commit c28dc32

File tree

3 files changed

+69
-0
lines changed

3 files changed

+69
-0
lines changed

homeassistant/components/smlight/sensor.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ class SmInfoEntityDescription(SensorEntityDescription):
105105
),
106106
]
107107

108+
108109
EXTRA_SENSOR = SmSensorEntityDescription(
109110
key="zigbee_temperature_2",
110111
translation_key="zigbee_temperature",
@@ -115,6 +116,15 @@ class SmInfoEntityDescription(SensorEntityDescription):
115116
value_fn=lambda x: x.zb_temp2,
116117
)
117118

119+
PSRAM_SENSOR = SmSensorEntityDescription(
120+
key="psram_usage",
121+
translation_key="psram_usage",
122+
device_class=SensorDeviceClass.DATA_SIZE,
123+
native_unit_of_measurement=UnitOfInformation.KILOBYTES,
124+
entity_registry_enabled_default=False,
125+
value_fn=lambda x: x.psram_usage,
126+
)
127+
118128
UPTIME: list[SmSensorEntityDescription] = [
119129
SmSensorEntityDescription(
120130
key="core_uptime",
@@ -156,6 +166,9 @@ async def async_setup_entry(
156166
if coordinator.data.sensors.zb_temp2 is not None:
157167
entities.append(SmSensorEntity(coordinator, EXTRA_SENSOR))
158168

169+
if coordinator.data.info.u_device:
170+
entities.append(SmSensorEntity(coordinator, PSRAM_SENSOR))
171+
159172
async_add_entities(entities)
160173

161174

homeassistant/components/smlight/strings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@
104104
"fs_usage": {
105105
"name": "Filesystem usage"
106106
},
107+
"psram_usage": {
108+
"name": "PSRAM usage"
109+
},
107110
"ram_usage": {
108111
"name": "RAM usage"
109112
},

tests/components/smlight/test_sensor.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import pytest
77
from syrupy.assertion import SnapshotAssertion
88

9+
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
910
from homeassistant.components.smlight.const import DOMAIN
1011
from homeassistant.const import STATE_UNKNOWN, Platform
1112
from homeassistant.core import HomeAssistant
@@ -113,3 +114,55 @@ async def test_zigbee_type_sensors(
113114
state = hass.states.get("sensor.mock_title_zigbee_type_2")
114115
assert state
115116
assert state.state == "router"
117+
118+
119+
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
120+
async def test_psram_usage_sensor(
121+
hass: HomeAssistant,
122+
mock_config_entry: MockConfigEntry,
123+
mock_smlight_client: MagicMock,
124+
entity_registry: er.EntityRegistry,
125+
) -> None:
126+
"""Test PSRAM usage sensor creation for u-devices."""
127+
mock_smlight_client.get_info.side_effect = None
128+
mock_smlight_client.get_info.return_value = Info(
129+
MAC="AA:BB:CC:DD:EE:FF",
130+
model="SLZB-MR3U",
131+
u_device=True,
132+
)
133+
mock_smlight_client.get_sensors.return_value = Sensors(psram_usage=156)
134+
135+
await setup_integration(hass, mock_config_entry)
136+
137+
entity_id = entity_registry.async_get_entity_id(
138+
SENSOR_DOMAIN, DOMAIN, "aa:bb:cc:dd:ee:ff_psram_usage"
139+
)
140+
assert entity_id is not None
141+
142+
state = hass.states.get(entity_id)
143+
assert state is not None
144+
assert state.state == "156"
145+
assert state.attributes["unit_of_measurement"] == "kB"
146+
147+
148+
async def test_psram_usage_sensor_not_created(
149+
hass: HomeAssistant,
150+
mock_config_entry: MockConfigEntry,
151+
mock_smlight_client: MagicMock,
152+
entity_registry: er.EntityRegistry,
153+
) -> None:
154+
"""Test PSRAM usage sensor is not created for non-u devices."""
155+
mock_smlight_client.get_info.side_effect = None
156+
mock_smlight_client.get_info.return_value = Info(
157+
MAC="AA:BB:CC:DD:EE:FF",
158+
model="SLZB-MR3",
159+
u_device=False,
160+
)
161+
await setup_integration(hass, mock_config_entry)
162+
163+
assert hass.states.get("sensor.mock_title_psram_usage") is None
164+
165+
entity_id = entity_registry.async_get_entity_id(
166+
SENSOR_DOMAIN, DOMAIN, "aa:bb:cc:dd:ee:ff_psram_usage"
167+
)
168+
assert entity_id is None

0 commit comments

Comments
 (0)