Toon posts:

Zo koppelde ik Warmetelink van Vattenfall aan Domoticz

Pagina: 1
Acties:

  • Herre Zwart
  • Registratie: December 2022
  • Laatst online: 15-03 01:35
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.

https://tweakers.net/i/wZ0t1DXLZSWqoYx6uKdbehIptjI=/800x/filters:strip_exif()/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:

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&param=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&param=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 :*)


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee