Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Provides a sensor to track various status aspects of a UPS."""
2 
3 from __future__ import annotations
4 
5 from dataclasses import asdict
6 import logging
7 from typing import Final, cast
8 
10  SensorDeviceClass,
11  SensorEntity,
12  SensorEntityDescription,
13  SensorStateClass,
14 )
15 from homeassistant.const import (
16  ATTR_MANUFACTURER,
17  ATTR_MODEL,
18  ATTR_SERIAL_NUMBER,
19  ATTR_SW_VERSION,
20  PERCENTAGE,
21  STATE_UNKNOWN,
22  EntityCategory,
23  UnitOfApparentPower,
24  UnitOfElectricCurrent,
25  UnitOfElectricPotential,
26  UnitOfFrequency,
27  UnitOfPower,
28  UnitOfTemperature,
29  UnitOfTime,
30 )
31 from homeassistant.core import HomeAssistant
32 from homeassistant.helpers.device_registry import DeviceInfo
33 from homeassistant.helpers.entity_platform import AddEntitiesCallback
35  CoordinatorEntity,
36  DataUpdateCoordinator,
37 )
38 
39 from . import NutConfigEntry, PyNUTData
40 from .const import DOMAIN, KEY_STATUS, KEY_STATUS_DISPLAY, STATE_TYPES
41 
42 NUT_DEV_INFO_TO_DEV_INFO: dict[str, str] = {
43  "manufacturer": ATTR_MANUFACTURER,
44  "model": ATTR_MODEL,
45  "firmware": ATTR_SW_VERSION,
46  "serial": ATTR_SERIAL_NUMBER,
47 }
48 
49 _LOGGER = logging.getLogger(__name__)
50 
51 SENSOR_TYPES: Final[dict[str, SensorEntityDescription]] = {
52  "ups.status.display": SensorEntityDescription(
53  key="ups.status.display",
54  translation_key="ups_status_display",
55  ),
56  "ups.status": SensorEntityDescription(
57  key="ups.status",
58  translation_key="ups_status",
59  ),
60  "ups.alarm": SensorEntityDescription(
61  key="ups.alarm",
62  translation_key="ups_alarm",
63  ),
64  "ups.temperature": SensorEntityDescription(
65  key="ups.temperature",
66  translation_key="ups_temperature",
67  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
68  device_class=SensorDeviceClass.TEMPERATURE,
69  state_class=SensorStateClass.MEASUREMENT,
70  entity_category=EntityCategory.DIAGNOSTIC,
71  entity_registry_enabled_default=False,
72  ),
73  "ups.load": SensorEntityDescription(
74  key="ups.load",
75  translation_key="ups_load",
76  native_unit_of_measurement=PERCENTAGE,
77  state_class=SensorStateClass.MEASUREMENT,
78  ),
79  "ups.load.high": SensorEntityDescription(
80  key="ups.load.high",
81  translation_key="ups_load_high",
82  native_unit_of_measurement=PERCENTAGE,
83  entity_category=EntityCategory.DIAGNOSTIC,
84  entity_registry_enabled_default=False,
85  ),
86  "ups.id": SensorEntityDescription(
87  key="ups.id",
88  translation_key="ups_id",
89  entity_category=EntityCategory.DIAGNOSTIC,
90  entity_registry_enabled_default=False,
91  ),
92  "ups.delay.start": SensorEntityDescription(
93  key="ups.delay.start",
94  translation_key="ups_delay_start",
95  native_unit_of_measurement=UnitOfTime.SECONDS,
96  device_class=SensorDeviceClass.DURATION,
97  entity_category=EntityCategory.DIAGNOSTIC,
98  entity_registry_enabled_default=False,
99  ),
100  "ups.delay.reboot": SensorEntityDescription(
101  key="ups.delay.reboot",
102  translation_key="ups_delay_reboot",
103  native_unit_of_measurement=UnitOfTime.SECONDS,
104  device_class=SensorDeviceClass.DURATION,
105  entity_category=EntityCategory.DIAGNOSTIC,
106  entity_registry_enabled_default=False,
107  ),
108  "ups.delay.shutdown": SensorEntityDescription(
109  key="ups.delay.shutdown",
110  translation_key="ups_delay_shutdown",
111  native_unit_of_measurement=UnitOfTime.SECONDS,
112  device_class=SensorDeviceClass.DURATION,
113  entity_category=EntityCategory.DIAGNOSTIC,
114  entity_registry_enabled_default=False,
115  ),
116  "ups.timer.start": SensorEntityDescription(
117  key="ups.timer.start",
118  translation_key="ups_timer_start",
119  native_unit_of_measurement=UnitOfTime.SECONDS,
120  device_class=SensorDeviceClass.DURATION,
121  entity_category=EntityCategory.DIAGNOSTIC,
122  entity_registry_enabled_default=False,
123  ),
124  "ups.timer.reboot": SensorEntityDescription(
125  key="ups.timer.reboot",
126  translation_key="ups_timer_reboot",
127  native_unit_of_measurement=UnitOfTime.SECONDS,
128  device_class=SensorDeviceClass.DURATION,
129  entity_category=EntityCategory.DIAGNOSTIC,
130  entity_registry_enabled_default=False,
131  ),
132  "ups.timer.shutdown": SensorEntityDescription(
133  key="ups.timer.shutdown",
134  translation_key="ups_timer_shutdown",
135  native_unit_of_measurement=UnitOfTime.SECONDS,
136  device_class=SensorDeviceClass.DURATION,
137  entity_category=EntityCategory.DIAGNOSTIC,
138  entity_registry_enabled_default=False,
139  ),
140  "ups.test.interval": SensorEntityDescription(
141  key="ups.test.interval",
142  translation_key="ups_test_interval",
143  native_unit_of_measurement=UnitOfTime.SECONDS,
144  device_class=SensorDeviceClass.DURATION,
145  entity_category=EntityCategory.DIAGNOSTIC,
146  entity_registry_enabled_default=False,
147  ),
148  "ups.test.result": SensorEntityDescription(
149  key="ups.test.result",
150  translation_key="ups_test_result",
151  entity_category=EntityCategory.DIAGNOSTIC,
152  entity_registry_enabled_default=False,
153  ),
154  "ups.test.date": SensorEntityDescription(
155  key="ups.test.date",
156  translation_key="ups_test_date",
157  entity_category=EntityCategory.DIAGNOSTIC,
158  entity_registry_enabled_default=False,
159  ),
160  "ups.display.language": SensorEntityDescription(
161  key="ups.display.language",
162  translation_key="ups_display_language",
163  entity_category=EntityCategory.DIAGNOSTIC,
164  entity_registry_enabled_default=False,
165  ),
166  "ups.contacts": SensorEntityDescription(
167  key="ups.contacts",
168  translation_key="ups_contacts",
169  entity_category=EntityCategory.DIAGNOSTIC,
170  entity_registry_enabled_default=False,
171  ),
172  "ups.efficiency": SensorEntityDescription(
173  key="ups.efficiency",
174  translation_key="ups_efficiency",
175  native_unit_of_measurement=PERCENTAGE,
176  state_class=SensorStateClass.MEASUREMENT,
177  entity_category=EntityCategory.DIAGNOSTIC,
178  entity_registry_enabled_default=False,
179  ),
180  "ups.power": SensorEntityDescription(
181  key="ups.power",
182  translation_key="ups_power",
183  native_unit_of_measurement=UnitOfApparentPower.VOLT_AMPERE,
184  device_class=SensorDeviceClass.APPARENT_POWER,
185  state_class=SensorStateClass.MEASUREMENT,
186  entity_category=EntityCategory.DIAGNOSTIC,
187  entity_registry_enabled_default=False,
188  ),
189  "ups.power.nominal": SensorEntityDescription(
190  key="ups.power.nominal",
191  translation_key="ups_power_nominal",
192  native_unit_of_measurement=UnitOfApparentPower.VOLT_AMPERE,
193  device_class=SensorDeviceClass.APPARENT_POWER,
194  entity_category=EntityCategory.DIAGNOSTIC,
195  entity_registry_enabled_default=False,
196  ),
197  "ups.realpower": SensorEntityDescription(
198  key="ups.realpower",
199  translation_key="ups_realpower",
200  native_unit_of_measurement=UnitOfPower.WATT,
201  device_class=SensorDeviceClass.POWER,
202  state_class=SensorStateClass.MEASUREMENT,
203  entity_category=EntityCategory.DIAGNOSTIC,
204  entity_registry_enabled_default=False,
205  ),
206  "ups.realpower.nominal": SensorEntityDescription(
207  key="ups.realpower.nominal",
208  translation_key="ups_realpower_nominal",
209  native_unit_of_measurement=UnitOfPower.WATT,
210  device_class=SensorDeviceClass.POWER,
211  entity_category=EntityCategory.DIAGNOSTIC,
212  entity_registry_enabled_default=False,
213  ),
214  "ups.beeper.status": SensorEntityDescription(
215  key="ups.beeper.status",
216  translation_key="ups_beeper_status",
217  entity_category=EntityCategory.DIAGNOSTIC,
218  entity_registry_enabled_default=False,
219  ),
220  "ups.type": SensorEntityDescription(
221  key="ups.type",
222  translation_key="ups_type",
223  entity_category=EntityCategory.DIAGNOSTIC,
224  entity_registry_enabled_default=False,
225  ),
226  "ups.watchdog.status": SensorEntityDescription(
227  key="ups.watchdog.status",
228  translation_key="ups_watchdog_status",
229  entity_category=EntityCategory.DIAGNOSTIC,
230  entity_registry_enabled_default=False,
231  ),
232  "ups.start.auto": SensorEntityDescription(
233  key="ups.start.auto",
234  translation_key="ups_start_auto",
235  entity_category=EntityCategory.DIAGNOSTIC,
236  entity_registry_enabled_default=False,
237  ),
238  "ups.start.battery": SensorEntityDescription(
239  key="ups.start.battery",
240  translation_key="ups_start_battery",
241  entity_category=EntityCategory.DIAGNOSTIC,
242  entity_registry_enabled_default=False,
243  ),
244  "ups.start.reboot": SensorEntityDescription(
245  key="ups.start.reboot",
246  translation_key="ups_start_reboot",
247  entity_category=EntityCategory.DIAGNOSTIC,
248  entity_registry_enabled_default=False,
249  ),
250  "ups.shutdown": SensorEntityDescription(
251  key="ups.shutdown",
252  translation_key="ups_shutdown",
253  entity_category=EntityCategory.DIAGNOSTIC,
254  entity_registry_enabled_default=False,
255  ),
256  "battery.charge": SensorEntityDescription(
257  key="battery.charge",
258  translation_key="battery_charge",
259  native_unit_of_measurement=PERCENTAGE,
260  device_class=SensorDeviceClass.BATTERY,
261  state_class=SensorStateClass.MEASUREMENT,
262  ),
263  "battery.charge.low": SensorEntityDescription(
264  key="battery.charge.low",
265  translation_key="battery_charge_low",
266  native_unit_of_measurement=PERCENTAGE,
267  entity_category=EntityCategory.DIAGNOSTIC,
268  entity_registry_enabled_default=False,
269  ),
270  "battery.charge.restart": SensorEntityDescription(
271  key="battery.charge.restart",
272  translation_key="battery_charge_restart",
273  native_unit_of_measurement=PERCENTAGE,
274  entity_category=EntityCategory.DIAGNOSTIC,
275  entity_registry_enabled_default=False,
276  ),
277  "battery.charge.warning": SensorEntityDescription(
278  key="battery.charge.warning",
279  translation_key="battery_charge_warning",
280  native_unit_of_measurement=PERCENTAGE,
281  entity_category=EntityCategory.DIAGNOSTIC,
282  entity_registry_enabled_default=False,
283  ),
284  "battery.charger.status": SensorEntityDescription(
285  key="battery.charger.status",
286  translation_key="battery_charger_status",
287  ),
288  "battery.voltage": SensorEntityDescription(
289  key="battery.voltage",
290  translation_key="battery_voltage",
291  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
292  device_class=SensorDeviceClass.VOLTAGE,
293  state_class=SensorStateClass.MEASUREMENT,
294  entity_category=EntityCategory.DIAGNOSTIC,
295  entity_registry_enabled_default=False,
296  ),
297  "battery.voltage.nominal": SensorEntityDescription(
298  key="battery.voltage.nominal",
299  translation_key="battery_voltage_nominal",
300  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
301  device_class=SensorDeviceClass.VOLTAGE,
302  entity_category=EntityCategory.DIAGNOSTIC,
303  entity_registry_enabled_default=False,
304  ),
305  "battery.voltage.low": SensorEntityDescription(
306  key="battery.voltage.low",
307  translation_key="battery_voltage_low",
308  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
309  device_class=SensorDeviceClass.VOLTAGE,
310  entity_category=EntityCategory.DIAGNOSTIC,
311  entity_registry_enabled_default=False,
312  ),
313  "battery.voltage.high": SensorEntityDescription(
314  key="battery.voltage.high",
315  translation_key="battery_voltage_high",
316  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
317  device_class=SensorDeviceClass.VOLTAGE,
318  entity_category=EntityCategory.DIAGNOSTIC,
319  entity_registry_enabled_default=False,
320  ),
321  "battery.capacity": SensorEntityDescription(
322  key="battery.capacity",
323  translation_key="battery_capacity",
324  native_unit_of_measurement="Ah",
325  entity_category=EntityCategory.DIAGNOSTIC,
326  entity_registry_enabled_default=False,
327  ),
328  "battery.current": SensorEntityDescription(
329  key="battery.current",
330  translation_key="battery_current",
331  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
332  device_class=SensorDeviceClass.CURRENT,
333  state_class=SensorStateClass.MEASUREMENT,
334  entity_category=EntityCategory.DIAGNOSTIC,
335  entity_registry_enabled_default=False,
336  ),
337  "battery.current.total": SensorEntityDescription(
338  key="battery.current.total",
339  translation_key="battery_current_total",
340  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
341  device_class=SensorDeviceClass.CURRENT,
342  entity_category=EntityCategory.DIAGNOSTIC,
343  entity_registry_enabled_default=False,
344  ),
345  "battery.temperature": SensorEntityDescription(
346  key="battery.temperature",
347  translation_key="battery_temperature",
348  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
349  device_class=SensorDeviceClass.TEMPERATURE,
350  state_class=SensorStateClass.MEASUREMENT,
351  entity_category=EntityCategory.DIAGNOSTIC,
352  entity_registry_enabled_default=False,
353  ),
354  "battery.runtime": SensorEntityDescription(
355  key="battery.runtime",
356  translation_key="battery_runtime",
357  native_unit_of_measurement=UnitOfTime.SECONDS,
358  device_class=SensorDeviceClass.DURATION,
359  entity_category=EntityCategory.DIAGNOSTIC,
360  entity_registry_enabled_default=False,
361  ),
362  "battery.runtime.low": SensorEntityDescription(
363  key="battery.runtime.low",
364  translation_key="battery_runtime_low",
365  native_unit_of_measurement=UnitOfTime.SECONDS,
366  device_class=SensorDeviceClass.DURATION,
367  entity_category=EntityCategory.DIAGNOSTIC,
368  entity_registry_enabled_default=False,
369  ),
370  "battery.runtime.restart": SensorEntityDescription(
371  key="battery.runtime.restart",
372  translation_key="battery_runtime_restart",
373  native_unit_of_measurement=UnitOfTime.SECONDS,
374  device_class=SensorDeviceClass.DURATION,
375  entity_category=EntityCategory.DIAGNOSTIC,
376  entity_registry_enabled_default=False,
377  ),
378  "battery.alarm.threshold": SensorEntityDescription(
379  key="battery.alarm.threshold",
380  translation_key="battery_alarm_threshold",
381  entity_category=EntityCategory.DIAGNOSTIC,
382  entity_registry_enabled_default=False,
383  ),
384  "battery.date": SensorEntityDescription(
385  key="battery.date",
386  translation_key="battery_date",
387  entity_category=EntityCategory.DIAGNOSTIC,
388  entity_registry_enabled_default=False,
389  ),
390  "battery.mfr.date": SensorEntityDescription(
391  key="battery.mfr.date",
392  translation_key="battery_mfr_date",
393  entity_category=EntityCategory.DIAGNOSTIC,
394  entity_registry_enabled_default=False,
395  ),
396  "battery.packs": SensorEntityDescription(
397  key="battery.packs",
398  translation_key="battery_packs",
399  entity_category=EntityCategory.DIAGNOSTIC,
400  entity_registry_enabled_default=False,
401  ),
402  "battery.packs.bad": SensorEntityDescription(
403  key="battery.packs.bad",
404  translation_key="battery_packs_bad",
405  entity_category=EntityCategory.DIAGNOSTIC,
406  entity_registry_enabled_default=False,
407  ),
408  "battery.type": SensorEntityDescription(
409  key="battery.type",
410  translation_key="battery_type",
411  entity_category=EntityCategory.DIAGNOSTIC,
412  entity_registry_enabled_default=False,
413  ),
414  "input.sensitivity": SensorEntityDescription(
415  key="input.sensitivity",
416  translation_key="input_sensitivity",
417  entity_category=EntityCategory.DIAGNOSTIC,
418  entity_registry_enabled_default=False,
419  ),
420  "input.transfer.low": SensorEntityDescription(
421  key="input.transfer.low",
422  translation_key="input_transfer_low",
423  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
424  device_class=SensorDeviceClass.VOLTAGE,
425  entity_category=EntityCategory.DIAGNOSTIC,
426  entity_registry_enabled_default=False,
427  ),
428  "input.transfer.high": SensorEntityDescription(
429  key="input.transfer.high",
430  translation_key="input_transfer_high",
431  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
432  device_class=SensorDeviceClass.VOLTAGE,
433  entity_category=EntityCategory.DIAGNOSTIC,
434  entity_registry_enabled_default=False,
435  ),
436  "input.transfer.reason": SensorEntityDescription(
437  key="input.transfer.reason",
438  translation_key="input_transfer_reason",
439  entity_category=EntityCategory.DIAGNOSTIC,
440  entity_registry_enabled_default=False,
441  ),
442  "input.voltage": SensorEntityDescription(
443  key="input.voltage",
444  translation_key="input_voltage",
445  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
446  device_class=SensorDeviceClass.VOLTAGE,
447  state_class=SensorStateClass.MEASUREMENT,
448  ),
449  "input.voltage.nominal": SensorEntityDescription(
450  key="input.voltage.nominal",
451  translation_key="input_voltage_nominal",
452  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
453  device_class=SensorDeviceClass.VOLTAGE,
454  entity_category=EntityCategory.DIAGNOSTIC,
455  entity_registry_enabled_default=False,
456  ),
457  "input.L1-N.voltage": SensorEntityDescription(
458  key="input.L1-N.voltage",
459  translation_key="input_l1_n_voltage",
460  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
461  device_class=SensorDeviceClass.VOLTAGE,
462  state_class=SensorStateClass.MEASUREMENT,
463  entity_category=EntityCategory.DIAGNOSTIC,
464  entity_registry_enabled_default=False,
465  ),
466  "input.L2-N.voltage": SensorEntityDescription(
467  key="input.L2-N.voltage",
468  translation_key="input_l2_n_voltage",
469  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
470  device_class=SensorDeviceClass.VOLTAGE,
471  state_class=SensorStateClass.MEASUREMENT,
472  entity_category=EntityCategory.DIAGNOSTIC,
473  entity_registry_enabled_default=False,
474  ),
475  "input.L3-N.voltage": SensorEntityDescription(
476  key="input.L3-N.voltage",
477  translation_key="input_l3_n_voltage",
478  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
479  device_class=SensorDeviceClass.VOLTAGE,
480  state_class=SensorStateClass.MEASUREMENT,
481  entity_category=EntityCategory.DIAGNOSTIC,
482  entity_registry_enabled_default=False,
483  ),
484  "input.frequency": SensorEntityDescription(
485  key="input.frequency",
486  translation_key="input_frequency",
487  native_unit_of_measurement=UnitOfFrequency.HERTZ,
488  device_class=SensorDeviceClass.FREQUENCY,
489  state_class=SensorStateClass.MEASUREMENT,
490  entity_category=EntityCategory.DIAGNOSTIC,
491  entity_registry_enabled_default=False,
492  ),
493  "input.frequency.nominal": SensorEntityDescription(
494  key="input.frequency.nominal",
495  translation_key="input_frequency_nominal",
496  native_unit_of_measurement=UnitOfFrequency.HERTZ,
497  device_class=SensorDeviceClass.FREQUENCY,
498  entity_category=EntityCategory.DIAGNOSTIC,
499  entity_registry_enabled_default=False,
500  ),
501  "input.frequency.status": SensorEntityDescription(
502  key="input.frequency.status",
503  translation_key="input_frequency_status",
504  entity_category=EntityCategory.DIAGNOSTIC,
505  entity_registry_enabled_default=False,
506  ),
507  "input.L1.frequency": SensorEntityDescription(
508  key="input.L1.frequency",
509  translation_key="input_l1_frequency",
510  native_unit_of_measurement=UnitOfFrequency.HERTZ,
511  device_class=SensorDeviceClass.FREQUENCY,
512  state_class=SensorStateClass.MEASUREMENT,
513  entity_category=EntityCategory.DIAGNOSTIC,
514  entity_registry_enabled_default=False,
515  ),
516  "input.L2.frequency": SensorEntityDescription(
517  key="input.L2.frequency",
518  translation_key="input_l2_frequency",
519  native_unit_of_measurement=UnitOfFrequency.HERTZ,
520  device_class=SensorDeviceClass.FREQUENCY,
521  state_class=SensorStateClass.MEASUREMENT,
522  entity_category=EntityCategory.DIAGNOSTIC,
523  entity_registry_enabled_default=False,
524  ),
525  "input.L3.frequency": SensorEntityDescription(
526  key="input.L3.frequency",
527  translation_key="input_l3_frequency",
528  native_unit_of_measurement=UnitOfFrequency.HERTZ,
529  device_class=SensorDeviceClass.FREQUENCY,
530  state_class=SensorStateClass.MEASUREMENT,
531  entity_category=EntityCategory.DIAGNOSTIC,
532  entity_registry_enabled_default=False,
533  ),
534  "input.bypass.current": SensorEntityDescription(
535  key="input.bypass.current",
536  translation_key="input_bypass_current",
537  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
538  device_class=SensorDeviceClass.CURRENT,
539  state_class=SensorStateClass.MEASUREMENT,
540  entity_category=EntityCategory.DIAGNOSTIC,
541  entity_registry_enabled_default=False,
542  ),
543  "input.bypass.L1.current": SensorEntityDescription(
544  key="input.bypass.L1.current",
545  translation_key="input_bypass_l1_current",
546  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
547  device_class=SensorDeviceClass.CURRENT,
548  state_class=SensorStateClass.MEASUREMENT,
549  entity_category=EntityCategory.DIAGNOSTIC,
550  entity_registry_enabled_default=False,
551  ),
552  "input.bypass.L2.current": SensorEntityDescription(
553  key="input.bypass.L2.current",
554  translation_key="input_bypass_l2_current",
555  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
556  device_class=SensorDeviceClass.CURRENT,
557  state_class=SensorStateClass.MEASUREMENT,
558  entity_category=EntityCategory.DIAGNOSTIC,
559  entity_registry_enabled_default=False,
560  ),
561  "input.bypass.L3.current": SensorEntityDescription(
562  key="input.bypass.L3.current",
563  translation_key="input_bypass_l3_current",
564  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
565  device_class=SensorDeviceClass.CURRENT,
566  state_class=SensorStateClass.MEASUREMENT,
567  entity_category=EntityCategory.DIAGNOSTIC,
568  entity_registry_enabled_default=False,
569  ),
570  "input.bypass.frequency": SensorEntityDescription(
571  key="input.bypass.frequency",
572  translation_key="input_bypass_frequency",
573  native_unit_of_measurement=UnitOfFrequency.HERTZ,
574  device_class=SensorDeviceClass.FREQUENCY,
575  state_class=SensorStateClass.MEASUREMENT,
576  entity_category=EntityCategory.DIAGNOSTIC,
577  entity_registry_enabled_default=False,
578  ),
579  "input.bypass.phases": SensorEntityDescription(
580  key="input.bypass.phases",
581  translation_key="input_bypass_phases",
582  entity_category=EntityCategory.DIAGNOSTIC,
583  entity_registry_enabled_default=False,
584  ),
585  "input.bypass.realpower": SensorEntityDescription(
586  key="input.bypass.realpower",
587  translation_key="input_bypass_realpower",
588  native_unit_of_measurement=UnitOfPower.WATT,
589  device_class=SensorDeviceClass.POWER,
590  state_class=SensorStateClass.MEASUREMENT,
591  entity_category=EntityCategory.DIAGNOSTIC,
592  entity_registry_enabled_default=False,
593  ),
594  "input.bypass.L1.realpower": SensorEntityDescription(
595  key="input.bypass.L1.realpower",
596  translation_key="input_bypass_l1_realpower",
597  native_unit_of_measurement=UnitOfPower.WATT,
598  device_class=SensorDeviceClass.POWER,
599  state_class=SensorStateClass.MEASUREMENT,
600  entity_category=EntityCategory.DIAGNOSTIC,
601  entity_registry_enabled_default=False,
602  ),
603  "input.bypass.L2.realpower": SensorEntityDescription(
604  key="input.bypass.L2.realpower",
605  translation_key="input_bypass_l2_realpower",
606  native_unit_of_measurement=UnitOfPower.WATT,
607  device_class=SensorDeviceClass.POWER,
608  state_class=SensorStateClass.MEASUREMENT,
609  entity_category=EntityCategory.DIAGNOSTIC,
610  entity_registry_enabled_default=False,
611  ),
612  "input.bypass.L3.realpower": SensorEntityDescription(
613  key="input.bypass.L3.realpower",
614  translation_key="input_bypass_l3_realpower",
615  native_unit_of_measurement=UnitOfPower.WATT,
616  device_class=SensorDeviceClass.POWER,
617  state_class=SensorStateClass.MEASUREMENT,
618  entity_category=EntityCategory.DIAGNOSTIC,
619  entity_registry_enabled_default=False,
620  ),
621  "input.bypass.voltage": SensorEntityDescription(
622  key="input.bypass.voltage",
623  translation_key="input_bypass_voltage",
624  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
625  device_class=SensorDeviceClass.VOLTAGE,
626  state_class=SensorStateClass.MEASUREMENT,
627  entity_category=EntityCategory.DIAGNOSTIC,
628  entity_registry_enabled_default=False,
629  ),
630  "input.bypass.L1-N.voltage": SensorEntityDescription(
631  key="input.bypass.L1-N.voltage",
632  translation_key="input_bypass_l1_n_voltage",
633  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
634  device_class=SensorDeviceClass.VOLTAGE,
635  state_class=SensorStateClass.MEASUREMENT,
636  entity_category=EntityCategory.DIAGNOSTIC,
637  entity_registry_enabled_default=False,
638  ),
639  "input.bypass.L2-N.voltage": SensorEntityDescription(
640  key="input.bypass.L2-N.voltage",
641  translation_key="input_bypass_l2_n_voltage",
642  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
643  device_class=SensorDeviceClass.VOLTAGE,
644  state_class=SensorStateClass.MEASUREMENT,
645  entity_category=EntityCategory.DIAGNOSTIC,
646  entity_registry_enabled_default=False,
647  ),
648  "input.bypass.L3-N.voltage": SensorEntityDescription(
649  key="input.bypass.L3-N.voltage",
650  translation_key="input_bypass_l3_n_voltage",
651  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
652  device_class=SensorDeviceClass.VOLTAGE,
653  state_class=SensorStateClass.MEASUREMENT,
654  entity_category=EntityCategory.DIAGNOSTIC,
655  entity_registry_enabled_default=False,
656  ),
657  "input.current": SensorEntityDescription(
658  key="input.current",
659  translation_key="input_current",
660  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
661  device_class=SensorDeviceClass.CURRENT,
662  state_class=SensorStateClass.MEASUREMENT,
663  entity_registry_enabled_default=False,
664  ),
665  "input.L1.current": SensorEntityDescription(
666  key="input.L1.current",
667  translation_key="input_l1_current",
668  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
669  device_class=SensorDeviceClass.CURRENT,
670  state_class=SensorStateClass.MEASUREMENT,
671  entity_category=EntityCategory.DIAGNOSTIC,
672  entity_registry_enabled_default=False,
673  ),
674  "input.L2.current": SensorEntityDescription(
675  key="input.L2.current",
676  translation_key="input_l2_current",
677  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
678  device_class=SensorDeviceClass.CURRENT,
679  state_class=SensorStateClass.MEASUREMENT,
680  entity_category=EntityCategory.DIAGNOSTIC,
681  entity_registry_enabled_default=False,
682  ),
683  "input.L3.current": SensorEntityDescription(
684  key="input.L3.current",
685  translation_key="input_l3_current",
686  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
687  device_class=SensorDeviceClass.CURRENT,
688  state_class=SensorStateClass.MEASUREMENT,
689  entity_category=EntityCategory.DIAGNOSTIC,
690  entity_registry_enabled_default=False,
691  ),
692  "input.phases": SensorEntityDescription(
693  key="input.phases",
694  translation_key="input_phases",
695  entity_category=EntityCategory.DIAGNOSTIC,
696  entity_registry_enabled_default=False,
697  ),
698  "input.realpower": SensorEntityDescription(
699  key="input.realpower",
700  translation_key="input_realpower",
701  native_unit_of_measurement=UnitOfPower.WATT,
702  device_class=SensorDeviceClass.POWER,
703  state_class=SensorStateClass.MEASUREMENT,
704  entity_category=EntityCategory.DIAGNOSTIC,
705  entity_registry_enabled_default=False,
706  ),
707  "input.L1.realpower": SensorEntityDescription(
708  key="input.L1.realpower",
709  translation_key="input_l1_realpower",
710  native_unit_of_measurement=UnitOfPower.WATT,
711  device_class=SensorDeviceClass.POWER,
712  state_class=SensorStateClass.MEASUREMENT,
713  entity_category=EntityCategory.DIAGNOSTIC,
714  entity_registry_enabled_default=False,
715  ),
716  "input.L2.realpower": SensorEntityDescription(
717  key="input.L2.realpower",
718  translation_key="input_l2_realpower",
719  native_unit_of_measurement=UnitOfPower.WATT,
720  device_class=SensorDeviceClass.POWER,
721  state_class=SensorStateClass.MEASUREMENT,
722  entity_category=EntityCategory.DIAGNOSTIC,
723  entity_registry_enabled_default=False,
724  ),
725  "input.L3.realpower": SensorEntityDescription(
726  key="input.L3.realpower",
727  translation_key="input_l3_realpower",
728  native_unit_of_measurement=UnitOfPower.WATT,
729  device_class=SensorDeviceClass.POWER,
730  state_class=SensorStateClass.MEASUREMENT,
731  entity_category=EntityCategory.DIAGNOSTIC,
732  entity_registry_enabled_default=False,
733  ),
734  "output.power.nominal": SensorEntityDescription(
735  key="output.power.nominal",
736  translation_key="output_power_nominal",
737  native_unit_of_measurement=UnitOfApparentPower.VOLT_AMPERE,
738  device_class=SensorDeviceClass.APPARENT_POWER,
739  entity_category=EntityCategory.DIAGNOSTIC,
740  entity_registry_enabled_default=False,
741  ),
742  "output.L1.power.percent": SensorEntityDescription(
743  key="output.L1.power.percent",
744  translation_key="output_l1_power_percent",
745  native_unit_of_measurement=PERCENTAGE,
746  entity_category=EntityCategory.DIAGNOSTIC,
747  entity_registry_enabled_default=False,
748  ),
749  "output.L2.power.percent": SensorEntityDescription(
750  key="output.L2.power.percent",
751  translation_key="output_l2_power_percent",
752  native_unit_of_measurement=PERCENTAGE,
753  entity_category=EntityCategory.DIAGNOSTIC,
754  entity_registry_enabled_default=False,
755  ),
756  "output.L3.power.percent": SensorEntityDescription(
757  key="output.L3.power.percent",
758  translation_key="output_l3_power_percent",
759  native_unit_of_measurement=PERCENTAGE,
760  entity_category=EntityCategory.DIAGNOSTIC,
761  entity_registry_enabled_default=False,
762  ),
763  "output.current": SensorEntityDescription(
764  key="output.current",
765  translation_key="output_current",
766  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
767  device_class=SensorDeviceClass.CURRENT,
768  state_class=SensorStateClass.MEASUREMENT,
769  entity_category=EntityCategory.DIAGNOSTIC,
770  entity_registry_enabled_default=False,
771  ),
772  "output.current.nominal": SensorEntityDescription(
773  key="output.current.nominal",
774  translation_key="output_current_nominal",
775  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
776  device_class=SensorDeviceClass.CURRENT,
777  entity_category=EntityCategory.DIAGNOSTIC,
778  entity_registry_enabled_default=False,
779  ),
780  "output.L1.current": SensorEntityDescription(
781  key="output.L1.current",
782  translation_key="output_l1_current",
783  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
784  device_class=SensorDeviceClass.CURRENT,
785  state_class=SensorStateClass.MEASUREMENT,
786  entity_category=EntityCategory.DIAGNOSTIC,
787  entity_registry_enabled_default=False,
788  ),
789  "output.L2.current": SensorEntityDescription(
790  key="output.L2.current",
791  translation_key="output_l2_current",
792  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
793  device_class=SensorDeviceClass.CURRENT,
794  state_class=SensorStateClass.MEASUREMENT,
795  entity_category=EntityCategory.DIAGNOSTIC,
796  entity_registry_enabled_default=False,
797  ),
798  "output.L3.current": SensorEntityDescription(
799  key="output.L3.current",
800  translation_key="output_l3_current",
801  native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
802  device_class=SensorDeviceClass.CURRENT,
803  state_class=SensorStateClass.MEASUREMENT,
804  entity_category=EntityCategory.DIAGNOSTIC,
805  entity_registry_enabled_default=False,
806  ),
807  "output.voltage": SensorEntityDescription(
808  key="output.voltage",
809  translation_key="output_voltage",
810  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
811  device_class=SensorDeviceClass.VOLTAGE,
812  state_class=SensorStateClass.MEASUREMENT,
813  ),
814  "output.voltage.nominal": SensorEntityDescription(
815  key="output.voltage.nominal",
816  translation_key="output_voltage_nominal",
817  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
818  device_class=SensorDeviceClass.VOLTAGE,
819  entity_category=EntityCategory.DIAGNOSTIC,
820  entity_registry_enabled_default=False,
821  ),
822  "output.L1-N.voltage": SensorEntityDescription(
823  key="output.L1-N.voltage",
824  translation_key="output_l1_n_voltage",
825  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
826  device_class=SensorDeviceClass.VOLTAGE,
827  state_class=SensorStateClass.MEASUREMENT,
828  entity_category=EntityCategory.DIAGNOSTIC,
829  entity_registry_enabled_default=False,
830  ),
831  "output.L2-N.voltage": SensorEntityDescription(
832  key="output.L2-N.voltage",
833  translation_key="output_l2_n_voltage",
834  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
835  device_class=SensorDeviceClass.VOLTAGE,
836  state_class=SensorStateClass.MEASUREMENT,
837  entity_category=EntityCategory.DIAGNOSTIC,
838  entity_registry_enabled_default=False,
839  ),
840  "output.L3-N.voltage": SensorEntityDescription(
841  key="output.L3-N.voltage",
842  translation_key="output_l3_n_voltage",
843  native_unit_of_measurement=UnitOfElectricPotential.VOLT,
844  device_class=SensorDeviceClass.VOLTAGE,
845  state_class=SensorStateClass.MEASUREMENT,
846  entity_category=EntityCategory.DIAGNOSTIC,
847  entity_registry_enabled_default=False,
848  ),
849  "output.frequency": SensorEntityDescription(
850  key="output.frequency",
851  translation_key="output_frequency",
852  native_unit_of_measurement=UnitOfFrequency.HERTZ,
853  device_class=SensorDeviceClass.FREQUENCY,
854  state_class=SensorStateClass.MEASUREMENT,
855  entity_category=EntityCategory.DIAGNOSTIC,
856  entity_registry_enabled_default=False,
857  ),
858  "output.frequency.nominal": SensorEntityDescription(
859  key="output.frequency.nominal",
860  translation_key="output_frequency_nominal",
861  native_unit_of_measurement=UnitOfFrequency.HERTZ,
862  device_class=SensorDeviceClass.FREQUENCY,
863  entity_category=EntityCategory.DIAGNOSTIC,
864  entity_registry_enabled_default=False,
865  ),
866  "output.phases": SensorEntityDescription(
867  key="output.phases",
868  translation_key="output_phases",
869  entity_category=EntityCategory.DIAGNOSTIC,
870  entity_registry_enabled_default=False,
871  ),
872  "output.power": SensorEntityDescription(
873  key="output.power",
874  translation_key="output_power",
875  native_unit_of_measurement=UnitOfApparentPower.VOLT_AMPERE,
876  device_class=SensorDeviceClass.APPARENT_POWER,
877  state_class=SensorStateClass.MEASUREMENT,
878  entity_category=EntityCategory.DIAGNOSTIC,
879  entity_registry_enabled_default=False,
880  ),
881  "output.realpower": SensorEntityDescription(
882  key="output.realpower",
883  translation_key="output_realpower",
884  native_unit_of_measurement=UnitOfPower.WATT,
885  device_class=SensorDeviceClass.POWER,
886  state_class=SensorStateClass.MEASUREMENT,
887  entity_category=EntityCategory.DIAGNOSTIC,
888  entity_registry_enabled_default=False,
889  ),
890  "output.realpower.nominal": SensorEntityDescription(
891  key="output.realpower.nominal",
892  translation_key="output_realpower_nominal",
893  native_unit_of_measurement=UnitOfPower.WATT,
894  device_class=SensorDeviceClass.POWER,
895  entity_category=EntityCategory.DIAGNOSTIC,
896  entity_registry_enabled_default=False,
897  ),
898  "output.L1.realpower": SensorEntityDescription(
899  key="output.L1.realpower",
900  translation_key="output_l1_realpower",
901  native_unit_of_measurement=UnitOfPower.WATT,
902  device_class=SensorDeviceClass.POWER,
903  state_class=SensorStateClass.MEASUREMENT,
904  entity_category=EntityCategory.DIAGNOSTIC,
905  entity_registry_enabled_default=False,
906  ),
907  "output.L2.realpower": SensorEntityDescription(
908  key="output.L2.realpower",
909  translation_key="output_l2_realpower",
910  native_unit_of_measurement=UnitOfPower.WATT,
911  device_class=SensorDeviceClass.POWER,
912  state_class=SensorStateClass.MEASUREMENT,
913  entity_category=EntityCategory.DIAGNOSTIC,
914  entity_registry_enabled_default=False,
915  ),
916  "output.L3.realpower": SensorEntityDescription(
917  key="output.L3.realpower",
918  translation_key="output_l3_realpower",
919  native_unit_of_measurement=UnitOfPower.WATT,
920  device_class=SensorDeviceClass.POWER,
921  state_class=SensorStateClass.MEASUREMENT,
922  entity_category=EntityCategory.DIAGNOSTIC,
923  entity_registry_enabled_default=False,
924  ),
925  "ambient.humidity": SensorEntityDescription(
926  key="ambient.humidity",
927  translation_key="ambient_humidity",
928  native_unit_of_measurement=PERCENTAGE,
929  device_class=SensorDeviceClass.HUMIDITY,
930  state_class=SensorStateClass.MEASUREMENT,
931  entity_category=EntityCategory.DIAGNOSTIC,
932  ),
933  "ambient.temperature": SensorEntityDescription(
934  key="ambient.temperature",
935  translation_key="ambient_temperature",
936  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
937  device_class=SensorDeviceClass.TEMPERATURE,
938  state_class=SensorStateClass.MEASUREMENT,
939  entity_category=EntityCategory.DIAGNOSTIC,
940  ),
941  "watts": SensorEntityDescription(
942  key="watts",
943  translation_key="watts",
944  native_unit_of_measurement=UnitOfPower.WATT,
945  device_class=SensorDeviceClass.POWER,
946  state_class=SensorStateClass.MEASUREMENT,
947  ),
948 }
949 
950 
951 def _get_nut_device_info(data: PyNUTData) -> DeviceInfo:
952  """Return a DeviceInfo object filled with NUT device info."""
953  nut_dev_infos = asdict(data.device_info)
954  nut_infos = {
955  info_key: nut_dev_infos[nut_key]
956  for nut_key, info_key in NUT_DEV_INFO_TO_DEV_INFO.items()
957  if nut_dev_infos[nut_key] is not None
958  }
959 
960  return cast(DeviceInfo, nut_infos)
961 
962 
964  hass: HomeAssistant,
965  config_entry: NutConfigEntry,
966  async_add_entities: AddEntitiesCallback,
967 ) -> None:
968  """Set up the NUT sensors."""
969 
970  pynut_data = config_entry.runtime_data
971  coordinator = pynut_data.coordinator
972  data = pynut_data.data
973  unique_id = pynut_data.unique_id
974  status = coordinator.data
975 
976  resources = [sensor_id for sensor_id in SENSOR_TYPES if sensor_id in status]
977  # Display status is a special case that falls back to the status value
978  # of the UPS instead.
979  if KEY_STATUS in resources:
980  resources.append(KEY_STATUS_DISPLAY)
981 
983  NUTSensor(
984  coordinator,
985  SENSOR_TYPES[sensor_type],
986  data,
987  unique_id,
988  )
989  for sensor_type in resources
990  )
991 
992 
993 class NUTSensor(CoordinatorEntity[DataUpdateCoordinator[dict[str, str]]], SensorEntity):
994  """Representation of a sensor entity for NUT status values."""
995 
996  _attr_has_entity_name = True
997 
998  def __init__(
999  self,
1000  coordinator: DataUpdateCoordinator[dict[str, str]],
1001  sensor_description: SensorEntityDescription,
1002  data: PyNUTData,
1003  unique_id: str,
1004  ) -> None:
1005  """Initialize the sensor."""
1006  super().__init__(coordinator)
1007  self.entity_descriptionentity_description = sensor_description
1008 
1009  device_name = data.name.title()
1010  self._attr_unique_id_attr_unique_id = f"{unique_id}_{sensor_description.key}"
1011  self._attr_device_info_attr_device_info = DeviceInfo(
1012  identifiers={(DOMAIN, unique_id)},
1013  name=device_name,
1014  )
1015  self._attr_device_info_attr_device_info.update(_get_nut_device_info(data))
1016 
1017  @property
1018  def native_value(self) -> str | None:
1019  """Return entity state from ups."""
1020  status = self.coordinator.data
1021  if self.entity_descriptionentity_description.key == KEY_STATUS_DISPLAY:
1022  return _format_display_state(status)
1023  return status.get(self.entity_descriptionentity_description.key)
1024 
1025 
1026 def _format_display_state(status: dict[str, str]) -> str:
1027  """Return UPS display state."""
1028  try:
1029  return " ".join(STATE_TYPES[state] for state in status[KEY_STATUS].split())
1030  except KeyError:
1031  return STATE_UNKNOWN
None __init__(self, DataUpdateCoordinator[dict[str, str]] coordinator, SensorEntityDescription sensor_description, PyNUTData data, str unique_id)
Definition: sensor.py:1004
IssData update(pyiss.ISS iss)
Definition: __init__.py:33
DeviceInfo _get_nut_device_info(PyNUTData data)
Definition: sensor.py:951
None async_setup_entry(HomeAssistant hass, NutConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:967
str _format_display_state(dict[str, str] status)
Definition: sensor.py:1026