Skip to content

Commit 967c374

Browse files
authored
Change uptime sensor to SensorDeviceClass.UPTIME in IronOS integration (#169699)
1 parent c1c62e6 commit 967c374

3 files changed

Lines changed: 18 additions & 18 deletions

File tree

homeassistant/components/iron_os/sensor.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from collections.abc import Callable
44
from dataclasses import dataclass
5+
from datetime import datetime, timedelta
56
from enum import StrEnum
67

78
from pynecil import LiveDataResponse, OperatingMode, PowerSource
@@ -23,6 +24,7 @@
2324
from homeassistant.core import HomeAssistant
2425
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
2526
from homeassistant.helpers.typing import StateType
27+
from homeassistant.util import dt as dt_util
2628

2729
from . import IronOSConfigEntry
2830
from .const import OHM
@@ -56,7 +58,7 @@ class PinecilSensor(StrEnum):
5658
class IronOSSensorEntityDescription(SensorEntityDescription):
5759
"""IronOS sensor entity descriptions."""
5860

59-
value_fn: Callable[[LiveDataResponse, bool], StateType]
61+
value_fn: Callable[[LiveDataResponse, bool], StateType | datetime]
6062

6163

6264
PINECIL_SENSOR_DESCRIPTIONS: tuple[IronOSSensorEntityDescription, ...] = (
@@ -116,10 +118,14 @@ class IronOSSensorEntityDescription(SensorEntityDescription):
116118
IronOSSensorEntityDescription(
117119
key=PinecilSensor.UPTIME,
118120
translation_key=PinecilSensor.UPTIME,
119-
native_unit_of_measurement=UnitOfTime.SECONDS,
120-
device_class=SensorDeviceClass.DURATION,
121-
state_class=SensorStateClass.TOTAL_INCREASING,
122-
value_fn=lambda data, _: data.uptime,
121+
device_class=SensorDeviceClass.UPTIME,
122+
value_fn=(
123+
lambda data, _: (
124+
(dt_util.utcnow() - timedelta(seconds=data.uptime))
125+
if data.uptime is not None
126+
else None
127+
)
128+
),
123129
entity_category=EntityCategory.DIAGNOSTIC,
124130
),
125131
IronOSSensorEntityDescription(
@@ -200,7 +206,7 @@ class IronOSSensorEntity(IronOSBaseEntity, SensorEntity):
200206
coordinator: IronOSLiveDataCoordinator
201207

202208
@property
203-
def native_value(self) -> StateType:
209+
def native_value(self) -> StateType | datetime:
204210
"""Return sensor state."""
205211
return self.entity_description.value_fn(
206212
self.coordinator.data, self.coordinator.has_tip

tests/components/iron_os/snapshots/test_sensor.ambr

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -723,9 +723,7 @@
723723
None,
724724
]),
725725
'area_id': None,
726-
'capabilities': dict({
727-
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
728-
}),
726+
'capabilities': None,
729727
'config_entry_id': <ANY>,
730728
'config_subentry_id': <ANY>,
731729
'device_class': None,
@@ -743,11 +741,8 @@
743741
'name': None,
744742
'object_id_base': 'Uptime',
745743
'options': dict({
746-
'sensor': dict({
747-
'suggested_display_precision': 2,
748-
}),
749744
}),
750-
'original_device_class': <SensorDeviceClass.DURATION: 'duration'>,
745+
'original_device_class': <SensorDeviceClass.UPTIME: 'uptime'>,
751746
'original_icon': None,
752747
'original_name': 'Uptime',
753748
'platform': 'iron_os',
@@ -756,22 +751,20 @@
756751
'supported_features': 0,
757752
'translation_key': <PinecilSensor.UPTIME: 'uptime'>,
758753
'unique_id': 'c0:ff:ee:c0:ff:ee_uptime',
759-
'unit_of_measurement': <UnitOfTime.SECONDS: 's'>,
754+
'unit_of_measurement': None,
760755
})
761756
# ---
762757
# name: test_sensors[sensor.pinecil_uptime-state]
763758
StateSnapshot({
764759
'attributes': ReadOnlyDict({
765-
'device_class': 'duration',
760+
'device_class': 'uptime',
766761
'friendly_name': 'Pinecil Uptime',
767-
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
768-
'unit_of_measurement': <UnitOfTime.SECONDS: 's'>,
769762
}),
770763
'context': <ANY>,
771764
'entity_id': 'sensor.pinecil_uptime',
772765
'last_changed': <ANY>,
773766
'last_reported': <ANY>,
774767
'last_updated': <ANY>,
775-
'state': '1671',
768+
'state': '2026-05-03T17:53:03+00:00',
776769
})
777770
# ---

tests/components/iron_os/test_sensor.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ async def sensor_only() -> AsyncGenerator[None]:
2828

2929

3030
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
31+
@pytest.mark.freeze_time("2026-05-03T18:20:54+00:00")
3132
async def test_sensors(
3233
hass: HomeAssistant,
3334
config_entry: MockConfigEntry,

0 commit comments

Comments
 (0)