import logging import datetime from homie.device_base import Device_Base from homie.node.node_base import Node_Base from homie.node.property.property_datetime import Property_DateTime from dsmr_parser.objects import Telegram from node.node_electricitymeter import Node_ElectricityMeter from node.node_gasmeter import Node_GasMeter from app_settings import Settings logger = logging.getLogger(__name__) SETTINGS = Settings() TRANSLATED_MQTT_SETTINGS = { 'MQTT_BROKER': SETTINGS.mqtt_host, 'MQTT_PORT': SETTINGS.mqtt_port, 'MQTT_USERNAME' : SETTINGS.mqtt_username, 'MQTT_PASSWORD' : SETTINGS.mqtt_password, 'MQTT_CLIENT_ID' : "dsmr2mqtt", 'MQTT_SHARE_CLIENT': False, } TRANSLATED_HOMIE_SETTINGS = { 'topic' : SETTINGS.homie_topic, 'fw_name' : SETTINGS.homie_fw_name, 'fw_version' : SETTINGS.homie_fw_version, 'update_interval' : SETTINGS.homie_update_interval, } class Device_DSMR(Device_Base): def __init__(self, device_id=None, name=None, homie_settings=TRANSLATED_HOMIE_SETTINGS, mqtt_settings=TRANSLATED_MQTT_SETTINGS): super().__init__(device_id, name, homie_settings, mqtt_settings) self.dsmrdevice = Node_Base(self, 'dsmrdevice', 'DSMR device', 'status') self.add_node(self.dsmrdevice) self.last_update = Property_DateTime(self.dsmrdevice, id="timestamp", name="Timestamp", settable=False) self.dsmrdevice.add_property(self.last_update) self.electricitymeter = Node_ElectricityMeter(self) self.add_node(self.electricitymeter) self.gasmeter = Node_GasMeter(self) self.add_node(self.gasmeter) self.start() def update(self, telegram: Telegram): self.last_update.value = telegram.P1_MESSAGE_TIMESTAMP.value.strftime("%Y-%m-%dT%H:%M:%S.%f") self.electricitymeter.update(telegram) self.gasmeter.update(telegram)