Compare commits
7 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
296c67a2bf | ||
![]() |
7cb7a29262 | ||
![]() |
63bb10d53e | ||
![]() |
27c3ff40e1 | ||
![]() |
6c22c5ff7d | ||
c159417b93 | |||
750758ba84 |
5 changed files with 53 additions and 6 deletions
|
@ -8,7 +8,7 @@ from commands import Commands, send_command
|
|||
|
||||
# External Dependencies
|
||||
import numpy as np
|
||||
import serial # pyserial
|
||||
import serial # pip install pyserial, apt install python3-serial
|
||||
from serial.tools import list_ports
|
||||
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
sudo apt install python3-serial
|
||||
chmod +x run.sh
|
||||
rm -f fwledmonitor.service || true
|
||||
cat <<EOF >>./fwledmonitor.service
|
||||
|
|
51
monitors.py
51
monitors.py
|
@ -16,6 +16,14 @@ class DiskMonitor:
|
|||
self.max_history_size = hysterisis_time
|
||||
|
||||
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:
|
||||
disk_io = psutil.disk_io_counters()
|
||||
read_usage = disk_io.read_bytes
|
||||
|
@ -52,6 +60,14 @@ class NetworkMonitor:
|
|||
self.max_history_size = hysterisis_time
|
||||
|
||||
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:
|
||||
net_io = psutil.net_io_counters()
|
||||
sent_usage = net_io.bytes_sent
|
||||
|
@ -86,6 +102,12 @@ class CPUMonitor:
|
|||
self.max_history_size = hysterisis_time
|
||||
|
||||
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:
|
||||
cpu_usage = psutil.cpu_percent(percpu=True)
|
||||
for i in range(self.cpu_count):
|
||||
|
@ -108,12 +130,24 @@ class CPUMonitor:
|
|||
class MemoryMonitor:
|
||||
@staticmethod
|
||||
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
|
||||
|
||||
|
||||
class BatteryMonitor:
|
||||
@staticmethod
|
||||
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()
|
||||
if battery is not None:
|
||||
battery_percentage = battery.percent / 100.0
|
||||
|
@ -126,16 +160,25 @@ class BatteryMonitor:
|
|||
|
||||
|
||||
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
|
||||
"""
|
||||
try:
|
||||
if os.name == 'nt':
|
||||
return wmi.WMI(namespace='wmi').WmiMonitorBrightness()[0].CurrentBrightness / 100.0
|
||||
else:
|
||||
try: # First try the dGPU brightness
|
||||
return int(open('/sys/class/backlight/amdgpu_bl2/brightness', 'r').read()) / 255.0
|
||||
except: # If that doesn't work, try the iGPU brightness
|
||||
return int(open('/sys/class/backlight/amdgpu_bl1/brightness', 'r').read()) / 255.0
|
||||
gpu_designator = os.listdir('/sys/class/backlight')[0] # Get the gpu designator
|
||||
brightness_max = int(open(f'/sys/class/backlight/{gpu_designator}/max_brightness', 'r').read())
|
||||
return int(open(f'/sys/class/backlight/{gpu_designator}/brightness', 'r').read()) / brightness_max
|
||||
except Exception as e:
|
||||
print(f"Error in get_monitor_brightness(): {e}")
|
||||
return 1.0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(get_monitor_brightness())
|
3
requirements.txt
Normal file
3
requirements.txt
Normal file
|
@ -0,0 +1,3 @@
|
|||
pyserial
|
||||
numpy
|
||||
wmi # only for windows
|
2
run.sh
2
run.sh
|
@ -1,3 +1,3 @@
|
|||
sudo apt install python3-numpy python3-psutil
|
||||
sudo apt install python3-serial python3-numpy python3-psutil
|
||||
|
||||
python3 ./led_system_monitor.py
|
||||
|
|
Loading…
Add table
Reference in a new issue