Het heeft even geduurd, voordat ik de Warmtelink gekoppeld kreeg aan Domoticz. Dat heeft voornamelijk te maken met mijn onkunde in het programmeren in Python en een gebrek aan kennis van Rasbian vanaf de prompt. Maar hé, het is gelukt, mede dankzij de hulp van de Facebookgroep Domoticz
Voor de kenners: Ik heb de combinatie van de Kamstrup-meter met de Aurum-link. Die laatste werd in november 2022 actief.
Onderop de Aurum zit een P1 aansluiting, die zich gemakkelijk laat aansluiten op de Raspberry Pi. Op de eerste USB-poort heb ik al de slimme meter van de elektriciteit zitten, de slimme meter van de stadswarmte zit op de tweede poort. Een en ander zie je terug in de code.
Omdat Domoticz nog geen ondersteuning biedt voor de Stadsverarming van Vattenfall, heb ik dus zelf maar wat gemaakt, kon ook niets bruikbaars vinden. Het script wordt iedere vijf minuten door crontab aangeroepen. De waarde van de meter wordt uitgelezen en via twee kanalen (experimenteel) naar Domoticz verzonden.
Erg belangrijk voor deze truc is dat in de instellingen van Domoticz je eigen netwerk opgegeven moet zijn, anders is communicatie niet mogelijk (in mijn geval dan).
De uitgelezen waarde in Aurum wordt naar twee doelen van Domoticz gestuurd. Bij mij Idx49 & Idx50.
/f/image/MAM1izwAcoyz2mIT8tEEcnz1.png?f=fotoalbum_large)
De eerste via een dummy naar de standaard gasmeter. Daarvoor moet de gevonden waarde uit de Warmtelink wel met 1.000 worden vermenigvuldigd. Als je dat niet doet, leest Domoticz een waarde die duizend keer kleiner is en daar kan je voor thuisgebruik niks mee. En geloof me 1.000 GJ is ver boven het plafond
Je krijgt in Domoticz een keurig overzicht van het warmtegebruik, maar helaas uitgedrukt in m3 gas.
Om wel gewoon echte GJ's weg te kunnen schrijven in Domoticz heb ik een tweede doel aangemaakt. Ook deze weer via een dummy, maar dan als een algemene teller; werkelijk gebruik weggezet in tijd. Iedere vijf minuten wordt vanuit de slimme meter de waarde uitgelezen en vergeleken met de vorige meting. Het verschil wordt doorgegeven aan Domoticz. Dat geeft de volgende grafiek. Ook goed bruikbaar, maar wel anders.
Oke, dan nu het echte werk. De code:
Bij het lezen en wegschrijven van de file met daarin de laatst gelezen waarde uit de slimme meter, kwam ik tot de ontdekking dat ik daar helemaal geen rechten toe had. Op de prompt kan je met het commando chown de rechten wijzigen. Ga naar de map waar je het bestand hebt staan en tik in:
De Raspberry Pi kan nu lezen en schrijven op de bewuste file.
Heel veel succes. Als er vragen zijn, hoop ik ze te kunnen beantwoorden, maar veel kennis heb ik niet. Voornamelijk veel gegoogled, heel veel gegoogled
Voor de kenners: Ik heb de combinatie van de Kamstrup-meter met de Aurum-link. Die laatste werd in november 2022 actief.
Onderop de Aurum zit een P1 aansluiting, die zich gemakkelijk laat aansluiten op de Raspberry Pi. Op de eerste USB-poort heb ik al de slimme meter van de elektriciteit zitten, de slimme meter van de stadswarmte zit op de tweede poort. Een en ander zie je terug in de code.
Omdat Domoticz nog geen ondersteuning biedt voor de Stadsverarming van Vattenfall, heb ik dus zelf maar wat gemaakt, kon ook niets bruikbaars vinden. Het script wordt iedere vijf minuten door crontab aangeroepen. De waarde van de meter wordt uitgelezen en via twee kanalen (experimenteel) naar Domoticz verzonden.
Erg belangrijk voor deze truc is dat in de instellingen van Domoticz je eigen netwerk opgegeven moet zijn, anders is communicatie niet mogelijk (in mijn geval dan).
De uitgelezen waarde in Aurum wordt naar twee doelen van Domoticz gestuurd. Bij mij Idx49 & Idx50.
/f/image/MAM1izwAcoyz2mIT8tEEcnz1.png?f=fotoalbum_large)
De eerste via een dummy naar de standaard gasmeter. Daarvoor moet de gevonden waarde uit de Warmtelink wel met 1.000 worden vermenigvuldigd. Als je dat niet doet, leest Domoticz een waarde die duizend keer kleiner is en daar kan je voor thuisgebruik niks mee. En geloof me 1.000 GJ is ver boven het plafond

Om wel gewoon echte GJ's weg te kunnen schrijven in Domoticz heb ik een tweede doel aangemaakt. Ook deze weer via een dummy, maar dan als een algemene teller; werkelijk gebruik weggezet in tijd. Iedere vijf minuten wordt vanuit de slimme meter de waarde uitgelezen en vergeleken met de vorige meting. Het verschil wordt doorgegeven aan Domoticz. Dat geeft de volgende grafiek. Ook goed bruikbaar, maar wel anders.
Oke, dan nu het echte werk. De code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
| #! Raspberry Pi4 / Python 3.73 # script gemaakt door HerreZ en gebruik het ;-) import sys import serial import requests # Initialiseren DomoticzServer = "192.168.178.185:8080" # Naar eigen inzicht aanpassen Idx1 = "49" # Index voor Dummy -> Gas. Aanpassen aan eigen gegevens Idx2 = "50" # Index voor Custom Dummy -> Teller. Aanpassen aan eigen gegevens file = '/home/pi/domoticz/scripts/python/GJwaarde.txt' # File met laatste P1 Warmtelink-meting. Bepaal zelf path- en filenaam headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} teller = 0 # Poort configureren ser = serial.Serial() ser.baudrate = 115200 ser.bytesize = serial.EIGHTBITS ser.parity = serial.PARITY_NONE ser.stopbits = serial.STOPBITS_ONE ser.xonxoff = 0 ser.rtscts = 0 ser.timeout = 20 ser.port = "/dev/ttyUSB1" #Op USB-poort 0 zit bij mij de slimme meter van de elektriciteit, vandaar /ttyUSB1 try: ser.open() except: sys.exit ("Fout bij het openen van %s." % ser.name) while teller < 11: # Ga alle regels af (feb 2023 = 11 regels) om de gezochte waarde te vinden telegramregel = '' try: p1_raw = ser.readline() except: sys.exit ("Poort %s kan niet gelezen worden." % ser.name ) p1_str = str(p1_raw) #Basis voor lezen telegram per regel telegramregel = p1_str.strip() if telegramregel[2:12] == "0-1:24.2.1": # In deze regel staat de gezochte waarde telegramregel = telegramregel.rstrip("brnGJ'*\()'") #Alles rechts van *GJ weghalen positie = telegramregel.find(')(') # Achter deze haken staat de waarde GJwaarde = telegramregel[positie + 2:] # Waarde plaatsen in string GJwaarde P1GJ = int(float(GJwaarde)*1000) # Waarde maal 1.000 om zichtbaar te zijn bij de gasmeter in Domoticz res = requests.get( "http://" + DomoticzServer + "/json.htm?type=command¶m=udevice&idx=" + Idx1 + "&nvalue=0&svalue=" + str(P1GJ) ) # Code voor custom teller in Domoticz with open(file, 'r') as reader: OudeGJ = int(float(reader.read())*1000)/1000 # Waarde behouden bij omzetten string -> integer GebruikteGJ = round(P1GJ/1000 - OudeGJ, 3) # Om afrondingsfouten te voorkomen, decimalen op 3 gezet; is ook uitlees Warmtelink # Stuur GebruikteGJ naar Domoticz restemp = requests.get( "http://" + DomoticzServer + "/json.htm?type=command¶m=udevice&idx=" + Idx2 + "&nvalue=0&svalue=" + str(GebruikteGJ) ) with open(file, 'w') as writer: writer.write(str(P1GJ/1000)) teller = teller +1 # Poort sluiten en toon status bij fout. try: ser.close() except: sys.exit ("Fout %s. Programma afgebroken. Kon de seriele poort niet sluiten." % ser.name ) |
Bij het lezen en wegschrijven van de file met daarin de laatst gelezen waarde uit de slimme meter, kwam ik tot de ontdekking dat ik daar helemaal geen rechten toe had. Op de prompt kan je met het commando chown de rechten wijzigen. Ga naar de map waar je het bestand hebt staan en tik in:
code:
1
| sudo chown -R pi:pi Bestand.txt |
De Raspberry Pi kan nu lezen en schrijven op de bewuste file.
Heel veel succes. Als er vragen zijn, hoop ik ze te kunnen beantwoorden, maar veel kennis heb ik niet. Voornamelijk veel gegoogled, heel veel gegoogled
