homie dsmr first try

This commit is contained in:
Ard Kuijpers
2020-06-03 21:31:32 +02:00
parent ccf189662d
commit 997ffea4b8
43 changed files with 314 additions and 3226 deletions

View File

@@ -1,12 +1,16 @@
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 import telegram_specifications
from dsmr_parser.clients import SerialReader, SERIAL_SETTINGS_V4
from dsmr_parser.objects import Telegram
from settings import Settings
from node.node_electricitymeter import Node_ElectricityMeter
from node.node_gasmeter import Node_GasMeter
from app_settings import Settings
import logging
logger = logging.getLogger(__name__)
@@ -17,7 +21,7 @@ TRANSLATED_MQTT_SETTINGS = {
'MQTT_PORT': SETTINGS.mqtt_port,
'MQTT_USERNAME' : SETTINGS.mqtt_username,
'MQTT_PASSWORD' : SETTINGS.mqtt_password,
'MQTT_CLIENT_ID' : SETTINGS.hostname,
'MQTT_CLIENT_ID' : "dsmr2mqtt",
'MQTT_SHARE_CLIENT': False,
}
@@ -29,32 +33,22 @@ TRANSLATED_HOMIE_SETTINGS = {
}
class Device_DSMR(Device_Base):
def __init__(self, device_id=None, name=None, homie_settings=TRANSLATED_HOMIE_SETTINSG, mqtt_settings=TRANSLATED_MQTT_SETTINGS):
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)
node = Node_Base(self, "gasmeter", "Gasmeter", "status")
self.add_node(node)
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 register_status_properties(self, node):
super(Device_Temperature_Humidity_Battery, self).register_status_properties(
node
)
self.battery = Property_Battery(node)
node.add_property(self.battery)
def update_battery(self, battery):
logger.info("Updated Battery {}".format(battery))
self.battery.value = battery
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)