Add Statusscreen

This commit is contained in:
Philipp Klüter
2021-06-28 08:26:17 +02:00
commit fa69b72393

88
statusscreen.py Normal file
View File

@@ -0,0 +1,88 @@
"""
Demonstrates a dynamic Layout
"""
from datetime import datetime
from time import sleep
from typing import cast
from requests.api import request
from rich.align import Align
from rich.console import Console
from rich.layout import Layout
from rich.live import Live
from rich.text import Text
from rich.panel import Panel
import requests
import json
# Init Logger
import logging
import logging.handlers
from logging.handlers import SysLogHandler
logger = logging.getLogger('syslogger')
logger.setLevel(logging.DEBUG)
handler = logging.handlers.SysLogHandler(
facility=SysLogHandler.LOG_DAEMON, address='/dev/log')
logger.addHandler(handler)
API_KEY = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI4ODcyMmYzYmNmMzY0ZDZlYjgxNWQyZDkwMDU1NzlkYSIsImlhdCI6MTYyMTgwMzk4NCwiZXhwIjoxOTM3MTYzOTg0fQ.z_Tfy8jT37Hcss-rcxd9XinHhXvvYK7BL_n0Jirv3v4"
def getKimaiState():
# Get current log
url = "https://home.pklueter.de/api/states/sensor.current_work"
headers = {
"Authorization": "Bearer " + API_KEY,
}
try:
resp = requests.get(url, headers=headers)
state = resp.json()["state"]
return state
except json.decoder.JSONDecodeError as err:
logger.error("Error during JSON Decode: " + err)
return "Could not retreive data"
except requests.exceptions.ConnectionError as err:
logger.error("Connection error: " + err)
return "Could not retreive data"
except KeyboardInterrupt:
pass
except Exception as err:
logger.error("A uncauth error occured: " + err)
return "Could not retreive data"
class Clock:
"""Renders the time in the center of the screen."""
def __rich__(self) -> Text:
return Text(datetime.now().ctime(), style="bold magenta", justify="center")
console = Console()
layout = Layout()
layout.split(
Layout(name="header", size=1),
Layout(name="Zeiterfassung", size=3),
Layout(name="Log"),
)
layout["header"].update(Clock())
layout["Zeiterfassung"].update(
Panel("Zeiterfassung: " + getKimaiState()))
with Live(layout, screen=True, redirect_stderr=False) as live:
try:
while True:
layout["Zeiterfassung"].update(
Panel("Zeiterfassung: " + getKimaiState()))
sleep(15)
except KeyboardInterrupt:
pass