1 """Platform for sensor integration."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from datetime
import datetime, timedelta
12 SensorEntityDescription,
21 from .const
import DOMAIN
22 from .coordinator
import IntellifireDataUpdateCoordinator
23 from .entity
import IntellifireEntity
26 @dataclass(frozen=True)
28 """Mixin for required keys."""
31 [IntellifireDataUpdateCoordinator], int | str | datetime | float |
None
35 @dataclass(frozen=True)
37 SensorEntityDescription,
38 IntellifireSensorRequiredKeysMixin,
40 """Describes a sensor entity."""
44 coordinator: IntellifireDataUpdateCoordinator,
46 """Define a sensor that takes into account timezone."""
47 if not (seconds_offset := coordinator.data.timeremaining_s):
53 coordinator: IntellifireDataUpdateCoordinator,
55 """Define a sensor that takes into account a timezone."""
56 if not (seconds_offset := coordinator.data.downtime):
62 coordinator: IntellifireDataUpdateCoordinator,
64 """Return a timestamp of how long the sensor has been up."""
65 if not (seconds_offset := coordinator.data.uptime):
70 INTELLIFIRE_SENSORS: tuple[IntellifireSensorEntityDescription, ...] = (
73 translation_key=
"flame_height",
74 state_class=SensorStateClass.MEASUREMENT,
76 value_fn=
lambda coordinator: (coordinator.data.flameheight + 1),
80 state_class=SensorStateClass.MEASUREMENT,
81 device_class=SensorDeviceClass.TEMPERATURE,
82 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
83 value_fn=
lambda coordinator: coordinator.data.temperature_c,
87 translation_key=
"target_temp",
88 state_class=SensorStateClass.MEASUREMENT,
89 device_class=SensorDeviceClass.TEMPERATURE,
90 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
91 value_fn=
lambda coordinator: coordinator.data.thermostat_setpoint_c,
95 translation_key=
"fan_speed",
96 state_class=SensorStateClass.MEASUREMENT,
97 value_fn=
lambda coordinator: coordinator.data.fanspeed,
100 key=
"timer_end_timestamp",
101 translation_key=
"timer_end_timestamp",
102 state_class=SensorStateClass.MEASUREMENT,
103 device_class=SensorDeviceClass.TIMESTAMP,
104 value_fn=_time_remaining_to_timestamp,
108 translation_key=
"downtime",
109 entity_category=EntityCategory.DIAGNOSTIC,
110 device_class=SensorDeviceClass.TIMESTAMP,
111 value_fn=_downtime_to_timestamp,
115 translation_key=
"uptime",
116 entity_category=EntityCategory.DIAGNOSTIC,
117 device_class=SensorDeviceClass.TIMESTAMP,
118 value_fn=_uptime_to_timestamp,
121 key=
"connection_quality",
122 translation_key=
"connection_quality",
123 entity_category=EntityCategory.DIAGNOSTIC,
124 value_fn=
lambda coordinator: coordinator.data.connection_quality,
125 entity_registry_enabled_default=
False,
129 translation_key=
"ecm_latency",
130 entity_category=EntityCategory.DIAGNOSTIC,
131 value_fn=
lambda coordinator: coordinator.data.ecm_latency,
132 entity_registry_enabled_default=
False,
136 translation_key=
"ipv4_address",
137 entity_category=EntityCategory.DIAGNOSTIC,
138 value_fn=
lambda coordinator: coordinator.data.ipv4_address,
144 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
146 """Define setup entry call."""
148 coordinator: IntellifireDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
151 for description
in INTELLIFIRE_SENSORS
156 """Extends IntelliFireEntity with Sensor specific logic."""
158 entity_description: IntellifireSensorEntityDescription
162 """Return the state."""
int|str|datetime|float|None native_value(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
datetime|None _uptime_to_timestamp(IntellifireDataUpdateCoordinator coordinator)
datetime|None _time_remaining_to_timestamp(IntellifireDataUpdateCoordinator coordinator)
datetime|None _downtime_to_timestamp(IntellifireDataUpdateCoordinator coordinator)