From fa69b72393a0566116e33b01c08d86da6c26e844 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Kl=C3=BCter?= Date: Mon, 28 Jun 2021 08:26:17 +0200 Subject: [PATCH] Add Statusscreen --- statusscreen.py | 88 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 statusscreen.py diff --git a/statusscreen.py b/statusscreen.py new file mode 100644 index 0000000..020eb35 --- /dev/null +++ b/statusscreen.py @@ -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