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,11 +1,17 @@
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 dsmr2mqtt.node.property.property_energy import Property_Energy
from dsmr2mqtt.node.property.property_power import Property_Power
from dsmr2mqtt.node.property.property_current import Property_Current
from dsmr2mqtt.node.property.property_voltage import Property_Voltage
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):
@@ -16,70 +22,50 @@ class Node_ElectricityMeter(Node_Base):
name="Electricity meter",
type_="state",
retain=True,
qos=1,
state_values=None,
set_state=None,
qos=1
):
assert state_values
assert set_state
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_Integer(self, "tariff_indicator", "Tariff indicator", data_format="1:2", settable=False))
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_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_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_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"))
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_status(self, telegram: str):
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)
#Telegram
# 1-3:0.2.8(50)
# 0-0:1.0.0(200603122725S)
# 0-0:96.1.1(4530303438303030303339393038333139)
# 1-0:1.8.1(001807.864*kWh)
# 1-0:1.8.2(001173.872*kWh)
# 1-0:2.8.1(000000.091*kWh)
# 1-0:2.8.2(000000.000*kWh)
# 0-0:96.14.0(0002)
# 1-0:1.7.0(00.909*kW)
# 1-0:2.7.0(00.000*kW)
# 0-0:96.7.21(00016)
# 0-0:96.7.9(00003)
# 1-0:99.97.0(0)(0-0:96.7.19)
# 1-0:32.32.0(00002)
# 1-0:52.32.0(00002)
# 1-0:72.32.0(00002)
# 1-0:32.36.0(00000)
# 1-0:52.36.0(00000)
# 1-0:72.36.0(00000)
# 0-0:96.13.0()
# 1-0:32.7.0(235.0*V)
# 1-0:52.7.0(237.0*V)
# 1-0:72.7.0(236.0*V)
# 1-0:31.7.0(001*A)
# 1-0:51.7.0(001*A)
# 1-0:71.7.0(001*A)
# 1-0:21.7.0(00.290*kW)
# 1-0:41.7.0(00.268*kW)
# 1-0:61.7.0(00.350*kW)
# 1-0:22.7.0(00.000*kW)
# 1-0:42.7.0(00.000*kW)
# 1-0:62.7.0(00.000*kW)
# 0-1:24.1.0(003)
# 0-1:96.1.0(4730303732303033393435373234323139)
# 0-1:24.2.1(200603122500S)(01741.782*m3)
pass
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)

View File

@@ -1,10 +1,15 @@
import logging
from dsmr_parser.objects import Telegram
from homie.node.node_base import Node_Base
from homie.node.property.property_enum import Property_Enum
from dsmr2mqtt.node.property.property_volume import Property_Volume
from .property.property_volume import Property_Volume
logger = logging.getLogger(__name__)
class Node_Gasmeter(Node_Base):
class Node_GasMeter(Node_Base):
def __init__(
self,
device,
@@ -12,20 +17,13 @@ class Node_Gasmeter(Node_Base):
name="Gas meter",
type_="state",
retain=True,
qos=1,
state_values=None,
set_state=None,
):
assert state_values
assert set_state
qos=1
):
logger.debug("Configuring gas meter")
super().__init__(device, id, name, type_, retain, qos)
self.add_property(
Property_Volume(
self, "volume", "Volume", data_format=state_values, set_value=set_state
)
)
self.add_property(Property_Volume(self, "volume", "Volume"))
def update_volume(self, volume):
self.get_property("volume").value = volume
def update(self, telegram: Telegram):
logger.debug("Updating electricity meter properties")
self.get_property("volume").value = float(telegram.HOURLY_GAS_METER_READING.value)

View File

@@ -10,7 +10,7 @@ class Property_Power(Property_Float):
settable=False,
retained=True,
qos=1,
unit="W",
unit="kW",
data_type=None,
data_format=None,
value=None,