X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=ratago_renderer.py;fp=ratago_renderer.py;h=4e33ed69d3839def9e4842027f6f579cd311c585;hb=429de391ecf48e70b6b81fa7b239c5720c7da371;hp=0000000000000000000000000000000000000000;hpb=86d6fe82b8475837f9e8e46254f2bf8780fd863e;p=kiosk.git diff --git a/ratago_renderer.py b/ratago_renderer.py new file mode 100644 index 0000000..4e33ed6 --- /dev/null +++ b/ratago_renderer.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python3 + +import datetime +import logging +import json +from dateutil.parser import parse +from typing import Dict, Optional + +import requests +from pyutils.datetimes import datetime_utils + +import file_writer +import globals +import kiosk_constants +import kiosk_secrets as secrets +import renderer + + +logger = logging.getLogger(__name__) + + +class garage_door_renderer(renderer.abstaining_renderer): + def __init__(self, name_to_timeout_dict: Dict[str, int]) -> None: + super().__init__(name_to_timeout_dict) + self.last_update: Optional[datetime.datetime] = None + self.doors = { + "cover.ratgdo_middle_door_door": {"state": "unknown"}, + "cover.ratgdo_near_house_door": {"state": "unknown"}, + "cover.ratgdo_shop_door": {"state": "unknown"}, + } + + def debug_prefix(self) -> str: + return "ratago" + + def periodic_render(self, key: str) -> bool: + if key == "Poll Home Assistant": + return self.poll_home_assistant() + elif key == "Update Page": + return self.update_page() + else: + raise Exception("Unknown operaiton") + + def poll_home_assistant(self) -> bool: + key = secrets.HOMEASSISTANT_API_KEY + headers = { + "Authorization": f"Bearer {key}", + "Content-Type": "application/json", + } + for door in self.doors.keys(): + try: + r = requests.get( + f"https://home.acknak.org/api/states/{door}", + headers=headers, + timeout=3.0, + ) + if r.ok: + j = json.loads(r.content.decode()) + logger.debug(j) + self.doors[door] = j + else: + logger.warning("Unable to get state of garage door {door}, using 'unknown'") + except Exception: + logger.exception("Unable to get state of garage door {door}, using 'unknown'") + self.last_update = datetime_utils.now_pacific() + return True + + def update_page(self) -> bool: + with file_writer.file_writer(kiosk_constants.ratago_pagename) as f: + f.write( + f""" +