#!/usr/bin/env python3 import datetime import logging import os import json from dateutil.parser import parse from typing import Any, 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 ratago_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: Dict[str, Dict[str, Any]] = { "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: cert_path = None key_path = None home = os.environ.get('HOME', '/home/scott') filename = f'{home}/gasch_certificate/dmzjail-scott-selfsigned.crt' if os.exists(filename): cert_path = filename filename = f'{home}/gasch_certificate/dmzjail-scott-selfsigned.key' if os.exists(filename): key_path = filename 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, cert=(cert_path, key_path), timeout=3.0, ) if r.ok: j = json.loads(r.content.decode()) 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"""