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 node.property.property_energy import Property_Energy from node.property.property_power import Property_Power from node.property.property_current import Property_Current from node.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, "delivery-tariff1", "Delivery tariff 1")) self.add_property(Property_Energy(self, "delivery-tariff2", "Delivery tariff 2")) self.add_property(Property_Power(self, "power", "Power")) 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("delivery-tariff1").value = float(telegram.ELECTRICITY_USED_TARIFF_1.value) self.get_property("delivery-tariff2").value = float(telegram.ELECTRICITY_USED_TARIFF_2.value) self.get_property("power").value = float(telegram.CURRENT_ELECTRICITY_USAGE.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)