parse UPS data

This commit is contained in:
saqriphnix 2024-08-16 23:08:28 +03:00
parent aac320a0c8
commit fd2624040c
3 changed files with 53 additions and 5 deletions

View file

@ -1,7 +1,10 @@
import subprocess
from dataclasses import dataclass
from psutil import cpu_percent, sensors_temperatures, virtual_memory
from .enums import UPSStatus
@dataclass
class TemperatureSensor:
@ -27,6 +30,14 @@ class RamSensor:
critical_avail: int = 2 * 1024**3
@dataclass
class UPSSensor:
ups_status: UPSStatus = None
battery_charge_percentage: int = None
battery_warning_percentage: int = 20
battery_critical_percentage: int = 10
class Sensors:
@staticmethod
def get_temperatures() -> dict[str, list[TemperatureSensor]]:
@ -96,10 +107,26 @@ class Sensors:
@staticmethod
def get_ram() -> RamSensor:
ram = virtual_memory()
return RamSensor(current_avail=ram.available,
current_avail_percentage=ram.percent)
return RamSensor(current_avail=ram.available, current_avail_percentage=ram.percent)
@staticmethod
def get_ups() -> UPSSensor:
raw_data = subprocess.run(["upsc", "cp1300"], stdout=subprocess.PIPE, encoding="utf-8")
if __name__ == "__main__":
for i in Sensors.get_temperatures():
print(i)
sensor_data = UPSSensor()
for line in raw_data.stdout.splitlines():
sensor, value = line.split(": ")[:2]
match sensor:
case "battery.charge":
sensor_data.battery_charge_percentage = int(value)
case "battery.charge.low":
sensor_data.battery_critical_percentage = int(value)
case "battery.charge.warning":
sensor_data.battery_warning_percentage = int(value)
case "ups.status":
sensor_data.ups_status = UPSStatus(value)
case _:
...
return sensor_data