diff --git a/.gitignore b/.gitignore index 45be8a5..1fbe71f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,6 @@ __pycache__/ *.log # local files +env .env .vscode diff --git a/app.py b/app.py index 95d0f87..c1e6e96 100644 --- a/app.py +++ b/app.py @@ -1,10 +1,11 @@ import os import time +import re import sys import threading import _thread from dsmr_parser import telegram_specifications -from dsmr_parser.clients import SerialReader, SERIAL_SETTINGS_V2_2, SERIAL_SETTINGS_V4, SERIAL_SETTINGS_V5 +from dsmr_parser.clients import SerialReader, SocketReader, SERIAL_SETTINGS_V2_2, SERIAL_SETTINGS_V4, SERIAL_SETTINGS_V5 from app_settings import Settings from device_dsmr import Device_DSMR @@ -41,10 +42,18 @@ def main(): spec = telegram_specifications.V5 device = Device_DSMR("dsmr", name="Digitale Slimme Meter") - serial_reader = SerialReader(cfg.dsmr_port, serial_setup, spec) + if "remote:" not in cfg.dsmr_port: + logger.info(f"using serial port {cfg.dsmr_port}") + reader = SerialReader(cfg.dsmr_port, serial_setup, spec) + else: + result = re.search(r"remote://([^:]+):(.+)", cfg.dsmr_port) + host = result.group(1) + port = int(result.group(2)) + logger.info(f"reading from remote host {host} on port {port}") + reader = SocketReader(host, port, spec) def handle_next_telegram(): - telegram = next(serial_reader.read_as_object()) + telegram = next(reader.read_as_object()) device.update(telegram) logger.info(f"New telegram at {telegram.P1_MESSAGE_TIMESTAMP.value}")