54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
import logging
|
|
|
|
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)
|