1 """Sensor platform that for Ping integration."""
3 from collections.abc
import Callable
4 from dataclasses
import dataclass
9 SensorEntityDescription,
17 from .
import PingConfigEntry
18 from .coordinator
import PingResult, PingUpdateCoordinator
19 from .entity
import PingEntity
22 @dataclass(frozen=True, kw_only=True)
24 """Class to describe a Ping sensor entity."""
26 value_fn: Callable[[PingResult], float |
None]
27 has_fn: Callable[[PingResult], bool]
30 SENSORS: tuple[PingSensorEntityDescription, ...] = (
32 key=
"round_trip_time_avg",
33 translation_key=
"round_trip_time_avg",
34 native_unit_of_measurement=UnitOfTime.MILLISECONDS,
35 state_class=SensorStateClass.MEASUREMENT,
36 device_class=SensorDeviceClass.DURATION,
37 entity_registry_enabled_default=
False,
38 entity_category=EntityCategory.DIAGNOSTIC,
39 value_fn=
lambda result: result.data.get(
"avg"),
40 has_fn=
lambda result:
"avg" in result.data,
43 key=
"round_trip_time_max",
44 translation_key=
"round_trip_time_max",
45 native_unit_of_measurement=UnitOfTime.MILLISECONDS,
46 state_class=SensorStateClass.MEASUREMENT,
47 device_class=SensorDeviceClass.DURATION,
48 entity_registry_enabled_default=
False,
49 entity_category=EntityCategory.DIAGNOSTIC,
50 value_fn=
lambda result: result.data.get(
"max"),
51 has_fn=
lambda result:
"max" in result.data,
54 key=
"round_trip_time_mdev",
55 translation_key=
"round_trip_time_mdev",
56 native_unit_of_measurement=UnitOfTime.MILLISECONDS,
57 state_class=SensorStateClass.MEASUREMENT,
58 device_class=SensorDeviceClass.DURATION,
59 entity_registry_enabled_default=
False,
60 entity_category=EntityCategory.DIAGNOSTIC,
61 value_fn=
lambda result: result.data.get(
"mdev"),
62 has_fn=
lambda result:
"mdev" in result.data,
65 key=
"round_trip_time_min",
66 translation_key=
"round_trip_time_min",
67 native_unit_of_measurement=UnitOfTime.MILLISECONDS,
68 state_class=SensorStateClass.MEASUREMENT,
69 device_class=SensorDeviceClass.DURATION,
70 entity_registry_enabled_default=
False,
71 entity_category=EntityCategory.DIAGNOSTIC,
72 value_fn=
lambda result: result.data.get(
"min"),
73 has_fn=
lambda result:
"min" in result.data,
79 hass: HomeAssistant, entry: PingConfigEntry, async_add_entities: AddEntitiesCallback
81 """Set up Ping sensors from config entry."""
82 coordinator = entry.runtime_data
86 for description
in SENSORS
87 if description.has_fn(coordinator.data)
92 """Represents a Ping sensor."""
94 entity_description: PingSensorEntityDescription
98 config_entry: ConfigEntry,
99 description: PingSensorEntityDescription,
100 coordinator: PingUpdateCoordinator,
102 """Initialize the sensor."""
104 config_entry, coordinator, f
"{config_entry.entry_id}-{description.key}"
111 """Return True if entity is available."""
112 return super().available
and self.coordinator.data.is_alive
116 """Return the sensor state."""
None __init__(self, ConfigEntry config_entry, PingSensorEntityDescription description, PingUpdateCoordinator coordinator)
float|None native_value(self)
None async_setup_entry(HomeAssistant hass, PingConfigEntry entry, AddEntitiesCallback async_add_entities)