75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
import curses
|
|
import json
|
|
import requests
|
|
import time
|
|
|
|
# URL de l'API
|
|
url = "http://192.168.1.59/getData"
|
|
excluded_keys = {"FW", "PID", "SER#", "TENSIONS", "OR", "HSDS", "XY_ON", "XY_AV", "XY_AC", "XY_AW", "CONS"}
|
|
|
|
def fetch_data(url):
|
|
response = requests.get(url)
|
|
if response.status_code == 200:
|
|
return response.json()
|
|
else:
|
|
return {}
|
|
|
|
def display_headers(screen, keys, max_width):
|
|
screen.clear()
|
|
for idx, key in enumerate(keys):
|
|
if idx * max_width < curses.COLS:
|
|
try:
|
|
screen.addstr(0, idx * max_width, key.ljust(max_width)[:max_width], curses.color_pair(1))
|
|
except curses.error:
|
|
pass
|
|
screen.refresh()
|
|
|
|
def display_data(screen, data, keys, line, max_width):
|
|
for idx, key in enumerate(keys):
|
|
if idx * max_width < curses.COLS:
|
|
value_str = str(data.get(key, ""))
|
|
if key == "PPV" and float(value_str) > 0:
|
|
color = curses.color_pair(3) # Red background for PPV > 0
|
|
else:
|
|
color = curses.color_pair(2) # Default color
|
|
screen.addstr(line, idx * max_width, value_str.ljust(max_width)[:max_width], color)
|
|
|
|
screen.refresh()
|
|
|
|
def main(screen):
|
|
curses.curs_set(0) # Hide the cursor
|
|
screen.nodelay(True) # Don't block waiting for user input
|
|
# Initialize colors
|
|
curses.start_color()
|
|
curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_BLUE) # Header color
|
|
curses.init_pair(2, curses.COLOR_BLACK, curses.COLOR_CYAN) # Data color
|
|
curses.init_pair(3, curses.COLOR_RED, curses.COLOR_CYAN) # PPV > 0 color
|
|
|
|
keys = None
|
|
max_width = 9 # Maximum width for each column
|
|
|
|
line = 1
|
|
while True:
|
|
data = fetch_data(url)
|
|
if line == 1: #keys is None:
|
|
keys = [key for key in data.keys() if key not in excluded_keys]
|
|
display_headers(screen, keys, max_width)
|
|
|
|
try:
|
|
display_data(screen, data, keys, line, max_width)
|
|
except curses.error:
|
|
line = 0
|
|
screen.clear()
|
|
pass
|
|
|
|
line += 1
|
|
|
|
time.sleep(5)
|
|
|
|
if screen.getch() != -1:
|
|
break
|
|
|
|
if __name__ == "__main__":
|
|
curses.wrapper(main)
|
|
|