import serial import requests import os from dotenv import load_dotenv import logging load_dotenv() ########################################## #Logging if os.environ['logging_level'] == "DEBUG": loglevel = logging.DEBUG elif os.environ['logging_level'] == "INFO": loglevel = logging.INFO logger = logging.getLogger('Power Monitor') logger.setLevel(loglevel) #Console Handler ch = logging.StreamHandler() ch.setLevel(loglevel) #Formatter formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s') formatter.default_msec_format = None ch.setFormatter(formatter) logger.addHandler(ch) ########################################## ntfy_token = os.environ['NTFY_Token'] device_name = os.environ['device_name'] shutdown_timer = int(os.environ['shutdown_timer']) try: with serial.Serial(device_name, 115200, timeout=1) as ser: inverter_offline_counter = 0 while True: if ser.readline().decode().strip() == "0": logger.debug("Inverter Online") inverter_offline_counter = 0 elif inverter_offline_counter >= shutdown_timer: break else: inverter_offline_counter += 1 logger.info(f"Running on UPS reserve, offline for {inverter_offline_counter}s") logger.info(f"Inverter offline for {shutdown_timer} seconds") requests.post("https://ntfy.fieryeagle.org/Internet-Alerts", data="Inverter offline, shutting down".encode(encoding='utf-8'), headers={ "Title": "Hydrogen running on reserve power", "Authorization": f"Bearer {ntfy_token}" } ) os.system("shutdown now") except KeyboardInterrupt: logger.info("Exiting gracefully") exit()