more generic script; can enable zpool or upsc checking only executables; now handle low battery situation; now show battery percentage near bar

This commit is contained in:
Claudio Maradonna 2023-03-24 21:47:45 +01:00
parent 16e030a943
commit a858cc9083
Signed by untrusted user who does not match committer: claudiomaradonna
GPG key ID: 0CBA58694C5680D9

View file

@ -89,7 +89,7 @@ def zpool_print_status():
draw.text((0, s_height - 10), zpool_status_data["errors"], fill=1) draw.text((0, s_height - 10), zpool_status_data["errors"], fill=1)
def ups_print_status(): def upsc_print_status():
ups_name_finder = os.popen('upsc -l 127.0.0.1') ups_name_finder = os.popen('upsc -l 127.0.0.1')
ups_name_finder_output = ups_name_finder.read().split("\n") ups_name_finder_output = ups_name_finder.read().split("\n")
@ -108,39 +108,73 @@ def ups_print_status():
battery_charge = upsc_status_data["battery.charge"] battery_charge = upsc_status_data["battery.charge"]
used_width = draw.textlength("[]%") used_width = draw.textlength("[] "+battery_charge+"%")
bar_width = (128 - used_width) bar_width = (128 - used_width)
real_width = (int(battery_charge) * bar_width) / 100 real_width = (int(battery_charge) * bar_width) / 100
draw.text((0,9), "[", fill=1) draw.text((0,9), "[", fill=1)
draw.rectangle((5,13, real_width, 17), fill=1) draw.rectangle((5,13, real_width, 17), fill=1)
draw.text((bar_width, 9), "]%", fill=1) draw.text((bar_width, 9), "] "+battery_charge+"%", fill=1)
draw.text((0, 20), upsc_status_data["device.model"], fill=1) what_to_show = {
draw.text((0, 28), upsc_status_data["outlet.power"] + "W", fill=1) 'device.model': '%{value}',
draw.text((0, 36), upsc_status_data["output.voltage"] + "V", fill=1) 'outlet.power': '%{value}W',
'output.voltage': '%{value}V'
}
starting_height = 19
if int(battery_charge) <= int(upsc_status_data['battery.charge.low']):
draw.text((0, starting_height + 9), "*********************", fill=1)
draw.text((0, starting_height + 18), "**** BATTERY LOW ****", fill=1)
draw.text((0, starting_height + 27), "*********************", fill=1)
else:
starting_height += 9
for key in what_to_show:
value = what_to_show[key].replace('%{value}', upsc_status_data[key])
draw.text((0, starting_height), value, fill=1)
starting_height += 9
def main(): def main():
if which('zpool') is None: modules_enabled = []
print("Cannot find `zpool` executable.")
if which('zpool') is not None:
modules_enabled.append('zpool')
if which('upsc') is not None:
modules_enabled.append('upsc')
if not modules_enabled:
print("This script cannot run any module; check dependencies")
exit(1) exit(1)
if which('upsc') is None: possibles = globals().copy()
print("Cannot find `upsc` executable.") possibles.update(locals())
exit(1)
start_count = 0 start_count = 0
last_print = ''
while True: while True:
device.clear() module_to_run = modules_enabled[start_count % 2]
method = possibles.get(module_to_run + "_print_status")
if (start_count % 2) == 0: if not method:
zpool_print_status() print("Module "+module_to_run+" not implemented")
exit(1)
else: else:
ups_print_status() if module_to_run != last_print:
device.clear()
method()
last_print = module_to_run
if start_count == (len(modules_enabled) - 1):
start_count = 0
else:
start_count += 1
start_count += 1
time.sleep(5) time.sleep(5)
if __name__ == "__main__": if __name__ == "__main__":