web-monitor/TablePI.py
2025-06-25 21:41:36 -04:00

52 lines
1.4 KiB
Python

from networktables import NetworkTables
import time
import psutil
import argparse
parser = argparse.ArgumentParser(description="Run TablePi client")
parser.add_argument(
'--table',
type=str,
default='PiStatus',
help='Name of the NetworkTable (default: %(default)s)'
)
parser.add_argument(
'--ip',
type=str,
default='10.26.48.2',
help='IP address of the server (default: %(default)s)'
)
args = parser.parse_args()
table_name = args.table
server_ip = args.ip
table = NetworkTables.getTable(table_name)
NetworkTables.initialize(server=server_ip)
print ("Sending data to server")
print (server_ip, table_name)
while True:
cpu = psutil.cpu_percent()
temps = psutil.sensors_temperatures()
mem = psutil.virtual_memory()
cputemp = "Unavailable"
for label in ["coretemp", "cpu-thermal", "k10temp", "cpu_thermal"]:
if label in temps and temps[label]:
cputemp = f"{temps[label][0].current:.1f}"
break
else:
# to force it to work when on PI
try:
with open("/sys/class/thermal/thermal_zone0/temp") as f:
cputemp = f"{int(f.read()) / 1000:.1f}"
except:
pass
table.putNumber("CPU Usage", cpu)
table.putNumber("Temperature", float(cputemp) if cputemp != "Unavailable" else -1)
table.putNumber("Memory", mem.used // (1024**2))
time.sleep(1)