import requests import json import sys import serial #pyserial import time import logging class MsgSender: def __init__(self, token, chat_id): self.token = token self.chat_id = chat_id def sendMessage(self, msg:str): params = {"chat_id": self.chat_id, "text":msg} url = f"https://api.telegram.org/bot{self.token}/sendMessage" message = requests.post(url, params=params) return message def read_serial_blocking(port="COM1", baudrate=115200): with serial.Serial(port, baudrate, timeout=None) as ser: line = ser.readline() # blockiert bis \n return line.decode(errors="replace").rstrip("\r\n") def main(): fn_settings = "settings.json" logging.basicConfig(format='%(asctime)s [%(levelname)s]: %(message)s', level=logging.DEBUG) logging.info("Starting " + __file__) try: logging.info(f"Parsing {fn_settings}") with open(fn_settings) as file: settings = json.loads(file.read()) except Exception as e: logging.error(e) logging.getLogger().setLevel(level=settings['log_level']) msgSender = MsgSender(settings['telegram']['token'], settings['telegram']['chat_id']) next_tx = time.time() + settings['telegram']['tx_iv_s'] while(True): data = read_serial_blocking(settings['serial']['com'],settings['serial']['baud']) serialData = f"{data}°C" #format data here logging.info("Serial rx: %s", serialData) now = time.time() if now >= next_tx: next_tx = time.time() + settings['telegram']['tx_iv_s'] datestr = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(now)) txString = f"{datestr}: {serialData}" logging.info("Telegram tx: %s", txString) if settings['telegram']['active']: retMessage = msgSender.sendMessage(txString) if retMessage.status_code == 200: logging.info("Telegram Info: %d (%s)", retMessage.status_code, retMessage.reason) else: logging.error("%d (%s): %s", retMessage.status_code, retMessage.reason, retMessage.url) if __name__ == "__main__": sys.exit(main())