Files
Domoticz/batterie2.py
2025-03-06 11:09:58 +01:00

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)