Initial commit
This commit is contained in:
134
dsmr2mqtt.py
Normal file
134
dsmr2mqtt.py
Normal file
@@ -0,0 +1,134 @@
|
||||
#!/usr/bin/env python
|
||||
# Python script om P1 telegram weer te geven
|
||||
|
||||
import datetime
|
||||
import re
|
||||
import serial
|
||||
import homie
|
||||
import paho.mqtt.client as paho
|
||||
|
||||
VERSION = 0.1
|
||||
|
||||
|
||||
|
||||
def on_publish(client,userdata,result): #create function for callback
|
||||
print("data published \n")
|
||||
pass
|
||||
|
||||
client1=paho.Client("control1") #create client object
|
||||
client1.on_publish = on_publish #assign function to callback
|
||||
client1.connect(broker,port) #establish connection
|
||||
|
||||
|
||||
class DSMRConnection:
|
||||
def __init__(self):
|
||||
"""Seriele poort confguratie naar DSMR configuratie"""
|
||||
cfg = Settings()
|
||||
self.serial = serial.Serial(
|
||||
port=cfg.dsmr_port,
|
||||
baudrate=cfg.dsmr_baudrate,
|
||||
parity=serial.PARITY_NAMES[cfg.dsmr_parity],
|
||||
timeout=10,
|
||||
xonxoff=0
|
||||
)
|
||||
|
||||
self.mqttclient = paho.Client(cfg.)
|
||||
|
||||
kwhtot = 0
|
||||
kwhoud = 0
|
||||
kwhverschil = 0
|
||||
|
||||
gastot = 0
|
||||
gasoud = 0
|
||||
gasverschil = 0
|
||||
|
||||
# Telegram
|
||||
#
|
||||
# /KMP5 KA6U001660740912
|
||||
#
|
||||
# 0-0:96.1.1(204B413655303031363630373430393132)
|
||||
# 1-0:1.8.1(13629.373*kWh)
|
||||
# 1-0:1.8.2(14700.866*kWh)
|
||||
# 1-0:2.8.1(00000.000*kWh)
|
||||
# 1-0:2.8.2(00000.000*kWh)
|
||||
# 0-0:96.14.0(0001)
|
||||
# 1-0:1.7.0(0000.64*kW)
|
||||
# 1-0:2.7.0(0000.00*kW)
|
||||
# 0-0:96.13.1()
|
||||
# 0-0:96.13.0()
|
||||
# 0-1:24.1.0(3)
|
||||
# 0-1:96.1.0(3238313031353431303037343732343132)
|
||||
# 0-1:24.3.0(180428140000)(08)(60)(1)(0-1:24.2.1)(m3)
|
||||
# (03862.650)
|
||||
# !
|
||||
|
||||
while True:
|
||||
ser.open()
|
||||
checksum_found = False
|
||||
gasflag = 0
|
||||
|
||||
while not checksum_found:
|
||||
telegram_line = ser.readline() # Lees een seriele lijn in.
|
||||
telegram_line = telegram_line.decode('ascii').strip() # Strip spaties en blanke regels
|
||||
|
||||
#print (telegram_line) #debug
|
||||
|
||||
if re.match(b'(?=1-0:1.7.0)', telegram_line): #1-0:1.7.0 = Actueel verbruik in kW
|
||||
# 1-0:1.7.0(0000.54*kW)
|
||||
kw = telegram_line[10:-4] # Knip het kW gedeelte eruit (0000.54)
|
||||
watt = float(kw) * 1000 # vermengvuldig met 1000 voor conversie naar Watt (540.0)
|
||||
watt = int(watt) # rond float af naar heel getal (540)
|
||||
|
||||
if re.match(b'(?=1-0:1.8.1)', telegram_line): #1-0:1.8.1 - Hoog tarief / 1-0:1.8.1(13579.595*kWh)
|
||||
kwh1 = telegram_line[10:-5] # Knip het kWh gedeelte eruit (13579.595)
|
||||
|
||||
if re.match(b'(?=1-0:1.8.2)', telegram_line): #1-0:1.8.2 - Laag tarief / 1-0:1.8.2(14655.223*kWh)
|
||||
kwh2 = telegram_line[10:-5] # Knip het kWh gedeelte eruit (14655.223)
|
||||
|
||||
if gasflag == 1:
|
||||
gas = telegram_line[1:-1]
|
||||
gasflag = 0
|
||||
|
||||
if re.match(b'(?=0-1:24.3.0)', telegram_line): #0-1:24.3.0 - Gasverbruik
|
||||
gasflag = 1
|
||||
|
||||
# Check wanneer het uitroepteken ontavangen wordt (einde telegram)
|
||||
if re.match(b'(?=!)', telegram_line):
|
||||
checksum_found = True
|
||||
|
||||
ser.close()
|
||||
|
||||
#######################################
|
||||
if kwhoud < 1: #Script eerste keer opgestart, sla waarde op
|
||||
kwhoud = kwhtot
|
||||
|
||||
kwhtot = float(kwh1) + float(kwh2)
|
||||
kwhverschil = round(float(kwhtot) - float(kwhoud), 3)
|
||||
|
||||
if gasoud < 1: #Script eerste keer opgestart, sla waarde op
|
||||
gasoud = gas
|
||||
gasouduur = gas
|
||||
|
||||
gasverschil = round(float(gas) - float(gasoud), 3)
|
||||
gasverschiluur = round(float(gas) - float(gasouduur), 3)
|
||||
|
||||
# Reset tellers
|
||||
|
||||
tijd = str(datetime.datetime.now().time())[0:-10]
|
||||
tijdmin = str(datetime.datetime.now().time())[3:-10]
|
||||
|
||||
if tijd == "00:00": # Reset de counter van de dag
|
||||
kwhoud = kwhtot
|
||||
gasoud = gas
|
||||
|
||||
if tijdmin == "00": # Reset de counter van het uur
|
||||
gasouduur = gas
|
||||
|
||||
######################################
|
||||
# MQTT PUBLISH
|
||||
######################################
|
||||
|
||||
client1.publish("elektra\w", watt)
|
||||
client1.publish("elektra\kwh", kwhverschil)
|
||||
client1.publish("gas", gasverschil)
|
||||
client1.publish("gas\\uur", gasverschiluur)
|
||||
Reference in New Issue
Block a user