1 """Support for Webmin sensors."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
10 SensorEntityDescription,
18 from .
import WebminConfigEntry
19 from .coordinator
import WebminUpdateCoordinator
22 @dataclass(frozen=True, kw_only=True)
24 """Represents a filesystem sensor description."""
29 SENSOR_TYPES: list[SensorEntityDescription] = [
32 translation_key=
"load_1m",
33 state_class=SensorStateClass.MEASUREMENT,
34 entity_registry_enabled_default=
False,
38 translation_key=
"load_5m",
39 state_class=SensorStateClass.MEASUREMENT,
40 entity_registry_enabled_default=
False,
44 translation_key=
"load_15m",
45 state_class=SensorStateClass.MEASUREMENT,
46 entity_registry_enabled_default=
False,
50 translation_key=
"mem_total",
51 native_unit_of_measurement=UnitOfInformation.KIBIBYTES,
52 suggested_unit_of_measurement=UnitOfInformation.GIBIBYTES,
53 device_class=SensorDeviceClass.DATA_SIZE,
54 suggested_display_precision=2,
55 state_class=SensorStateClass.MEASUREMENT,
56 entity_registry_enabled_default=
False,
60 translation_key=
"mem_free",
61 native_unit_of_measurement=UnitOfInformation.KIBIBYTES,
62 suggested_unit_of_measurement=UnitOfInformation.GIBIBYTES,
63 device_class=SensorDeviceClass.DATA_SIZE,
64 suggested_display_precision=2,
65 state_class=SensorStateClass.MEASUREMENT,
66 entity_registry_enabled_default=
False,
70 translation_key=
"swap_total",
71 native_unit_of_measurement=UnitOfInformation.KIBIBYTES,
72 suggested_unit_of_measurement=UnitOfInformation.GIBIBYTES,
73 device_class=SensorDeviceClass.DATA_SIZE,
74 suggested_display_precision=2,
75 state_class=SensorStateClass.MEASUREMENT,
76 entity_registry_enabled_default=
False,
80 translation_key=
"swap_free",
81 native_unit_of_measurement=UnitOfInformation.KIBIBYTES,
82 suggested_unit_of_measurement=UnitOfInformation.GIBIBYTES,
83 device_class=SensorDeviceClass.DATA_SIZE,
84 suggested_display_precision=2,
85 state_class=SensorStateClass.MEASUREMENT,
86 entity_registry_enabled_default=
False,
90 translation_key=
"disk_total",
91 native_unit_of_measurement=UnitOfInformation.BYTES,
92 suggested_unit_of_measurement=UnitOfInformation.GIBIBYTES,
93 device_class=SensorDeviceClass.DATA_SIZE,
94 suggested_display_precision=1,
95 state_class=SensorStateClass.MEASUREMENT,
96 entity_registry_enabled_default=
False,
100 translation_key=
"disk_free",
101 native_unit_of_measurement=UnitOfInformation.BYTES,
102 suggested_unit_of_measurement=UnitOfInformation.GIBIBYTES,
103 device_class=SensorDeviceClass.DATA_SIZE,
104 suggested_display_precision=1,
105 state_class=SensorStateClass.MEASUREMENT,
106 entity_registry_enabled_default=
False,
110 translation_key=
"disk_used",
111 native_unit_of_measurement=UnitOfInformation.BYTES,
112 suggested_unit_of_measurement=UnitOfInformation.GIBIBYTES,
113 device_class=SensorDeviceClass.DATA_SIZE,
114 suggested_display_precision=1,
115 state_class=SensorStateClass.MEASUREMENT,
116 entity_registry_enabled_default=
False,
123 ) -> list[WebminFSSensorDescription]:
124 """Return all sensor descriptions for a mount point."""
128 mountpoint=mountpoint,
130 translation_key=
"disk_fs_total",
131 native_unit_of_measurement=UnitOfInformation.BYTES,
132 suggested_unit_of_measurement=UnitOfInformation.GIBIBYTES,
133 device_class=SensorDeviceClass.DATA_SIZE,
134 suggested_display_precision=1,
135 state_class=SensorStateClass.MEASUREMENT,
136 entity_registry_enabled_default=
False,
139 mountpoint=mountpoint,
141 translation_key=
"disk_fs_used",
142 native_unit_of_measurement=UnitOfInformation.BYTES,
143 suggested_unit_of_measurement=UnitOfInformation.GIBIBYTES,
144 device_class=SensorDeviceClass.DATA_SIZE,
145 suggested_display_precision=1,
146 state_class=SensorStateClass.MEASUREMENT,
147 entity_registry_enabled_default=
False,
150 mountpoint=mountpoint,
152 translation_key=
"disk_fs_free",
153 native_unit_of_measurement=UnitOfInformation.BYTES,
154 suggested_unit_of_measurement=UnitOfInformation.GIBIBYTES,
155 device_class=SensorDeviceClass.DATA_SIZE,
156 suggested_display_precision=1,
157 state_class=SensorStateClass.MEASUREMENT,
158 entity_registry_enabled_default=
False,
161 mountpoint=mountpoint,
163 translation_key=
"disk_fs_itotal",
164 state_class=SensorStateClass.MEASUREMENT,
165 entity_registry_enabled_default=
False,
168 mountpoint=mountpoint,
170 translation_key=
"disk_fs_iused",
171 state_class=SensorStateClass.MEASUREMENT,
172 entity_registry_enabled_default=
False,
175 mountpoint=mountpoint,
177 translation_key=
"disk_fs_ifree",
178 state_class=SensorStateClass.MEASUREMENT,
179 entity_registry_enabled_default=
False,
182 mountpoint=mountpoint,
184 translation_key=
"disk_fs_used_percent",
185 native_unit_of_measurement=PERCENTAGE,
186 state_class=SensorStateClass.MEASUREMENT,
187 entity_registry_enabled_default=
False,
190 mountpoint=mountpoint,
192 translation_key=
"disk_fs_iused_percent",
193 native_unit_of_measurement=PERCENTAGE,
194 state_class=SensorStateClass.MEASUREMENT,
195 entity_registry_enabled_default=
False,
202 entry: WebminConfigEntry,
203 async_add_entities: AddEntitiesCallback,
205 """Set up Webmin sensors based on a config entry."""
206 coordinator = entry.runtime_data
208 entities: list[WebminSensor | WebminFSSensor] = [
210 for description
in SENSOR_TYPES
211 if description.key
in coordinator.data
214 for fs, values
in coordinator.data[
"disk_fs"].items():
218 if description.key
in values
225 """Represents a Webmin sensor."""
227 entity_description: SensorEntityDescription
228 _attr_has_entity_name =
True
231 self, coordinator: WebminUpdateCoordinator, description: SensorEntityDescription
233 """Initialize a Webmin sensor."""
242 """Return the state of the sensor."""
247 """Represents a Webmin filesystem sensor."""
249 entity_description: WebminFSSensorDescription
250 _attr_has_entity_name =
True
254 coordinator: WebminUpdateCoordinator,
255 description: WebminFSSensorDescription,
257 """Initialize a Webmin filesystem sensor."""
264 f
"{coordinator.mac_address}_{description.mountpoint}_{description.key}"
269 """Return the state of the sensor."""
270 return self.coordinator.data[
"disk_fs"][self.
entity_descriptionentity_description.mountpoint][
None __init__(self, WebminUpdateCoordinator coordinator, WebminFSSensorDescription description)
int|float native_value(self)
_attr_translation_placeholders
None __init__(self, WebminUpdateCoordinator coordinator, SensorEntityDescription description)
int|float native_value(self)
None async_setup_entry(HomeAssistant hass, WebminConfigEntry entry, AddEntitiesCallback async_add_entities)
list[WebminFSSensorDescription] generate_filesystem_sensor_description(str mountpoint)