Refactored and updated dsmr_parser

This commit is contained in:
Ard Kuijpers
2025-03-22 17:20:52 +01:00
parent 53022aebb8
commit ccb31cbdc1
21 changed files with 731 additions and 69 deletions

View File

@@ -0,0 +1,79 @@
from dsmr_parser.objects import Telegram
from homie.node.node_base import Node_Base
from homie.node.property.property_enum import Property_Enum
from homie.node.property.property_integer import Property_Integer
from .property.property_energy import Property_Energy
from .property.property_power import Property_Power
from .property.property_current import Property_Current
from .property.property_voltage import Property_Voltage
import logging
logger = logging.getLogger(__name__)
class Node_ElectricityMeter(Node_Base):
def __init__(
self,
device,
id="electricitymeter",
name="Electricity meter",
type_="state",
retain=True,
qos=1
):
logger.debug("Configuring electricity meter")
super().__init__(device, id, name, type_, retain, qos)
self.add_property(Property_Integer(self, "tariff-indicator", "Tariff indicator", data_format="1:2", settable=False))
self.add_property(Property_Enum(self, "tariff", "Tariff", data_format="tariff1,tariff2", settable=False))
self._tariffs = {1: "tariff1", 2: "tariff2" }
self.add_property(Property_Energy(self, "usage-tariff1", "Usage tariff 1"))
self.add_property(Property_Energy(self, "usage-tariff2", "Usage tariff 2"))
self.add_property(Property_Power(self, "actual-usage", "Actual usage"))
self.add_property(Property_Energy(self, "production-tariff1", "Production tariff 1"))
self.add_property(Property_Energy(self, "production-tariff2", "Production tariff 2"))
self.add_property(Property_Power(self, "actual-production", "Actual production"))
self.add_property(Property_Voltage(self, "voltage-l1", "Voltage L1"))
self.add_property(Property_Voltage(self, "voltage-l2", "Voltage L2"))
self.add_property(Property_Voltage(self, "voltage-l3", "Voltage L3"))
self.add_property(Property_Current(self, "current-l1", "Current L1"))
self.add_property(Property_Current(self, "current-l2", "Current L2"))
self.add_property(Property_Current(self, "current-l3", "Current L3"))
self.add_property(Property_Power(self, "power-l1", "Power L1"))
self.add_property(Property_Power(self, "power-l2", "Power L2"))
self.add_property(Property_Power(self, "power-l3", "Power L3"))
def update(self, telegram: Telegram):
logger.debug("Updating electricity meter properties")
self.get_property("tariff-indicator").value = int(telegram.ELECTRICITY_ACTIVE_TARIFF.value)
self.get_property("tariff").value = self._tariffs[int(telegram.ELECTRICITY_ACTIVE_TARIFF.value)]
self.get_property("usage-tariff1").value = float(telegram.ELECTRICITY_USED_TARIFF_1.value)
self.get_property("usage-tariff2").value = float(telegram.ELECTRICITY_USED_TARIFF_2.value)
self.get_property("actual-usage").value = float(telegram.CURRENT_ELECTRICITY_USAGE.value)
self.get_property("production-tariff1").value = float(telegram.ELECTRICITY_DELIVERED_TARIFF_1.value)
self.get_property("production-tariff2").value = float(telegram.ELECTRICITY_DELIVERED_TARIFF_2.value)
self.get_property("actual-production").value = float(telegram.CURRENT_ELECTRICITY_DELIVERY.value)
self.get_property("voltage-l1").value = float(telegram.INSTANTANEOUS_VOLTAGE_L1.value)
self.get_property("current-l1").value = float(telegram.INSTANTANEOUS_CURRENT_L1.value)
self.get_property("power-l1").value = float(telegram.INSTANTANEOUS_ACTIVE_POWER_L1_POSITIVE.value)
self.get_property("voltage-l2").value = float(telegram.INSTANTANEOUS_VOLTAGE_L2.value)
self.get_property("current-l2").value = float(telegram.INSTANTANEOUS_CURRENT_L2.value)
self.get_property("power-l2").value = float(telegram.INSTANTANEOUS_ACTIVE_POWER_L2_POSITIVE.value)
self.get_property("voltage-l3").value = float(telegram.INSTANTANEOUS_VOLTAGE_L3.value)
self.get_property("current-l3").value = float(telegram.INSTANTANEOUS_CURRENT_L3.value)
self.get_property("power-l3").value = float(telegram.INSTANTANEOUS_ACTIVE_POWER_L3_POSITIVE.value)