1 """Monitor the NZBGet API."""
3 from __future__
import annotations
5 from datetime
import datetime, timedelta
11 SensorEntityDescription,
20 from .const
import DATA_COORDINATOR, DOMAIN
21 from .coordinator
import NZBGetDataUpdateCoordinator
22 from .entity
import NZBGetEntity
24 _LOGGER = logging.getLogger(__name__)
26 SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
29 translation_key=
"article_cache",
30 native_unit_of_measurement=UnitOfInformation.MEGABYTES,
31 device_class=SensorDeviceClass.DATA_SIZE,
34 key=
"AverageDownloadRate",
35 translation_key=
"average_speed",
36 device_class=SensorDeviceClass.DATA_RATE,
37 native_unit_of_measurement=UnitOfDataRate.BYTES_PER_SECOND,
38 suggested_unit_of_measurement=UnitOfDataRate.MEGABYTES_PER_SECOND,
42 translation_key=
"download_paused",
46 translation_key=
"speed",
47 device_class=SensorDeviceClass.DATA_RATE,
48 native_unit_of_measurement=UnitOfDataRate.BYTES_PER_SECOND,
49 suggested_unit_of_measurement=UnitOfDataRate.MEGABYTES_PER_SECOND,
52 key=
"DownloadedSizeMB",
53 translation_key=
"size",
54 native_unit_of_measurement=UnitOfInformation.MEGABYTES,
55 device_class=SensorDeviceClass.DATA_SIZE,
58 key=
"FreeDiskSpaceMB",
59 translation_key=
"disk_free",
60 native_unit_of_measurement=UnitOfInformation.MEGABYTES,
61 device_class=SensorDeviceClass.DATA_SIZE,
65 translation_key=
"post_processing_jobs",
66 native_unit_of_measurement=
"Jobs",
70 translation_key=
"post_processing_paused",
73 key=
"RemainingSizeMB",
74 translation_key=
"queue_size",
75 native_unit_of_measurement=UnitOfInformation.MEGABYTES,
76 device_class=SensorDeviceClass.DATA_SIZE,
80 translation_key=
"uptime",
81 device_class=SensorDeviceClass.TIMESTAMP,
85 translation_key=
"speed_limit",
86 device_class=SensorDeviceClass.DATA_RATE,
87 native_unit_of_measurement=UnitOfDataRate.BYTES_PER_SECOND,
88 suggested_unit_of_measurement=UnitOfDataRate.MEGABYTES_PER_SECOND,
96 async_add_entities: AddEntitiesCallback,
98 """Set up NZBGet sensor based on a config entry."""
99 coordinator: NZBGetDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][
103 NZBGetSensor(coordinator, entry.entry_id, entry.data[CONF_NAME], description)
104 for description
in SENSOR_TYPES
111 """Representation of a NZBGet sensor."""
115 coordinator: NZBGetDataUpdateCoordinator,
118 description: SensorEntityDescription,
120 """Initialize a new NZBGet sensor."""
122 coordinator=coordinator,
124 entry_name=entry_name,
132 """Return the state of the sensor."""
134 value = self.coordinator.data[
"status"].
get(sensor_type)
136 if value
is not None and "UpTimeSec" in sensor_type
and value > 0:
138 if not isinstance(self._attr_native_value, datetime)
or abs(
139 uptime - self._attr_native_value
None __init__(self, NZBGetDataUpdateCoordinator coordinator, str entry_id, str entry_name, SensorEntityDescription description)
StateType|datetime native_value(self)
web.Response get(self, web.Request request, str config_key)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)