[ 129,142 keer bekeken / views ]
Belofte maakt schuld. In mijn post over de DSMR-logger heb ik belooft om ook een post te schrijven over de integratie van Home-Assistant met de DSMR-logger.
Die belofte willig ik met deze post in.
Let op!
Deze post is geschreven met de DSMRloggerWS firmware in gedachte.
Ondertussen is de DSMRloggerAPI firmware de standaard en daar moet je op een andere manier gegevens uit lezen. Hoe dit moet staat beschreven in de documentatie van deze firmware.
Home-Assistant is, naar mijn bescheiden mening, één zo niet dé meest universele en robuuste Domotica oplossing die momenteel bestaat. De manieren waarop Home-Assistant gegevens uit andere systemen kan halen is bijna onuitputtelijk. Het is alleen zaak de voor jou beste manier te vinden.
Home-Assistant kan gegevens via een restAPI uit andere systemen (en dus uit de DSMR-logger) halen maar dat heeft als nadeel dat als je meerdere gegevens uit zo’n extern systeem wilt halen en deze allemaal beschikbaar worden gesteld via één restAPI deze restAPI voor ieder veld aangeroepen wordt en er dus héél veel data “over de lijn gaat” en het externe systeem ook vrij zwaar wordt belast.
Daarom heb ik, voor het uitlezen van de DSMR-logger, gekozen om Home-Assistant (HA) de gegevens uit een bestand (platform: file
) te laten halen. Dat bestand staat op dezelfde computer waar ook HA op draait waardoor de overhead wordt geminimaliseerd.
Het werkt zo:
Middels een python programma doen we een request naar de DSMR-logger om de actuele gegevens van de Slimme Meter te geven. Dit programma moet periodiek (zeg één maal per minuut) gestart worden. Dat is de taak van ‘cron
‘. Cron is een Unix/Linux deamon die, op basis van tijd, jobs start. In ons geval moet hij dus het python programma “DSMR_Actual.py
” starten.
Met het commando ‘crontab -e
’ (als user root!!) kun je de volgende regel in crontab aanbrengen:
# For more information see the manual pages of crontab(5) and cron(8) # @reboot /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py # # m h dom mon dow command # iedere minuut * * * * * /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py #
Het programma DSMR_Actual.py
ziet er zo uit:
#!/srv/homeassistant/bin/python # import urllib.request import json url = 'http://ESP01-DSMR.local/getActual.json' req = urllib.request.Request(url) ##parsing response r = urllib.request.urlopen(req).read() response = json.loads(r.decode('utf-8')) #print(response) with open('/tmp/DSMR-Actual.json', 'w') as outfile: json.dump(response, outfile)
In regel 5 krijgt ‘url
’ de verwijzing naar de restAPI van de DSMR-logger waarmee de actuele gegevens worden opgevraagd.
Regel 6 zet dit om in een request aan de DSMR-logger en regel 9 stopt het antwoord van de DSMR-logger in de variabele ‘r
’ die vervolgens in regel 10 gedecodeerd in de variabele ‘response
’ wordt gestopt. Uiteindelijk schrijft json.dump()
de terug gekregen response
naar het bestand ‘/tmp/DSMR-Actual.json
’.
Dat bestand ziet er dan zo uit:
{ "Timestamp": "190211122653W", "Energy_Delivered": "3317.275", "Energy_Returned": "824.638", "Gas_Delivered": "1755.84", "Energy_Delivered_Tariff1": "1512.558", "Energy_Delivered_Tariff2": "1804.717", "Energy_Returned_Tariff1": "242.226", "Energy_Returned_Tariff2": "582.412", "Power_Delivered": "0.300", "Power_Returned": "0.000", "Voltage_l1": "234.0", "Current_l1": "1", "Voltage_l2": "235.0", "Current_l2": "2", "Voltage_l3": "236.0", "Current_l3": "1", "Power_Delivered_l1": "242", "Power_Returned_l1": "0", "Power_Delivered_l2": "506", "Power_Returned_l2": "0", "Power_Delivered_l3": "0", "Power_Returned_l3": "448" }
Om het geheel een beetje overzichtelijk te houden heb ik alle scripts die ik voor HA gebruik in de map ~/.homeassistant/scripts/
gestopt.
Vervolgens moeten we aan HA duidelijk maken dat ze de gegevens van de DSMR-logger uit het bestand /tmp/DSMR-Actueel.json
moet halen.
Ik heb al mijn sensor-configuraties in de map ~/homeassistant/sensors
gestopt. In het configuration.yaml
bestand heb ik de volgende verwijzing staan:
sensor: !include_dir_merge_list sensors/
Deze regel zorgt ervoor dat alle .yaml
files die in de map sensors/
staan als configuratie bestand van de HA installatie worden geparsed en opgenomen.
Eén van de sensor configuratie files is DSMT_Actueel.yaml
. Deze heeft de volgende inhoud:
## sensor: ### ### ESP-DSMR ### # DSMR_Actual.py wordt iedere minuut door cron gestart #- platform: command_line # name: DSMRdata # command: "~/.homeassistant/scripts/DSMR_Actual.py" - platform: file name: "LastUpdate" file_path: /tmp/DSMR-Actual.json friendly_name: "Last update" unit_of_measurement: "" value_template: "{{ value_json.Timestamp }}" - platform: file name: "Energy Delivered" file_path: /tmp/DSMR-Actual.json unit_of_measurement: "kWh" value_template: '{{ value_json.Energy_Delivered }}' - platform: file name: "Energy Returned" file_path: /tmp/DSMR-Actual.json unit_of_measurement: "kWh" value_template: '{{ value_json.Energy_Returned | round(3) }}' - platform: file name: "Power Delivered" file_path: /tmp/DSMR-Actual.json unit_of_measurement: "Watt" value_template: '{{ value_json.Power_Delivered | round(1) }}' - platform: file name: "Power Returned" file_path: /tmp/DSMR-Actual.json unit_of_measurement: "Watt" value_template: '{{ value_json.Power_Returned | round(1) }}' - platform: file name: "Power Delivered l1" file_path: /tmp/DSMR-Actual.json unit_of_measurement: "Watt" value_template: '{{ value_json.Power_Delivered_l1 | round(1) }}' - platform: file name: "Power Delivered l2" file_path: /tmp/DSMR-Actual.json unit_of_measurement: "Watt" value_template: '{{ value_json.Power_Delivered_l2 | round(1) }}' - platform: file name: "Power Delivered l3" file_path: /tmp/DSMR-Actual.json unit_of_measurement: "Watt" value_template: '{{ value_json.Power_Delivered_l3 | round(1) }}' - platform: file name: "Power Returned l1" file_path: /tmp/DSMR-Actual.json unit_of_measurement: "Watt" value_template: '{{ value_json.Power_Returned_l1 | round(1) }}' - platform: file name: "Power Returned l2" file_path: /tmp/DSMR-Actual.json unit_of_measurement: "Watt" value_template: '{{ value_json.Power_Returned_l2 | round(1) }}' - platform: file name: "Power Returned l3" file_path: /tmp/DSMR-Actual.json unit_of_measurement: "Watt" value_template: '{{ value_json.Power_Returned_l3 | round(1) }}' - platform: file name: "Gas Delivered" file_path: /tmp/DSMR-Actual.json unit_of_measurement: "m3" value_template: '{{ value_json.Gas_Delivered | round(2) }}'
Om deze gegevens ook daadwerkelijk op de front-end van HA te krijgen moet ook groups.yaml
worden aangepast.
### group: ### ###VIEWS### default_view: view: yes entities: . . - sun.sun - group.DateTimes Energie: name: Energie view: yes entities: - group.Energie_Verbruik - group.Energie_Teruglevering - group.DSMR_Last_Update ###CARDS### DSMR_Last_Update: name: DSMR Last Update entities: - sensor.LastUpdate Energie_Verbruik: name: Energie Verbruik (actueel) entities: - sensor.Energy_Delivered - sensor.Power_Delivered - sensor.Power_Delivered_l1 - sensor.Power_Delivered_l2 - sensor.Power_Delivered_l3 - sensor.Gas_Delivered Energie_Teruglevering: name: Energie Teruglevering (actueel) entities: - sensor.Energy_Returned - sensor.Power_Returned - sensor.Power_Returned_l3
De Home-Assistant front-end geeft dan dit inzicht:
Voor future reference, op de repository op Github staat nu ook een configuration file voor Home Assistant welke werkt met Energy Dashboard:
Hi Paul,
Met de komst van de ESP-dsmr-loggen van Willem, werkt dit script niet meer.
ik heb geen verstand van Json. Willem geeft aan dat ie een iets andere versie van JSON gebruikt. wat zou ik moeten veranderen om de data van de nieuwe weer netjes in HomeAssistant binnen te krijgen.
Ook Willem weet het niet. 🙁
https://mrwheel-docs.gitbook.io/dsmrlogger32/integratie-met-home-assistant
stukje tekst uit deze link :
Een aantal gebruikers heeft aangegeven moeite te hebben met de manier waarop in de DSMRloggerAPI firmware de JSON strings zijn opgebouwd (zgn. “Name/Value” pairs). Dit heb ik indertijd zo ontworpen omdat ik onvoldoende kennis had van JSON en dan vooral hoe ik JSON strings in de GUI (Javascript) kon verwerken.
In api versie 1 ziet de uitvoer van ”/api/v1/dev/time” er zo uit:
{"devtime":[
{"name": "timestamp", "value": "221207120652W"},
{"name": "time", "value": "2022-12-07 12:06:17"},
{"name": "epoch", "value": 1670411166},
{"name": "uptime", "value": "128(d)-18:32(H:m)"},
{"name": "uptime_secs", "value": 11059921, "unit": "sec"}
]}
De firmware voor de nieuwe DSMR-logger32 stapt af van de “/api/v1” versie. JSON wordt zoals het (blijkbaar) hoort.
Met de ”/api/v2/dev/time” versie van de api ziet bovenstaande JSON string er zo uit:
{
"devtime": {
"timestamp": "221207120652W",
"time": "07-12-2022 12:06:17",
"time_rev": "2022-12-07 12:06:17",
"epoch": 1670411166,
"uptime": "0(d)-00:39(H:m)",
"uptime_secs": 2386
}
}
De DSMRloggerAPI firmware heeft de …
Is er al iemand die het voor elkaar gekregen heeft de dsmr-logger te gebruiken in het nieuwe Home-asistant energie-dashboard?
Hi Otto,
Volgens mij is Robert met zoiets bezig.
Kijk hier eens.
Inmiddels gevonden hoe het moet:
-bij gas: geen ‘m3’ maar ‘m³’
-bij gas: device_class: gas
-bij allemaal: state_class: total_increasing
Daarna zijn alle sensors toe te voegen aan het energiedashboard van Home Assistant!
Uit mijn configuration.yaml:
Wat een gaaf project Willem, complimenten.
Ik raak geïnspireerd, wij hebben onlangs een esmr5 meter ontvangen wellicht werkt jouw oplossing ook daarvoor?
Heb jij toevallig nog een of 2 printjes liggen? Evt kit? Solderen lukt me wel 🙂
Gr Co
Hallo Co,
Bedankt voor het compliment!
Je kunt de DSMR-logger hier kopen.
Dag Willem,
Ik ben pas begonnen met mijn integraties in Home assistant en was op zoek naar een DSMR logger. Is er nog een mogelijkheid om de door u ontworpen printplaat te kopen.
Zo niet kan me wegwijs maken in hoe ik dit zelf moet ontwerpen?
Groeten
John Dasseville
Hi John,
Ik heb nog een paar printplaten liggen.
Ik stuur je een PM.
Dankje ik heb al een langetijd een van de eerste versies en had vroeger een homewizard.
omdat ik daar niets mee kon gaan kijken naar HA waar je wel even de tijd voormoet nemen om .e.e.a te begrijpen.
Echter op mijn odroid C2 draaid nu de hass versie met een rfxtx en ikea hub erg stabiel.
updates gewoon vanuit de interface.
Ben een avond bezig geweest om DSMR in de HA te krijgen want cron en python willen niet vanuit de OS shell. gebruik terminal plugin.
echter ik heb het van elkaar. de gegeven informatie was voldoende om het om te zetten.
zit op HA 115.6 en de dsmr 0.76(Oct 27 2018)
Geprobeerd op Raspberry Pi 3B, Odroid C2, en Intel/Debian. De eerste twee met platform specifieke images, de laatste met behulp van Controlled install.
Integraties met RFX (KaKu) en Zigbee (Conbee II).
Vooral Conbee is instabiel, twee, drie keer per dag verdwijnen alle apparaten, en soms komen ze spontaan terug, vaak pas na een harde reset/reboot. Onwerkbaar.
Mijn grootvader zei altijd; “het gereedschap kent geen kuren, het zijn de handen die hem besturen” …
Jammer, dat HomeAssistant zo instabiel is. Heb het al eenkeer of vier, vijf geprobeerd, versies 0.8x tot de laatste 0.114 aan toe, en ik krijg het niet stabiel.
Ook de hoeveelheid problemen, te wijten aan updates bij nieuwe versies geven me weinig vertrouwen. Mijn advies is: HA, leuk, maar als je een werkende omgeving hebt, afblijven!
En dat is jammer, want het is wel een van de meest moderne, en flexibele domotica oplossingen die ik ken.
Hi Frank,
Ik weet niet waar je HA op draait, maar mijn ervaring is toch dat het erg stabiel is.
Dank voor je slimme meter uitlezer.
Hij werkt ook prima met een Sagemcom T210-D ESMR5 3-fase slimme meter, zonder extra power adapter.
Thanx!
Heb je ook al geprobeerd de utility_meter component te gebruiken?
Ik heb zelf al een NodeMCU ESP boardje aan m’n P1 poort van m’n Kaifa Ma105 hangen en deze schrijft de waarden weg in Home Assistant via MQTT.
Echter krijg ik het (nog) niet voor elkaar de utility_meter component goed te configureren.
Hi Tom,
Dit project gebruikt de “
dsmr
” bibliotheek van Matthijs Kooijman.Als het uitlezen van de
utility_meter
component met deze bibliotheek uitgelezen kan worden dan kan het ook met de DSMR-logger.Weer mooi helder uitgelegd Willem, complimenten voor dit leuke projectje!
Reageren op de vorige post gaat niet meer zag ik, wilde nog aangeven dat bij mij blijkbaar zowel de slimme meter (Kaifa MA304C) als de Vera Edge (waar ik ook de P1 mee uitlees) te weinig stroom leveren voor de ESP8266. Nu een externe USB voeding aangesloten op het printje en het werkt goed! Wil de waarden nu nog gaan loggen in een eigen database (via MQTT?) en hiermee grafieken op een webpagina maken. Actuele waarden toon ik nu mbv ImperiHome uit de Vera Edge.
Zit er ook al een tijdje over te denken om van Vera over te stappen op HomeAssistant voor wat uitgebreidere mogelijkheden, dus dan komt dit artikel weer mooi van pas!
Wat overigens apart is; eerder zag ik ook de spanning per fase in Vera. Nu niet meer en ook niet in de DSMR-logger, dus de slimme meter lijkt dit ineens niet meer uit te sturen? Enig idee hoe dat kan?
Hoi Klaas,
Mooi opgelost! Fijn dat de uitlezer (eindelijk) werkt.
Op opencircuit.nl verschijnt één dezer dagen een post waarin ik ook een summiere uitleg geef over MQTT.
Gegevens opslaan in MySQL (of de nieuwere versie daarvan “MariaDB”) is een mooie uitbreiding.
Waarom de Slimme Meter opeens geen informatie over de spanning van de fasen geeft is voor mij ook een raadsel.
MySQL is (nog steeds) van Oracle, MariaDB is open community. De community was de niet nagekomen beloftes helemaal zat, vandaar MariaDB als fork (want dat is het) van MySQL.
Bedankt Willem, Ik ga er mee aan de slag !