Merge branch 'main' of https://code.karsttech.com/jeremy/FW_LED_System_Monitor
This commit is contained in:
commit
27c3ff40e1
1 changed files with 55 additions and 3 deletions
58
monitors.py
58
monitors.py
|
@ -16,6 +16,14 @@ class DiskMonitor:
|
||||||
self.max_history_size = hysterisis_time
|
self.max_history_size = hysterisis_time
|
||||||
|
|
||||||
def get(self):
|
def get(self):
|
||||||
|
"""
|
||||||
|
Gets the percentage of the system's disk throughput for reading and writing.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A tuple containing the percentages of the system's disk throughput for reading
|
||||||
|
and writing data as floats between 0.0 and 1.0. This is a ratio based on
|
||||||
|
the highest disk throughput rate over the history of the monitor.
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
disk_io = psutil.disk_io_counters()
|
disk_io = psutil.disk_io_counters()
|
||||||
read_usage = disk_io.read_bytes
|
read_usage = disk_io.read_bytes
|
||||||
|
@ -52,6 +60,14 @@ class NetworkMonitor:
|
||||||
self.max_history_size = hysterisis_time
|
self.max_history_size = hysterisis_time
|
||||||
|
|
||||||
def get(self):
|
def get(self):
|
||||||
|
"""
|
||||||
|
Gets the percentage of the system's network usage.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A tuple containing the percentages of the system's network usage for sending
|
||||||
|
and receiving data as floats between 0.0 and 1.0. This is a ratio based on
|
||||||
|
the highest network usage rate over the history of the monitor.
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
net_io = psutil.net_io_counters()
|
net_io = psutil.net_io_counters()
|
||||||
sent_usage = net_io.bytes_sent
|
sent_usage = net_io.bytes_sent
|
||||||
|
@ -86,6 +102,12 @@ class CPUMonitor:
|
||||||
self.max_history_size = hysterisis_time
|
self.max_history_size = hysterisis_time
|
||||||
|
|
||||||
def get(self):
|
def get(self):
|
||||||
|
"""
|
||||||
|
Gets the percentage of the system's CPU usage per core.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A list of values between 0.0 and 1.0 which is scaled to the CPU usage per core
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
cpu_usage = psutil.cpu_percent(percpu=True)
|
cpu_usage = psutil.cpu_percent(percpu=True)
|
||||||
for i in range(self.cpu_count):
|
for i in range(self.cpu_count):
|
||||||
|
@ -108,12 +130,24 @@ class CPUMonitor:
|
||||||
class MemoryMonitor:
|
class MemoryMonitor:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get():
|
def get():
|
||||||
|
"""
|
||||||
|
Gets the percentage of the system's memory usage.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A value between 0.0 and 1.0 which is scaled to the memory usage
|
||||||
|
"""
|
||||||
return psutil.virtual_memory().percent / 100.0
|
return psutil.virtual_memory().percent / 100.0
|
||||||
|
|
||||||
|
|
||||||
class BatteryMonitor:
|
class BatteryMonitor:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get():
|
def get():
|
||||||
|
"""
|
||||||
|
Gets the percentage of the battery's charge and whether it is plugged in.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A tuple containing the battery percentage as a float between 0.0 and 1.0 and whether it is plugged in
|
||||||
|
"""
|
||||||
battery = psutil.sensors_battery()
|
battery = psutil.sensors_battery()
|
||||||
if battery is not None:
|
if battery is not None:
|
||||||
battery_percentage = battery.percent / 100.0
|
battery_percentage = battery.percent / 100.0
|
||||||
|
@ -126,16 +160,34 @@ class BatteryMonitor:
|
||||||
|
|
||||||
|
|
||||||
def get_monitor_brightness():
|
def get_monitor_brightness():
|
||||||
|
"""
|
||||||
|
Gets the brightness of the main laptop display so that we can scale the LED Matrix
|
||||||
|
brightness to match. Handles operating system or configuration specific logic to
|
||||||
|
retrieve the brightness value.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A value between 0.0 and 1.0 which is scaled to the monitor's brightness
|
||||||
|
"""
|
||||||
|
brightness_value = 1.0
|
||||||
try:
|
try:
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
return wmi.WMI(namespace='wmi').WmiMonitorBrightness()[0].CurrentBrightness / 100.0
|
return wmi.WMI(namespace='wmi').WmiMonitorBrightness()[0].CurrentBrightness / 100.0
|
||||||
else:
|
else:
|
||||||
try: # First try the dGPU brightness
|
try: # First try the dGPU brightness
|
||||||
return int(open('/sys/class/backlight/amdgpu_bl2/brightness', 'r').read()) / 255.0
|
brightness_value = int(open('/sys/class/backlight/amdgpu_bl2/brightness', 'r').read()) / 255.0
|
||||||
except: # If that doesn't work, try the iGPU brightness
|
except: # If that doesn't work, try the iGPU brightness
|
||||||
return int(open('/sys/class/backlight/amdgpu_bl1/brightness', 'r').read()) / 255.0
|
brightness_value = int(open('/sys/class/backlight/amdgpu_bl1/brightness', 'r').read()) / 255.0
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return 1.0
|
print(f"Error in get_monitor_brightness(): {e}")
|
||||||
|
|
||||||
|
if brightness_value < 0.0:
|
||||||
|
print(f"Invalid brightness value returned by get_monitor_brightness(): {brightness_value}")
|
||||||
|
brightness_value = 0.0
|
||||||
|
elif brightness_value > 1.0:
|
||||||
|
print(f"Invalid brightness value returned by get_monitor_brightness(): {brightness_value}")
|
||||||
|
brightness_value = 1.0
|
||||||
|
|
||||||
|
return brightness_value
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print(get_monitor_brightness())
|
print(get_monitor_brightness())
|
Loading…
Add table
Reference in a new issue