1 """Support for Speedtest.net internet speed testing sensor."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from typing
import Any, cast
12 SensorEntityDescription,
22 from .
import SpeedTestConfigEntry
33 from .coordinator
import SpeedTestDataCoordinator
36 @dataclass(frozen=True)
38 """Class describing Speedtest sensor entities."""
40 value: Callable = round
43 SENSOR_TYPES: tuple[SpeedtestSensorEntityDescription, ...] = (
46 translation_key=
"ping",
47 native_unit_of_measurement=UnitOfTime.MILLISECONDS,
48 state_class=SensorStateClass.MEASUREMENT,
49 device_class=SensorDeviceClass.DURATION,
53 translation_key=
"download",
54 native_unit_of_measurement=UnitOfDataRate.MEGABITS_PER_SECOND,
55 state_class=SensorStateClass.MEASUREMENT,
56 device_class=SensorDeviceClass.DATA_RATE,
57 value=
lambda value: round(value / 10**6, 2),
61 translation_key=
"upload",
62 native_unit_of_measurement=UnitOfDataRate.MEGABITS_PER_SECOND,
63 state_class=SensorStateClass.MEASUREMENT,
64 device_class=SensorDeviceClass.DATA_RATE,
65 value=
lambda value: round(value / 10**6, 2),
72 config_entry: SpeedTestConfigEntry,
73 async_add_entities: AddEntitiesCallback,
75 """Set up the Speedtestdotnet sensors."""
76 speedtest_coordinator = config_entry.runtime_data
79 for description
in SENSOR_TYPES
84 """Implementation of a speedtest.net sensor."""
86 entity_description: SpeedtestSensorEntityDescription
87 _attr_attribution = ATTRIBUTION
88 _attr_has_entity_name =
True
92 coordinator: SpeedTestDataCoordinator,
93 description: SpeedtestSensorEntityDescription,
95 """Initialize the sensor."""
99 self.
_state_state: StateType =
None
100 self._attrs: dict[str, Any] = {}
102 identifiers={(DOMAIN, self.coordinator.config_entry.entry_id)},
104 entry_type=DeviceEntryType.SERVICE,
105 configuration_url=
"https://www.speedtest.net/",
110 """Return native value for entity."""
111 if self.coordinator.data:
118 """Return the state attributes."""
119 if self.coordinator.data:
122 ATTR_SERVER_NAME: self.coordinator.data[
"server"][
"name"],
123 ATTR_SERVER_COUNTRY: self.coordinator.data[
"server"][
"country"],
124 ATTR_SERVER_ID: self.coordinator.data[
"server"][
"id"],
129 self._attrs[ATTR_BYTES_RECEIVED] = self.coordinator.data[
133 self._attrs[ATTR_BYTES_SENT] = self.coordinator.data[ATTR_BYTES_SENT]
None __init__(self, SpeedTestDataCoordinator coordinator, SpeedtestSensorEntityDescription description)
StateType native_value(self)
dict[str, Any] extra_state_attributes(self)
IssData update(pyiss.ISS iss)
None async_setup_entry(HomeAssistant hass, SpeedTestConfigEntry config_entry, AddEntitiesCallback async_add_entities)