@@ -34,6 +34,8 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
34
34
ups_protocol = config [CONF_PROTOCOL ]
35
35
resources = config [CONF_RESOURCES ]
36
36
scan_interval = config .get (CONF_SCAN_INTERVAL , timedelta (seconds = 30 ))
37
+ low_battery_voltage = config ["low_battery_voltage" ]
38
+ full_battery_voltage = config ["full_battery_voltage" ]
37
39
38
40
coordinator = UPSDataUpdateCoordinator (
39
41
hass ,
@@ -43,6 +45,8 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
43
45
ups_host = ups_host ,
44
46
ups_port = ups_port ,
45
47
ups_protocol = ups_protocol ,
48
+ low_battery_voltage = low_battery_voltage ,
49
+ full_battery_voltage = full_battery_voltage ,
46
50
)
47
51
48
52
await coordinator .async_config_entry_first_refresh ()
@@ -64,12 +68,23 @@ class UPSDataUpdateCoordinator(DataUpdateCoordinator):
64
68
"""Class to manage fetching UPS data."""
65
69
66
70
def __init__ (
67
- self , hass , logger , name , update_interval , ups_host , ups_port , ups_protocol
71
+ self ,
72
+ hass ,
73
+ logger ,
74
+ name ,
75
+ update_interval ,
76
+ ups_host ,
77
+ ups_port ,
78
+ ups_protocol ,
79
+ low_battery_voltage ,
80
+ full_battery_voltage ,
68
81
):
69
82
"""Initialize."""
70
83
self .ups_host = ups_host
71
84
self .ups_port = ups_port
72
85
self .ups_protocol = ups_protocol
86
+ self .low_battery_voltage = low_battery_voltage
87
+ self .full_battery_voltage = full_battery_voltage
73
88
74
89
super ().__init__ (hass , logger , name = name , update_interval = update_interval )
75
90
@@ -101,6 +116,15 @@ async def _async_update_data_megatec_q1(self, reader, writer):
101
116
"load" : float (values [3 ]),
102
117
"frequency" : float (values [4 ]),
103
118
"battery_voltage" : float (values [5 ]),
119
+ "battery_level" : max (
120
+ 0 ,
121
+ min (
122
+ 1 ,
123
+ (float (values [5 ]) - self .low_battery_voltage )
124
+ / (self .full_battery_voltage - self .low_battery_voltage ),
125
+ ),
126
+ )
127
+ * 100 ,
104
128
"temperature" : float (values [6 ]),
105
129
}
106
130
@@ -161,6 +185,12 @@ def state(self):
161
185
@property
162
186
def icon (self ):
163
187
"""Icon to use in the frontend, if any."""
188
+ if self ._sensor_type == "battery_level" :
189
+ if self .state == 100 :
190
+ return "mdi:battery"
191
+ if self .state < 10 :
192
+ return "mdi:battery-alert-variant-outline"
193
+ return f"mdi:battery-{ int (self .state / 10 ) * 10 } "
164
194
return self ._sensor_icon
165
195
166
196
@property
0 commit comments