Only this pageAll pages
Powered by GitBook
1 of 33

DSMRloggerAPI

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

DSMR-editor

De DSMRloggerAPI heeft de mogelijkheid om meterstanden en instellingen via de browser te veranderen.

Je start de DSMR-editor door in het hoofdscherm op het icoontje te klikken.

Betekenis van de knoppen:

  • Terug: Terug naar het hoofdscherm van de DSMR-logger

  • Meterstanden: Hier kunnen, per maand, de meterstanden worden ingevoerd. Er kan gekozen worden tussen de meterstanden van de gebruikte energie, de opgewekte energie en het gas verbruik.

  • Settings: Hier kunnen bepaalde parameters zoals de energie tarieven, interval voor het lezen van telegrammen, gegevens van de MQTT broker en het autorisatie token van Mindergas.nl worden ingesteld.

  • Herstel: ingevoerde veranderingen die nog niet zijn opgeslagen worden teniet gedaan.

  • Opslaan: de ingevoerde gegevens worden opgeslagen

Meterstanden aanpassen

Edit Maanden tabel

Het muteren van de maanden tabel is nog niet helemaal zoals het zou moeten zijn. Het is vrij lastig omdat de software zeker moet zijn dat de jaar/maand gegevens, van boven naar beneden, aflopen en aansluiten en ook de meterstanden moeten een steeds lagere waarde hebben. Wordt niet aan voorgaande inter-validatie voldaan, dan kleurt het vakje waar de fout is ontdekt rood en worden de gegevens niet opgeslagen.

Klik na iedere verandering op [Opslaan] (of in ieder geval toch zo vaak mogelijk!

Sommige browser vertalen decimale punten in komma's! Dit is erg verwarrend want de vertaling terug doen ze dan weer niet. Bij het invullen/veranderen van de meterstanden moet een decimale punt (".") gebruikt worden, anders wordt de invoer als ongeldig aangemerkt en niet opgeslagen!

Settings aanpassen

Hostname

De default Hostname is DSMR-API. De documentatie gaat ook uit van deze default hostname. Mocht je de hostname hier veranderen dan moet je bij het lezen van de documentatie overal "DSMR-API" vervangen door de hier ingevoerde hostname (in bovenstaand plaatje is de hostname veranderd in "DSMR-TST3").

Use Pré DSMR 40 (0=No, 1=Yes)

Zet deze rubriek op "1" als je een DSMR 2+ of DSMR 3+ Slimme Meter hebt. Deze instelling wordt pas actief nadat de DSMR-logger opnieuw is opgestart.

MBus-1 (2,3,4) Type Meter

Voer hier het Type in van de meter die op de betreffende MBus is aangesloten. Het Type van Gas meters is "003". Als in jouw installatie de Gas meter is aangesloten op MBus-ID2 voer je bij de rubriek"MBus-2 Type meter"een "3" in. Bij MBus-ID's waar niets op is aangesloten voer je het beste een "0" in.

SM Has Fase Info (0=No, 1=Yes)

Voer een 1 in als de aangesloten Slimme Meter wél fase informatie afgeeft, voer anders een 0 (nul) in. Of jouw Slimme Meter Fase Informatie af geeft kun je zien door naar een telegram te kijken. Geeft jouw Slimme Meter Fase Informatie dan zie je rubrieken met een naam waar _l1, _l2 en _l3 achter staat. Je hebt een Slimme meter die géén fase info afgeeft als de grafieken leeg blijven.

Telegram Lees Interval

Default interval is 10. Dit betekent dat er iedere tien seconden een telegram wordt gelezen en verwerkt. De minimum waarde is 2 seconden.

Te gebruiken index.html pagina

De standaard index pagina is "DSMRindex.html". Mocht je zelf een GUI schrijven dan kun je hier de naam van de index pagina van jouw GUI invullen (nadat je jouw .html pagina naar het bestand systeem hebt ge-upload). Standaard staat er ook een DSMRindexEDGE.html pagina op het bestand systeem. Deze is gelijk aan de DSMRindex.html pagina maar hij haalt de javascript en css bestanden uit de github repository zodat aanpassingen (uitbreidingen of verbeteringen) automatisch door de DSMR-logger gebruikt worden. Het ADJindex.html bestand is een bootstrap naar de door Arjen de Jong gemaakte GUI, het HJMindex.html bestand is een bootstrap naar de door Erik ontwikkelde GUI. Je kunt deze GUI's eenvoudig uitproberen door in de FSmanager op deze bestanden te klikken.

Een nieuw ingevoerde index pagina wordt pas actief na het opnieuw opstarten van de DSMR-logger ([ReBoot] knop in de FSmanager).

OLED type

Hier kun je invoeren óf en wat voor OLED schermpje op de DSMR-logger is aangesloten.

  • Voer een 0 (nul) in als er geen OLED scherm is aangesloten

  • Voer een 1 in als het scherm van het type SDD1306 is

  • Voer een 2 in als het scherm van het type SH1106 is

Flip Oled scherm

  • Voer 0 (nul) in om het scherm standaard te gebruiken

  • Voet 1 in als je het scherm "op zijn kop" gebruikt.

MQTT Top Topic

Dit is het topic waarmee de MQTT berichten naar de broker worden verstuurd. Standaard is het Top Topic "DSMR-API". In bovenstaand plaatje is het Top Topic veranderd in "DSMR-TST3".

Verzend MQTT berichten

Hier kun je opgeven hoe vaak de DSMR-logger een bericht naar de MQTT broker moet sturen. Voer je hier '0' (nul) in dan worden er géén berichten naar de MQTT broker verstuurd. Een waarde kleiner dan de Telegram Lees Interval zorgt ervoor dat na ieder gelezen telegram een bericht naar de MQTT broker wordt verstuurd.

DSMRloggerAPI GUI

Hieronder wat afbeeldingen van de standaard meegeleverde GUI

per Maand
per Maand Grafisch
Telegram
Systeem Info

FSmanager

Met de FSmanager is het mogelijk bestanden op het bestand systeem (Little File System) van de DSMR-logger te plaatsen of ze ervan te verwijderen. Ook kan de inhoud van bestanden die aanwezig zijn op het bestand systeem worden getoond (dit is niet mogelijk met .html bestanden omdat deze direct door de browser geïnterpreteerd -en dus uitgevoerd- worden).

Daarnaast kent de FSmanager nog de volgende functies:

  • Starten van de Update Server [Update Firmware]

  • Rebooten van de DSMR-logger[Reboot]

  • Formatteren van het LittleFS [Format FileSYS]

  • Soms blijft het scherm leeg. Klik dan op de knop[List File System]

  • Met de knop[Exit FSmanager] keer je terug naar het hoofdscherm.

Er zijn verschillende manieren om de FSmanager te starten:

  • Vanuit het DSMR-logger hoofdscherm door op het icoon te klikken

  • Door in de browser de volgende URL in te toetsen http://dsmr-api.local/FSmanager of: http://<ipAdresVanDeLogger>/FSmanager

Het bestand systeem formatteren

De FSmanager heeft de mogelijkheid om het bestand systeem te formatteren. Deze functie is alleen nodig als het bestand systeem problemen vertoont. Normaal gesproken is deze functie nooit nodig en daarom is de knop ook uitgeschakeld. Om de knop te activeren moet het bestand met de naam !doNotFormat(het eerste teken is een uitroep-teken) ge-delete worden. De inhoud van het bestand is niet belangrijk. Zodra dit bestand afwezig is wordt de [Format FileSYS] knop geactiveerd.

Pas op! Door het bestand systeem te formatteren raak je álle bestanden die op het bestand systeem staan kwijt! Maak zo nodig eerst kopiëren van belangrijke bestanden.

Na iedere herstart zal de DSMRloggerAPI firmware controleren of het bestand systeem correct geformatteerd is. In dat geval plaatst het automatisch een bestand met de naam !doNotFormat in de root directory.

Documentatie DSMRloggerAPI firmware

In dit gitbook vind je alle informatie over de restAPI firmware voor de DSMR-logger

Mijn !

Introductie

Je vindt hier de documentatie over de DSMRloggerAPI firmware voor versie 4 van de DSMR-logger.

De DSMR-logger v4.5 die je via kunt kopen (na juni 2021) is voorzien van de hier beschreven firmware. Deze DSMR-logger is "Plug-And-Play" en alleen in bijzondere gevallen moet er iets aan de instellingen aangepast worden (bijvoorbeeld als je een hele oude Slimme Meter hebt of als je een zgn. "Enkel Fase" Slimme meter hebt).

Deze documentatie is voor de gebruikers en makers die meer willen dan alleen de DSMR-logger aansluiten op hun Slimme meter. De meeste gebruikers zullen voldoende hebben aan alleen hoofdstuk.

Let op! Deze documentatie is "work in progress"! Controleer daarom regelmatig op updates.

De DSMR-logger is een hardware en software systeem waarmee de Slimme Meter kan worden uitgelezen. De uitgelezen data (zgn. telegrammen) worden in de DSMR-logger opgeslagen en kunnen met behulp van gestandaardiseerde restAPI call's worden opgevraagd.

Vanaf versie 3 kan de DSMRloggerAPI firmware overweg met vrijwel alle, mij bekende, Slimme Meters (DSMR 2+, DSMR3+, DSMR4+, DSMR5+ en de Belgische varianten hiervan). Het probleem van sommige installaties met de voor geprogrammeerde aansluiting van de Gas Meter op MBus-1 is vanaf versie 3 via settingen aan te passen.

Meer informatie

  • beschrijft het eerste idee achter de Slimme Meter uitlezer.

  • In kun je de ontwikkeling van de hardware en firmware vinden.

  • staat een introductie van de DSMRloggerAPI firmware

  • Veel informatie over de hardware en het gebruik wordt beschreven.

  • De DSMRloggerAPI firmware kun je op vinden

  • Voor de meeste mensen is het gebruik van de twee binaries het eenvoudigste. je kunt deze binaries vinden.

Begrippen

In dit document worden de volgende begrippen gebruikt:

Begrip
Omschrijving

Een volledige beschrijving van dit project kun je vinden.

DSMR

Dutch Smart Meter Requirements De DSMR-specificatie is een afgeleide van de NTA 8130-normering. De DSMR-logger (versie 4) is ontworpen voor de DSMR 4.0 of hoger. DSMR 4.0 geeft aan dat de Slimme Meter op de P1-poort 5 volt bij 100mA moet kunnen leveren (zie pagina 8 en 9 van de specificatie). Vanaf DSMR 5.0+ moet de Slimme Meter 250mA op de P1 poort kunnen leveren. De DSMR-logger gebruikt tijdens het opstarten ~250mA. Heb je een Slimme Meter die volgens een DSMR standaard < 5.0 werkt, dan zul je bijna altijd een externe voeding nodig hebben!

DSMR-logger

de Hardware (Let op! Streepje tussen DSMR en logger)

DSMR-logger v4 (of Versie 4)

Versie 4 van de Hardware. Deze hardware is de basis voor dit project.

DSMR-logger v4.5 (of Versie 4.5)

Versie 4.5 van de Hardware Deze hardware is een verbetering van de v4 hardware. Standaard heeft deze hardware een 5Volt DC Jack-Plug voor gebruik van een externe voeding en een jumper om de voeding te selecteren vanuit de Slimme Meter of de Jack-Plug. Bij gebruik van de Jack-Plug wordt de 5Volt van de Slimme Meter ontkoppelt. De draadbruggen voor de selectie van de signalen naar een OLED display zijn nu standaard [GND,3v3,SCL,SDA] doorverbonden maar deze kunnen, door de verbindingen aan de achterkant van de PCB door te snijden, ook aangepast worden.

DSMRloggerAPI

De firmware voor de DSMR-logger v4 Deze firmware maakt intensief gebruik van restAPI's. Let op! De firmware heeft geen streepje (-) tussen "DSMR" en "logger"

ESP-12

Een bordje met een ESP8266 processor en 4MB Flash Geheugen Dit bordje wordt gebruikt in de DSMR-logger v4

opencircuit.nl
dit
Deze post
deze post
Hier
hier
github
hier
hier

Historische Gegevens gerelateerde restAPI's

De restAPI's voor het opvragen van historische gegevens hebben dit formaat:

/api/v1/hist/{hours|days|months}

of:

/api/v1/hist/{hours|days|months}/{asc|desc}

Opvragen gegevens uit de uren tabel

GET http://dsmr-api.local/api/v1/hist/hours

Geeft een JSON string met de historische gegevens over de afgelopen 24 uur terug.

{"hours":[
  {"recnr": 0, "recid": "21031006", "slot": 17,"edt1": 2328.742, "edt2": 8500.609,"ert1": 353.507, "ert2": 196.479,"gdt": 2958.498},
  {"recnr": 1, "recid": "21031005", "slot": 16,"edt1": 2328.739, "edt2": 8500.598,"ert1": 353.506, "ert2": 196.479,"gdt": 2958.495},
  {"recnr": 2, "recid": "21031004", "slot": 15,"edt1": 2328.735, "edt2": 8500.588,"ert1": 353.506, "ert2": 196.479,"gdt": 2958.488},
  {"recnr": 3, "recid": "21031003", "slot": 14,"edt1": 2328.729, "edt2": 8500.563,"ert1": 353.506, "ert2": 196.479,"gdt": 2958.481},
  {"recnr": 4, "recid": "21031002", "slot": 13,"edt1": 2328.725, "edt2": 8500.551,"ert1": 353.506, "ert2": 196.479,"gdt": 2958.478},
  {"recnr": 5, "recid": "21031001", "slot": 12,"edt1": 2328.721, "edt2": 8500.539,"ert1": 353.506, "ert2": 196.479,"gdt": 2958.474},
     .
     .
     .
  {"recnr": 43, "recid": "21030811", "slot": 23,"edt1": 2328.563, "edt2": 8499.973,"ert1": 353.492, "ert2": 196.472,"gdt": 2958.277},
  {"recnr": 44, "recid": "21030810", "slot": 22,"edt1": 2328.558, "edt2": 8499.949,"ert1": 353.491, "ert2": 196.471,"gdt": 2958.272},
  {"recnr": 45, "recid": "21030809", "slot": 21,"edt1": 2328.555, "edt2": 8499.940,"ert1": 353.490, "ert2": 196.471,"gdt": 2958.270},
  {"recnr": 46, "recid": "21030808", "slot": 20,"edt1": 2328.550, "edt2": 8499.921,"ert1": 353.489, "ert2": 196.471,"gdt": 2958.260},
  {"recnr": 47, "recid": "21030807", "slot": 19,"edt1": 2328.546, "edt2": 8499.904,"ert1": 353.488, "ert2": 196.470,"gdt": 2958.255},
  {"recnr": 48, "recid": "21030806", "slot": 18,"edt1": 2328.543, "edt2": 8499.895,"ert1": 353.488, "ert2": 196.470,"gdt": 2958.250}
]}

Opvragen gegevens uit de dagen tabel

GET http://dsmr-api.local/api/v1/hist/days

Geeft een JSON string met alle gegevens over de afgelopen 14 dagen terug.

{"days":[
  {"recnr": 0, "recid": "21031104", "slot": 7,"edt1": 2328.828, "edt2": 8500.923,"ert1": 353.516, "ert2": 196.483,"gdt": 2958.626},
  {"recnr": 1, "recid": "21031023", "slot": 6,"edt1": 2328.810, "edt2": 8500.861,"ert1": 353.516, "ert2": 196.483,"gdt": 2958.598},
  {"recnr": 2, "recid": "21030923", "slot": 5,"edt1": 2328.712, "edt2": 8500.511,"ert1": 353.506, "ert2": 196.479,"gdt": 2958.463},
  {"recnr": 3, "recid": "21030823", "slot": 4,"edt1": 2328.616, "edt2": 8500.146,"ert1": 353.497, "ert2": 196.475,"gdt": 2958.338},
  {"recnr": 4, "recid": "21030723", "slot": 3,"edt1": 2328.513, "edt2": 8499.809,"ert1": 353.488, "ert2": 196.470,"gdt": 2958.209},
   .
   .
   .
  {"recnr": 9, "recid": "21030223", "slot": 13,"edt1": 2328.028, "edt2": 8498.042,"ert1": 353.444, "ert2": 196.446,"gdt": 2957.589},
  {"recnr": 10, "recid": "21030123", "slot": 12,"edt1": 2327.934, "edt2": 8497.677,"ert1": 353.435, "ert2": 196.441,"gdt": 2957.457},
  {"recnr": 11, "recid": "21022823", "slot": 11,"edt1": 2327.651, "edt2": 8496.564,"ert1": 353.407, "ert2": 196.428,"gdt": 2957.076},
  {"recnr": 12, "recid": "21022723", "slot": 10,"edt1": 2327.560, "edt2": 8496.223,"ert1": 353.400, "ert2": 196.424,"gdt": 2956.947},
  {"recnr": 13, "recid": "21022623", "slot": 9,"edt1": 2327.472, "edt2": 8495.822,"ert1": 353.391, "ert2": 196.419,"gdt": 2956.831},
  {"recnr": 14, "recid": "21022523", "slot": 8,"edt1": 2327.383, "edt2": 8495.460,"ert1": 353.383, "ert2": 196.415,"gdt": 2956.704}
]}

Opvragen gegevens uit de maanden tabel

GET http://dsmr-api.local/api/v1/hist/months

Geeft een JSON string met alle gegevens van de afgelopen 24 maanden terug.

{"months":[
  {"recnr": 0, "recid": "21031106", "slot": 18,"edt1": 2328.836, "edt2": 8500.952,"ert1": 353.517, "ert2": 196.484,"gdt": 2958.637},
  {"recnr": 1, "recid": "21022823", "slot": 17,"edt1": 2327.651, "edt2": 8496.564,"ert1": 353.407, "ert2": 196.428,"gdt": 2957.076},
  {"recnr": 2, "recid": "21013023", "slot": 16,"edt1": 2324.980, "edt2": 8486.277,"ert1": 353.170, "ert2": 196.306,"gdt": 2953.531},
  {"recnr": 3, "recid": "20123023", "slot": 15,"edt1": 2322.095, "edt2": 8475.463,"ert1": 352.912, "ert2": 196.175,"gdt": 2949.813},
  {"recnr": 4, "recid": "20113023", "slot": 14,"edt1": 2319.278, "edt2": 8464.555,"ert1": 352.654, "ert2": 196.047,"gdt": 2946.054},
  {"recnr": 5, "recid": "20103023", "slot": 13,"edt1": 2316.394, "edt2": 8453.577,"ert1": 352.392, "ert2": 195.919,"gdt": 2942.263},
   .
   .
   .
  {"recnr": 19, "recid": "19083023", "slot": 24,"edt1": 2276.118, "edt2": 8300.609,"ert1": 348.744, "ert2": 194.109,"gdt": 2889.412},
  {"recnr": 20, "recid": "19073023", "slot": 23,"edt1": 2273.252, "edt2": 8289.574,"ert1": 348.484, "ert2": 193.979,"gdt": 2885.693},
  {"recnr": 21, "recid": "19063023", "slot": 22,"edt1": 2270.319, "edt2": 8278.475,"ert1": 348.228, "ert2": 193.847,"gdt": 2881.936},
  {"recnr": 22, "recid": "19053023", "slot": 21,"edt1": 2267.456, "edt2": 8267.560,"ert1": 347.971, "ert2": 193.718,"gdt": 2878.164},
  {"recnr": 23, "recid": "19042918", "slot": 20,"edt1": 2264.495, "edt2": 8256.316,"ert1": 347.702, "ert2": 193.585,"gdt": 2874.242},
  {"recnr": 24, "recid": "19033023", "slot": 19,"edt1": 2261.732, "edt2": 8245.799,"ert1": 347.443, "ert2": 193.461,"gdt": 2870.651}
]}

Nieuwe DSMRloggerAPI firmware flashen

Nieuwe DSMRloggerAPI firmware kan via de web-interface van de DSMR-logger "Over the Air" geflashed worden maar mocht dat, om de één of andere reden niet lukken dan kunnen de pré compiled binaries ook bedraad geflashed worden.

Hoe je de firmware moet upgraden van DSMRloggerWS naar DSMRloggerAPI staat beschreven!

Pre compiled Binaries

Op staan van de major releases binaries van zowel de firmware als van het LittleFS bestand systeem.

Klik op "" en download het meest recente of door jou gewenste DSMRloggerAPI.ino.bin bestand (deze staan onder iedere release beschrijving bij "Assets").

Bij een gewone firmware update is het meestal niet nodig ook het bestand system opnieuw te downloaden en te flashen.

Onder iedere release beschrijving staan de bijbehorende "Assets".

Vanaf versie 3 van de firmware zijn er geen compiler opties meer die de firmware voor een bepaald type Slimme Meter geschikt maken. Alleen in het zeer specifieke geval waarbij je wilt testen of debuggen kan het nodig zijn om zelf de binaries te compileren.

OTA flashen met de Update Server

Ga nu op de DSMR-logger naar de FSmanager (door op het icoon te klikken) en klik vervolgens op de knop [Update Firmware].

Klik nu op de bovenste [Choose File] knop

Selecteer in het popup-window het zojuist gedownloade DSMRloggerAPI.ino.bin file:

Klik op [Open] of [Select] en klik vervolgens op de knop [Flash Firmware]. Na enige tijd verschijnt het volgende scherm:

.. waarna, zodra de teller op nul staat, het hoofdscherm van de DSMR-logger weer verschijnt.

Alleen als in de beschrijving van een release staat dat ook het bestand system opnieuw geflased moet worden moet u dit doen. In veel gevallen zal volstaan om eventueel een bepaald bestand naar de DSMR-logger te uploaden. Ook dit zal dan expliciet in de release beschrijving staan.

Bedraad flashen met het Espressif Flash Download tool

Espressif heeft voor zijn ESP-boards een (helaas alleen Windows) tool ontwikkeld dat het bedraad flashen erg eenvoudig maakt.

Het tool kun je downloaden.

Pak het .zip file uit (unzip) en start het door op het mapje te klikken:

Klik nu op "flash_download_tools.exe" en selecteer [esp8266 DownloadTool] in het volgende scherm:

Selecteer de twee bin bestanden. Het DSMRloggerAPI.ino.bin bestand moet op adres 0x0 starten, het DSMRloggerAPI.mklittlefs.bin op adres 0x200000. Selecteer de COM poort waar de DSMR-logger op is aangesloten, zet de DSMR-logger in flash mode en klik op [START]. Na enige tijd krijg je de melding dat alles goed is gegaan.

Arduino IDE geschikt maken voor het compileren van de DSMRloggerAPI firmware

In de volgende vier hoofdstukken wordt beschreven wat je moet doen om zélf de DSMRloggerAPI firmware te compileren en naar de DSMR-logger te flashen.

  • Arduino IDE

  • ESP8266 Core

  • Installatie Bibliotheken

  • ESP8266 LittleFS Data Upload Tool

OTA met de Update Server flashen
Bedraad met het Espressif flash Tool
hier
github
releases
hier

Slimme Meter gerelateerde restAPI's

Systeem Informatie van de Slimme Meter

GET http://dsmr-api.local/api/v1/sm/info

Geeft systeem een JSON string met informatie van de Slimme Meter, zoals ID's en Serie nummers, terug.

{"info":[
  {"name": "identification", "value": "XMX5LABCDB2410065887"},
  {"name": "p1_version", "value": "50"},
  {"name": "equipment_id", "value": "4530303336303000000000000000000040"},
  {"name": "electricity_tariff", "value": "0001"},
  {"name": "mbus1_device_type", "value": 3},
  {"name": "mbus1_equipment_id_tc", "value": "4730303339303031363532303530323136"},
  {"name": "mbus4_device_type", "value": 5},
  {"name": "mbus4_equipment_id_tc", "value": "4730303339303031344444444444444444"}
]}

Informatie uit het laatst gelezen telegram

GET http://dsmr-api.local/api/v1/sm/actual

Geeft de actuele meterstanden van de Slimme Meter terug in een JSON string.

{"actual":[
  {"name": "timestamp", "value": "210419050001S"},
  {"name": "energy_delivered_tariff1", "value": 2332.511, "unit": "kWh"},
  {"name": "energy_delivered_tariff2", "value": 8514.767, "unit": "kWh"},
  {"name": "energy_returned_tariff1", "value": 353.841, "unit": "kWh"},
  {"name": "energy_returned_tariff2", "value": 196.645, "unit": "kWh"},
  {"name": "power_delivered", "value": 1.880, "unit": "kW"},
  {"name": "power_returned", "value": 0.000, "unit": "kW"},
  {"name": "voltage_l1", "value": 239.000, "unit": "V"},
  {"name": "voltage_l2", "value": 236.000, "unit": "V"},
  {"name": "voltage_l3", "value": 237.000, "unit": "V"},
  {"name": "current_l1", "value": 3, "unit": "A"},
  {"name": "current_l2", "value": 0, "unit": "A"},
  {"name": "current_l3", "value": 0, "unit": "A"},
  {"name": "power_delivered_l1", "value": 0.500, "unit": "kW"},
  {"name": "power_delivered_l2", "value": 0.899, "unit": "kW"},
  {"name": "power_delivered_l3", "value": 0.480, "unit": "kW"},
  {"name": "power_returned_l1", "value": 0.000, "unit": "kW"},
  {"name": "power_returned_l2", "value": 0.000, "unit": "kW"},
  {"name": "power_returned_l3", "value": 0.000, "unit": "kW"},
  {"name": "gas_delivered", "value": 2963.380, "unit": "m3"}
]}

Informatie uit het laatst gelezen telegram

GET http://dsmr-api.local/api/v0/sm/actual

Deze api dient voor backwards compatibility met de DSMRloggerWS firmware. Deze api call geeft de actuele informatie van de Slimme Meter terug in een JSON string.

{
  "timestamp": "170102105001S",
  "energy_delivered_tariff1": 146.380,
  "energy_delivered_tariff2": 70.511,
  "energy_returned_tariff1": 111.164,
  "energy_returned_tariff2": 75.530,
  "power_delivered": 1.750,
  "power_returned": 1.270,
  "voltage_l1": 242.000,
  "voltage_l2": 240.000,
  "voltage_l3": 234.000,
  "current_l1": 0,
  "current_l2": 0,
  "current_l3": 0,
  "power_delivered_l1": 1.046,
  "power_delivered_l2": 0.464,
  "power_delivered_l3": 0.243,
  "power_returned_l1": 0.669,
  "power_returned_l2": 0.521,
  "power_returned_l3": 0.078,
  "gas_delivered": 100.550
}

Alle velden die de dsmr library terug kan geven

GET http://dsmr-api.local/api/v1/sm/fields

Geeft een JSON string met alle velden die door de DSMRloggerAPI firmware kunnen worden terug gegeven. Let op! Niet iedere Slimme Meter geeft ook al deze velden terug. Als de Slimme meter een veld niet terug geeft heeft "value" de waarde "-".

{"fields":[
  {"name": "identification", "value": "XYZ12345678909897654"},
  {"name": "p1_version", "value": "50"},
  {"name": "p1_version_be", "value": "-"},
  {"name": "timestamp", "value": "210610103351S"},
  {"name": "equipment_id", "value": "45303033363030333754321098765"},
  {"name": "energy_delivered_tariff1", "value": 4491.266, "unit": "kWh"},
  {"name": "energy_delivered_tariff2", "value": 6065.275, "unit": "kWh"},
  {"name": "energy_returned_tariff1", "value": 788.990, "unit": "kWh"},
  {"name": "energy_returned_tariff2", "value": 1809.853, "unit": "kWh"},
  {"name": "electricity_tariff", "value": "0002"},
  {"name": "power_delivered", "value": 0.000, "unit": "kW"},
  {"name": "power_returned", "value": 1.023, "unit": "kW"},
  {"name": "electricity_threshold", "value": "-"},
  {"name": "electricity_switch_position", "value": "-"},
  {"name": "electricity_failures", "value": 11},
  {"name": "electricity_long_failures", "value": 1},
  {"name": "electricity_failure_log", "value": "(1)(0-0:96.7.19)(200210104719W)(0000014540*s)"},
  {"name": "electricity_sags_l1", "value": 10},
  {"name": "electricity_sags_l2", "value": 7},
  {"name": "electricity_sags_l3", "value": 9},
  {"name": "electricity_swells_l1", "value": 0},
  {"name": "electricity_swells_l2", "value": 0},
  {"name": "electricity_swells_l3", "value": 0},
  {"name": "message_short", "value": "-"},
  {"name": "message_long", "value": ""},
  {"name": "voltage_l1", "value": 235.000, "unit": "V"},
  {"name": "voltage_l2", "value": 238.000, "unit": "V"},
  {"name": "voltage_l3", "value": 239.000, "unit": "V"},
  {"name": "current_l1", "value": 0.000, "unit": "A"},
  {"name": "current_l2", "value": 0.000, "unit": "A"},
  {"name": "current_l3", "value": 5.000, "unit": "A"},
  {"name": "power_delivered_l1", "value": 0.075, "unit": "kW"},
  {"name": "power_delivered_l2", "value": 0.106, "unit": "kW"},
  {"name": "power_delivered_l3", "value": 0.000, "unit": "kW"},
  {"name": "power_returned_l1", "value": 0.000, "unit": "kW"},
  {"name": "power_returned_l2", "value": 0.000, "unit": "kW"},
  {"name": "power_returned_l3", "value": 1.205, "unit": "kW"},
  {"name": "mbus1_device_type", "value": 3},
  {"name": "mbus1_equipment_id_tc", "value": "47303044449303031363532309876543211"},
  {"name": "mbus1_equipment_id_ntc", "value": "-"},
  {"name": "mbus1_valve_position", "value": "-"},
  {"name": "mbus1_delivered", "value": 3845.379, "unit": "m3"},
  {"name": "mbus1_delivered_ntc", "value": "-"},
  {"name": "mbus1_delivered_dbl", "value": "-"},
  {"name": "mbus2_device_type", "value": "-"},
  {"name": "mbus2_equipment_id_tc", "value": "-"},
  {"name": "mbus2_equipment_id_ntc", "value": "-"},
  {"name": "mbus2_valve_position", "value": "-"},
  {"name": "mbus2_delivered", "value": 0.000, "unit": "GJ"},
  {"name": "mbus2_delivered_ntc", "value": "-"},
  {"name": "mbus2_delivered_dbl", "value": "-"},
  {"name": "mbus3_device_type", "value": "-"},
  {"name": "mbus3_equipment_id_tc", "value": "-"},
  {"name": "mbus3_equipment_id_ntc", "value": "-"},
  {"name": "mbus3_valve_position", "value": "-"},
  {"name": "mbus3_delivered", "value": 0.000, "unit": "m3"},
  {"name": "mbus3_delivered_ntc", "value": "-"},
  {"name": "mbus3_delivered_dbl", "value": "-"},
  {"name": "mbus4_device_type", "value": "-"},
  {"name": "mbus4_equipment_id_tc", "value": "-"},
  {"name": "mbus4_equipment_id_ntc", "value": "-"},
  {"name": "mbus4_valve_position", "value": "-"},
  {"name": "mbus4_delivered", "value": 0.000, "unit": "m3"},
  {"name": "mbus4_delivered_ntc", "value": "-"},
  {"name": "mbus4_delivered_dbl", "value": "-"}
]}

Informatie van één veld uit het laatst gelezen telegram

GET http://dsmr-api.local/api/v1/sm/fields/<fieldName>

Geeft een JSON string met informatie over één veld terug. Bijvoorbeeld: http://dsmr-api.local/api/v1/sm/fields/current_l2

{"fields":[
  {"name": "timestamp", "value": "210315080001S"},
  {"name": "current_l2", "value": 1, "unit": "A"}
]}

Onbewerkt telegram uit de Slimme Meter

GET http://dsmr-api.local/api/v1/sm/telegram

Geeft een telegram terug precies zo als de Slimme Meter die ook afgeeft, dus inclusief "\r\n" line endings en inclusief de CheckSum!

/XMX5LABCDE2410065447

1-3:0.2.8(50)
0-0:1.0.0(210610104031S)
0-0:96.1.1(4530304446303033373839312345678906)
1-0:1.8.1(004491.266*kWh)
1-0:1.8.2(006065.310*kWh)
1-0:2.8.1(000788.990*kWh)
1-0:2.8.2(001809.893*kWh)
0-0:96.14.0(0002)
1-0:1.7.0(00.037*kW)
1-0:2.7.0(00.000*kW)
0-0:96.7.21(00011)
0-0:96.7.9(00001)
1-0:99.97.0(1)(0-0:96.7.19)(200210104719W)(0000014540*s)
1-0:32.32.0(00010)
1-0:52.32.0(00007)
1-0:72.32.0(00009)
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(238.0*V)
1-0:52.7.0(238.0*V)
1-0:72.7.0(238.0*V)
1-0:31.7.0(002*A)
1-0:51.7.0(000*A)
1-0:71.7.0(003*A)
1-0:21.7.0(00.598*kW)
1-0:41.7.0(00.102*kW)
1-0:61.7.0(00.000*kW)
1-0:22.7.0(00.000*kW)
1-0:42.7.0(00.000*kW)
1-0:62.7.0(00.663*kW)
0-1:24.1.0(003)
0-1:96.1.0(4730305559303031363839312345678906)
0-1:24.2.1(210610104007S)(03845.376*m3)
!344A

Beschrijving restAPI's

Alle beschikbare gegevens kunnen via restAPI call's bij de DSMR-logger worden opgevraagd. De restAPI's zijn verdeelt in drie groepen. Informatie die met de hardware en firmware te maken heeft (/dev), informatie die met de Slimme Meter te maken heeft (/sm) en historische gegevens die, aan de hand van de door de Slimme Meter afgegeven gegevens, door de DSMR-logger in bestanden worden opgeslagen (/hist).

  • DSMR-logger gerelateerde restAPI's

  • Slimme Meter gerelateerde restAPI's

  • Historie gerelateerde restAPI's

Aanroepen restAPI vanuit verschillende systemen

Een restAPI kan op verschillende manieren worden aangeroepen.

  • Javascript

  • Unix command

  • Home Assistant

  • Arduino Mega met Ethernet Shield

  • ESP8266

  • ESP32

Javascript

    fetch("http://dsmr-api.local/api/v1/dev/time")
      .then(response => response.json())
      .then(json => {
        console.log("parsed .., data is ["+ JSON.stringify(json)+"]");
        for( let i in json.devtime ){
            if (json.devtime[i].name == "time")
            {
              console.log("Got new time ["+json.devtime[i].value+"]");
              document.getElementById('theTime').innerHTML = json.devtime[i].value;
            }
          }
      })
      .catch(function(error) {
        var p = document.createElement('p');
        p.appendChild(
          document.createTextNode('Error: ' + error.message)
        );
      });     

Unix command

curl http://dsmr-api.local/api/v1/dev/time

Geeft dit als output:

{"devtime":[
   {"name": "time", "value": "2020-03-23 11:45:40"},
   {"name": "epoch", "value": 1584963941}
]}

Home Assistant

configuration.yaml:

### configuration.yaml
### DSMRloggerAPI 
  - platform: rest
    name: "Levering"
    resource: http://<ip-dsmr-logger>/api/v1/sm/fields/power_returned
    unit_of_measurement: "kWh"
    value_template: '{{ value_json.fields[1].value | round(3) }}'

  - platform: rest
    name: "Laatste Update restAPI"
    resource: http://192.168.2.106/api/v1/sm/fields/timestamp
#   value_template: '{{ value_json.fields[0].value }}'
    value_template: >
      {{      value_json.fields[0].value[4:6] + "-" + 
              value_json.fields[0].value[2:4] + "-" + 
         "20"+value_json.fields[0].value[0:2] + "   " + 
              value_json.fields[0].value[6:8] + ":" + 
              value_json.fields[0].value[8:10] + ":" + 
              value_json.fields[0].value[10:13] }}

  - platform: rest
    name: "Levering l1"
    resource: http://192.168.2.106/api/v1/sm/fields/power_returned_l1
    unit_of_measurement: "Watt"
    value_template: '{{ (value_json.fields[1].value | float * 1000.0) | round(1) }}'

  - platform: rest
    name: "Levering l2"
    resource: http://192.168.2.106/api/v1/sm/fields/power_returned_l2
    unit_of_measurement: 'Watt'
    value_template: '{{ (value_json.fields[1].value | float * 1000.0) | round(1) }}'

  - platform: rest
    name: "Levering l3"
    resource: http://192.168.2.106/api/v1/sm/fields/power_returned_l3
    unit_of_measurement: 'Watt'
    value_template: '{{ (value_json.fields[1].value | float * 1000.0) | round(1) }}'

geeft dit resultaat:

Met hassOS lukt het mij niet om bij resource de hostname (DSMR-API.local) te gebruiken. Met het IP adres lukt het wel.

Arduino Mega met Ethernet shield

Ik ben niet erg handig met JSON libraries (liefst parse ik de data helemaal zelf zodat ik ook alles zelf "in de hand" heb). Het zou mij daarom ook niet verbazen als onderstaande code simpeler en beter kan.

Getest door Bert Diepeveen (met dank!).

// in the main program:
#include <Ethernet.h>
#include <SPI.h>
#include <Arduino_JSON.h>  // let op! dit is een andere library dan "ArduinoJson"
//
#define _IS_ARDUINO_MEGA
#define _DSMR_IP_ADDRESS    "IP_ADDRESS_OF_YOUR_DSMR_LOGGER"
#define _READINTERVAL       60000
//
const char *DSMRprotocol  = "http://";
const char *DSMRserverIP  = _DSMR_IP_ADDRESS;
const char *DSMRrestAPI   = "/api/v1/sm/actual";
String      payload;
int         httpResponseCode;
uint32_t    lastRead      = 0;

//--- catch specific fields for further processing -------
//--- these are just an example! see readDsmrLogger() ----
String  timeStamp;
int     voltageL1, currentL1;
float   pwrDelivered, pwrReturned;


//--------------------------------------------------------------------------
bool dsmrGETrequest() 
{
  EthernetClient ETHclient;
  HttpClient DSMRclient = HttpClient(ETHclient, DSMRserverIP, 80);

  payload = ""; 
   
  Serial.println(F("making GET request"));
  DSMRclient.get(DSMRrestAPI);

  // read the response code and body of the response
  httpResponseCode = DSMRclient.responseStatusCode();
  Serial.print(F("http Response Code: "));
  Serial.println(httpResponseCode);

  if (httpResponseCode <= 0)
  {
    return false;
  }

  payload    = DSMRclient.responseBody();
  //--debug-Serial.print(F("payload: "));
  //--debug-Serial.println(payload);
  
  // Free resources
  DSMRclient.stop();

  return true;
  
} // dsmrGETrequest()


//--------------------------------------------------------------------------
void setup()
{
  // setup Serial ..
  .
  .
  // Initialize Ethernet library
  byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
  if (!Ethernet.begin(mac)) 
  {
    Serial.println(F("Failed to configure Ethernet"));
    return;
  }
  delay(1000);
  .
  .
  lastRead = millis() + _READINTERVAL;
  
}  // setup()

Verder moet je de Algemene functies onderaan deze pagina in je sketch opnemen.

ESP8266 (WiFi)

Ik ben niet erg handig met JSON libraries (liefst parse ik de data helemaal zelf zodat ik ook alles zelf "in de hand" heb). Het zou mij daarom ook niet verbazen als onderstaande code simpeler en beter kan.

// Include in the main program:
#include <WiFi.h>
#include <Arduino_JSON.h>  // let op! Niet ArduinoJson!
//
#define _IS_ESP8266
#define _DSMR_IP_ADDRESS    "IP_ADDRESS_OF_YOUR_DSMR_LOGGER"
#define _WIFI_SSID          "YOUR_WIFI_SSID"
#define _WIFI_PASSWRD       "YOUR_WIF_PASSWORD"
#define _READINTERVAL       60000
//
const char *ssid          = _WIFI_SSID;
const char *password      = _WIFI_PASSWRD;
//
const char *DSMRprotocol  = "http://";
const char *DSMRserverIP  = _DSMR_IP_ADDRESS;
const char *DSMRrestAPI   = "/api/v1/sm/actual";
String      payload;
int         httpResponseCode;
uint32_t    lastRead      = 0;

//--- catch specific fields for further processing -------
//--- these are just an example! see readDsmrLogger() ----
String  timeStamp;
int     voltageL1, currentL1;
float   pwrDelivered, pwrReturned;

//--------------------------------------------------------------------------
bool dsmrGETrequest() 
{
  WiFiClient  DSMRclient;

  payload = ""; 

  Serial.print("DSMRclient.connect("); Serial.print(DSMRserverIP);
  Serial.println(", 80)");
  if (!DSMRclient.connect(DSMRserverIP, 80))
  {
    Serial.println(F("error connecting to DSMRlogger "));
    payload = "{\"actual\":[{\"name\":\"httpresponse\", \"value\":\"error connecting\"}]}";
    return false;
  }

  //-- normal operation 
  DSMRclient.print(F("GET "));
  DSMRclient.print(DSMRrestAPI);
  DSMRclient.println(" HTTP/1.1");
  DSMRclient.print(F("Host: "));
  DSMRclient.println(DSMRserverIP);
  DSMRclient.println(F("Connection: close"));
  DSMRclient.println();

  DSMRclient.setTimeout(1000);

  //--debug-Serial.println("find(HTTP/1.1)..");
  DSMRclient.find("HTTP/1.1");  // skip everything up-until "HTTP/1.1"
  //--debug-Serial.print("DSMRclient.parseInt() ==> ");
  httpResponseCode = DSMRclient.parseInt(); // parse status code
  
  Serial.print("HTTP Response code: ");
  Serial.println(httpResponseCode);
  
  if (httpResponseCode <= 0) 
  {
    payload = "{\"actual\":[{\"name\":\"httpresponse\", \"value\": "+String(httpResponseCode)+"}]}";
    return false;
  }

  // Skip HTTP headers
  if (!DSMRclient.find("\r\n\r\n")) 
  {
    Serial.println(F("Invalid response"));
    payload = "{\"actual\":[{\"name\":\"httpresponse\", \"value\": "+String(httpResponseCode)+"}]}";
    return false;
  }

  while(DSMRclient.connected()) 
  {
    if (DSMRclient.available())
    {
      // read an incoming lines from the server:
      String line = DSMRclient.readStringUntil('\r');
      line.replace("\n", "");
      if (   (line[0] == '{') || (line[0] == ',') 
          || (line[0] == '[') || (line[0] == ']') )
      {
        //--debug-Serial.print(line);
        payload += line;
      }
    }
  }
  //--debug-Serial.println();
  
  // Free resources
  DSMRclient.stop();

  return true;
    
} // dsmrGETrequest()


//--------------------------------------------------------------------------
void setup() 
{
  // setup serial ..
  .
  .
  // setup WiFi ..
  WiFi.begin(ssid, password);
  Serial.println("Connecting");
  while(WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to WiFi network with IP Address: ");
  Serial.println(WiFi.localIP());
  
  lastRead = millis() + _READINTERVAL;
  .
  .
    
} // setup()

Verder moet je de Algemene functies onderaan deze pagina in je sketch opnemen.

ESP32 (WiFi)

With some help from Random Nerd Tutorials.

Ik ben niet erg handig met JSON libraries (liefst parse ik de data helemaal zelf zodat ik ook alles zelf "in de hand" heb). Het zou mij daarom ook niet verbazen als onderstaande code simpeler en beter kan.

// Include in the main program:
#include <WiFi.h>
#include <HTTPClient.h>
#include <Arduino_JSON.h>  // let op! Niet ArduinoJson!
//
#define _IS_ESP32
#define _DSMR_IP_ADDRESS    "IP_ADDRESS_OF_YOUR_DSMR_LOGGER"
#define _WIFI_SSID          "YOUR_WIFI_SSID"
#define _WIFI_PASSWRD       "YOUR_WIF_PASSWORD"
#define _READINTERVAL       60000
//
const char *ssid          = _WIFI_SSID;
const char *password      = _WIFI_PASSWRD;
//
const char *DSMRprotocol  = "http://";
const char *DSMRserverIP  = _DSMR_IP_ADDRESS;
const char *DSMRrestAPI   = "/api/v1/sm/actual";
String      payload;
int         httpResponseCode;
uint32_t    lastRead      = 0;

//--- catch specific fields for further processing -------
//--- these are just an example! see readDsmrLogger() ----
String  timeStamp;
int     voltageL1, currentL1;
float   pwrDelivered, pwrReturned;

//--------------------------------------------------------------------------
bool dsmrGETrequest() 
{
  HTTPClient DSMRclient;
    
  // Your IP address with path or Domain name with URL path 
  DSMRclient.begin(String(DSMRprotocol) + String(DSMRserverIP)+String(DSMRrestAPI));
  
  // Send HTTP GET request
  httpResponseCode = DSMRclient.GET();

  Serial.print("HTTP Response code: ");
  Serial.println(httpResponseCode);
  
  payload = ""; 
  
  if (httpResponseCode > 0) 
  {
    payload = DSMRclient.getString();
  }
  else 
  {
    payload = "{\"actual\":[{\"name\":\"httpresponse\", \"value\": "+String(httpResponseCode)+"}]}";
    // Free resources
    DSMRclient.end();
    return false;
  }

  // Free resources
  DSMRclient.end();
  
  return true;

} // dsmrGETrequest()


//--------------------------------------------------------------------------
void setup() 
{
  // setup Serial ..
  .
  .
  // setup WiFi ..
  WiFi.begin(ssid, password);
  Serial.println("Connecting");
  while(WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to WiFi network with IP Address: ");
  Serial.println(WiFi.localIP());
  
  lastRead = millis() + _READINTERVAL;
  .
  .
    
} // setup()

Verder moet je de Algemene functies onderaan deze pagina in je sketch opnemen.

Algemene functies

//--------------------------------------------------------------------------
void readDsmrLogger()
{
  int fieldNr = 0;

  dsmrGETrequest();

  Serial.println();
  Serial.println(F("==== Start parsing payload ======================="));
    
  // This is how the "actual" JSON object looks like:
  //   {"actual":[
  //       {"name":"timestamp","value":"200911140716S"}
  //      ,{"name":"energy_delivered_tariff1","value":3433.297,"unit":"kWh"}
  //      ,{"name":"energy_delivered_tariff2","value":4453.041,"unit":"kWh"}
  //      ,{"name":"energy_returned_tariff1","value":678.953,"unit":"kWh"}
  //          ...
  //      ,{"name":"power_delivered_l2","value":0.071,"unit":"kW"}
  //      ,{"name":"power_delivered_l3","value":0,"unit":"kW"}
  //      ,{"name":"power_returned_l1","value":0,"unit":"kW"}
  //      ,{"name":"power_returned_l2","value":0,"unit":"kW"}
  //      ,{"name":"power_returned_l3","value":0.722,"unit":"kW"}
  //      ,{"name":"gas_delivered","value":2915.08,"unit":"m3"}
  //    ]}

  //--debug-Serial.print(F("payload: "));
  //--debug-Serial.println(payload);

  JSONVar dsmrJsonObject = JSON.parse(payload);
  
  // JSON.typeof(jsonVar) can be used to get the type of the var
  if (JSON.typeof(dsmrJsonObject) == "undefined") 
  {
    Serial.println(F("Parsing failed!"));
    return;
  }
  //--debug-Serial.print("JSON.typeof(dsmrJsonObject) = ");
  //--debug-Serial.println(JSON.typeof(dsmrJsonObject)); 

  JSONVar dsmrJsonField = dsmrJsonObject["actual"];

  // dsmrJsonField.length() can be used to get the length of the array
  //--debug-Serial.print("dsmrJsonField.length() = ");
  //--debug-Serial.println(dsmrJsonField.length());
  //--debug-Serial.println();
  
  for (int i = 0; i < dsmrJsonField.length(); i++)
  {
    fieldNr++;
    //--debug-Serial.print(dsmrJsonField[i]);
    String sName  = (const char *)dsmrJsonField[i]["name"];
    String sValue = (const char *)dsmrJsonField[i]["value"];
    if (sValue == "") sValue = String((double)dsmrJsonField[i]["value"]);
    String sUnit  = (const char *)dsmrJsonField[i]["unit"];
    //---- list all fields and values ----
    Serial.print(sName);  Serial.print(" \t");
    Serial.print(sValue); Serial.print(" ");
    Serial.print(sUnit);
    Serial.println();
    //--- now catch some fields of interrest for further 
    //--- processing
    //--- you need to declare the fields to be captured global
    if (sName == "timestamp")       timeStamp    = sValue;
    if (sName == "voltage_l1")      voltageL1    = sValue.toInt();
    if (sName == "current_l1")      currentL1    = sValue.toInt();
    if (sName == "power_delivered") pwrDelivered = sValue.toFloat();
    if (sName == "power_returned")  pwrReturned  = sValue.toFloat();
  }

  Serial.println(F("=================================================="));
  Serial.print(F("Parsed [")); Serial.print(fieldNr); Serial.println(F("] fields"));
      
} // readDsmrLogger()

In de main loop() function moet deze code komen:


//--------------------------------------------------------------------------
void loop()
{
  if ((millis() - lastRead) > _READINTERVAL)
  {
    lastRead = millis();
    Serial.println("\r\nread API from DSMR-logger...");
    readDsmrLogger();
    Serial.println(F("\r\nCaptured fields .."));
    Serial.print(F("timestamp    : \t")); Serial.println(timeStamp);
    Serial.print(F("voltage L1   : \t")); Serial.println(voltageL1);
    Serial.print(F("current L1   : \t")); Serial.println(currentL1);
    Serial.print(F("pwrDelivered : \t")); Serial.println(pwrDelivered);
    Serial.print(F("pwrReturned  : \t")); Serial.println(pwrReturned);
  }
  .
  .
}  // loop()

De source van deze code kun je op github vinden.

Andere systemen

Veel andere systemen hebben hun eigen manier om restAPI's op te vragen. Lees hiervoor de betreffende documentatie.

Installatie Bibliotheken

Nu je een ArduinoIDE hebt waarmee je ESP8266’s kunt programmeren (flashen) zul je ontdekken dat er door briljante mensen software is ontwikkeld die je kunt gebruiken om complexe projecten te realiseren, zonder dat je zelf het wiel hoeft uit te vinden.

Deze software wordt veelal in de vorm van een bibliotheek aangeboden en je hoeft zo’n bibliotheek alleen maar te installeren om er gebruik van te kunnen maken.

vind je de officiële instructies voor het installeren van bibliotheken met de ArduinoIDE.

Stel je wilt je ESP8266 benaderen met een telnet client zodat je vanaf je Desktop of Laptop op de ESP8266 kunt inloggen. Je hebt op de ESP8266 dan een telnet server nodig. Met wat Googelen naar "ESP8266 telnet" blijken hier een aantal bibliotheken voor te bestaan.

Als voorbeeld nemen we TelnetStream van Juraj Andrassy. Zijn telnet implementatie kun je vanaf deze pagina als bibliotheek downloaden.

Om de bibliotheek te installeren klik je op de groene [Clone or download] knop en selecteer je [Download ZIP].

Onthou waar je het zip-file bewaard!

Ga nu naar de Arduino IDE en selecteer:

[Sketch]=>[Include Library] =>[Add .ZIP Library]

Er verschijnt een selectie window waar je het zojuist ge-download-de bestand selecteert.

Klik op [Choose].

De bibliotheek is nu geïnstalleerd en klaar om gebruikt te worden. De meeste bibliotheken komen met een aantal voorbeeld programma’s waarmee je kunt leren hoe je de bibliotheek kunt gebruiken.

Juraj Andrassy is erg summier met zijn uitleg maar gelukkig is er een map met voorbeelden (nou ja, één voorbeeld).

(sorry, het plaatje is een beetje verknipt)

Klik je nu op[TelnetStreamTest]dan wordt dit voorbeeld programma in de Arduino IDE geladen.

Installeer op dezelfde manier de andere bibliotheken die voor de DSMRloggerAPIfirmware nodig zijn (zie het hoofdstuk).

DSMRloggerAPI firmware

Om de firmware op de DSMR-logger te krijgen moeten een aantal stappen worden ondernomen. Hieronder staat welke stappen dat zijn.

Benodigde Bibliotheken
DSMRloggerAPI Firmware
Firmware Flashen
Data map Flashen
Hier
github
volgende

DSMR-logger gerelateerde restAPI's

informatie over de DSMR-logger

GET http://dsmr-api.local/api/v1/dev/info

Deze restAPI geeft informatie terug van de DSMR-logger

{"devinfo":[
    {"name": "author", "value": "Willem Aandewiel (www.aandewiel.nl)"},
    {"name": "hostname", "value": "DSMR-108"},
    {"name": "fwversion", "value": "v0.2.9 (31-01-2020)"},
    {"name": "compiled", "value": "Jan 31 2020 12:22:10"},
    {"name": "freeheap", "value": 16224, "unit": "bytes"},
    {"name": "maxfreeblock", "value": 15400, "unit": "bytes"},
    {"name": "chipid", "value": "cc6156"},
    {"name": "coreversion", "value": "2_6_3"},
    {"name": "sdkversion", "value": "2.2.1(cfd48f3)"},
    {"name": "cpufreq", "value": 80, "unit": "MHz"},
    {"name": "sketchsize", "value": 521.953, "unit": "kB"},
    {"name": "freesketchSpace", "value": 1524.000, "unit": "kB"},
    {"name": "flashchipid", "value": "00164020"},
    {"name": "flashchipsize", "value": 4.000, "unit": "MB"},
    {"name": "flashchiprealsize", "value": 4.000, "unit": "MB"},
    {"name": "flashchipspeed", "value": 80.000, "unit": "MHz"},
    {"name": "flashchipmode", "value": "DOUT"},
    {"name": "boardtype", "value": "ESP8266_GENERIC"},
    {"name": "ssid", "value": "YourWiFi"},
    {"name": "ipaddress", "value": "192.168.1.106"},
    {"name": "wifirssi", "value": -52},
    {"name": "hostname", "value": "DSMR-API"},
    {"name": "uptime", "value": "0(d):00(h):10"},
    {"name": "telegramcount", "value": 56},
    {"name": "telegramerrors", "value": 0},
    {"name": "mqttbroker", "value": "mosqitto.org:1883"},
    {"name": "mqttinterval", "value": 120},
    {"name": "mqttbroker_connected", "value": "yes"},
    {"name": "mindergas_response", "value": "countdown for sending"},
    {"name": "mindergas_status", "value": "@31|12:28 -> :0"},
    {"name": "reboots", "value": 6},
    {"name": "lastreset", "value": "Software/System restart"}
]}

Systeem Tijd

GET http://dsmr-api.local/api/vi/dev/time

Deze restAPI geeft de systeem tijd van de DSMR-logger

{"devtime":[
  {"name": "timestamp", "value": "201027085021S"},
  {"name": "time", "value": "2020-10-27 08:50:21"},
  {"name": "epoch", "value": 1603788623},
  {"name": "uptime", "value": "0(d)-01:22(H:m)"},
  {"name": "uptime_secs", "value": 4955, "unit": "sec"}
]}

Instellingen

GET http://dsmr-api.local/api/v1/dev/settings

Deze restAPI geeft alle, door de gebruiker muteerbare, settings terug

{"settings":[
  {"name": "hostname", "value":"DSMR-API", "type": "s", "maxlen": 29},
  {"name": "pre_dsmr40", "value": 0, "type": "i", "min": 0, "max": 1},
  {"name": "ed_tariff1", "value": 0.50000, "type": "f", "min": 0, "max": 10},
  {"name": "ed_tariff2", "value": 0.50000, "type": "f", "min": 0, "max": 10},
  {"name": "er_tariff1", "value": 0.50000, "type": "f", "min": 0, "max": 10},
  {"name": "er_tariff2", "value": 0.50000, "type": "f", "min": 0, "max": 10},
  {"name": "gd_tariff", "value": 0.50000, "type": "f", "min": 0, "max": 10},
  {"name": "electr_netw_costs", "value": 15.14, "type": "f", "min": 0, "max": 100},
  {"name": "gas_netw_costs", "value": 11.10, "type": "f", "min": 0, "max": 100},
  {"name": "mbus1_type", "value": 0, "type": "i", "min": 0, "max": 200},
  {"name": "mbus2_type", "value": 3, "type": "i", "min": 0, "max": 200},
  {"name": "mbus3_type", "value": 5, "type": "i", "min": 0, "max": 200},
  {"name": "mbus4_type", "value": 0, "type": "i", "min": 0, "max": 200},
  {"name": "sm_has_fase_info", "value": 1, "type": "i", "min": 0, "max": 1},
  {"name": "tlgrm_interval", "value": 5, "type": "i", "min": 2, "max": 60},
  {"name": "oled_type", "value": 1, "type": "i", "min": 0, "max": 2},
  {"name": "oled_screen_time", "value": 10, "type": "i", "min": 1, "max": 300},
  {"name": "oled_flip_screen", "value": 0, "type": "i", "min": 0, "max": 1},
  {"name": "index_page", "value":"DSMRindex.html", "type": "s", "maxlen": 49},
  {"name": "mqtt_broker", "value":"192.168.21.244", "type": "s", "maxlen": 100},
  {"name": "mqtt_broker_port", "value": 1883, "type": "i", "min": 1, "max": 9999},
  {"name": "mqtt_user", "value":"", "type": "s", "maxlen": 39},
  {"name": "mqtt_passwd", "value":"", "type": "s", "maxlen": 39},
  {"name": "mqtt_toptopic", "value":"DSMR-API", "type": "s", "maxlen": 20},
  {"name": "mqtt_interval", "value": 60, "type": "i", "min": 0, "max": 600},
  {"name": "mindergastoken", "value":"Ay76AFwQ", "type": "s", "maxlen": 20}
]}

Instellingen aanpassen

POST http://dsmr-api.local/api/v1/settings/{"name":"<settingVeld>","value":"<nieuweWaarde>"}

{"name":"<settingVeld>","value":"<nieuweWaarde>"}

Hieronder een opsomming van de settingsVelden:

hostname

  • type: String

  • maxlen: 29

  • Opmerking:

    • Characters

ed_tariff1 (Geleverde Energy, tarief 1)

  • type: float

  • min: 0

  • max: 10

  • decimalen: 5

ed_tariff2 (Geleverde Energy, tarief 2)

  • type: float

  • min: 0

  • max: 10

  • Decimalen: 5

er_tariff1 (Opgewekte Energy, tarief 1)

  • type: float

  • min: 0

  • max: 10

  • Decimalen: 5

er_tariff2 (Opgewekte Energy, tarief 2)

  • type: float

  • min: 0

  • max: 10

  • Decimalen: 5

gd_tariff (Gas Geleverd)

  • type: float

  • min: 0

  • max: 10

  • Decimalen: 5

electr_netw_costs (Netwerk kosten Electra)

  • type: float

  • min: 0

  • max: 100

  • Decimalen: 2

  • Opmerking:

    • Euro's per maand

gas_netw_costs (Netwerk kosten Gas)

  • type: float

  • min: 0

  • max: 100

  • Decimalen: 2

  • Opmerking:

    • Euro's per maand

tlgrm_interval (telegram Interval)

  • type: Integer

  • min: 1

  • max: 60

  • Opmerking:

    • Seconden

index_page (alternatieve index.html pagina)

  • type: String

  • maxlen: 49

  • Opmerking:

    • Characters

    • Default: DSMRindex.html

mqtt_broker (URL of IP-adres)

  • type: String

  • maxlen: 100

  • Opmerking:

    • Characters

mqtt_broker_port

  • type: Integer

  • min: 0

  • max: 9999

mqtt_user

  • type: String

  • maxlen: 39

  • Opmerking:

    • Characters

mqtt_passwd

  • type: String

  • maxlen: 29

  • Opmerking:

    • Characters

mqtt_toptopic

  • type: String

  • maxlen: 20

  • Opmerking:

    • Characters

mqtt_interval (interval voor het versturen van MQTT berichten)

  • type: Integer

  • min: 0

  • max: 600

  • Opmerking: Seconden

    • indien '0' worden er géén berichten verstuurd

    • er wordt nooit vaker een bericht verstuurd dan tlgrm_interval

mindergastoken

  • type: String

  • maxlen: 20

  • Opmerking:

    • Characters

    • indien korter dan 5 char's worden er geen gegevens naar mindergas.nl verstuurd

ESP8266 Core

Installatie ESP8266 core

In de Arduino IDE moet bij “Instellingen” de volgende URL worden ingevoerd achter “Additional Boards Manager URL’s:” (zie rood omlijnde kader)

https://arduino.esp8266.com/stable/package_esp8266com_index.json

Lees vooral de uitleg in het README.md bestand en de uitgebreide documentatie op hun website!

Er kunnen meer additional board manager URL’s worden ingevuld. Je moet ze dan achter elkaar zetten en scheiden door een komma (,).

Eventueel kun je ook het pad waar je projecten staan (de Sketchbook Location) aanpassen. Standaard verwijst deze naar je Documenten map:

C:\Users\<YourLoginName>\Documents\arduino\

.. en dat is een prima plek!

De andere instellingen kun je naar behoefte aanpassen. Hierboven staan de instellingen die ik prettig vind.

Na het maken van aanpassingen klik je op [OK].

Ga nu via de ArduinoIDE menu-balk naar [tools]-> [Board] -> [Boards Manager].

Voer bij filter “esp8266” in.

Selecteer de versie die je wilt gaan gebruiken en klik op [Install].

Let op! De DSMRloggerAPI firmware is getest met versie 2.7.4 van de Arduino/ESP8266 core. Nieuwere versies zullen zeer waarschijnlijk ook werken, maar bij problemen is het het beste om deze versie te gebruiken.

USE_MINDERGAS

Met deze optie wordt de functionaliteit om gasverbruik naar mindergas.nl te sturen geactiveerd.

Via FSmanager -> DSMR Editor -> Settings kun je het jouw toegekende authorisatie token invoeren.

img

Rubriek

Functie

Mindergas Authenticatie Token

Bij aanmelding bij mindergas.nl kun je een zgn. Authenticatie Token opvragen. Dit token heb je nodig om data naar mindergas.nl te kunnen uploaden. Voer dit token hier in.

Lees ook dit.

#define

Functie

USE_MINDERGAS

Deze define zorgt ervoor dat de Firmware één maal per dag het gasverbruik uit de Slimme Meter naar mindergas.nl zal sturen (default).

Arduino IDE

Installatie ArduinoIDE

Download en installeer de meest actuele versie van de Arduino Integrated Development Environment (IDE) voor het Operating Systeem (OS) waar jouw Desktop of Laptop computer (er zijn versies voor Windows, Linux en Mac) mee werkt. Je kunt de Software hier downloaden.

De DSMRloggerAPI firmware is getest met de ArduinoIDE v1.8.13

Let op! De Arduino IDE v1.9.x (Beta) is NIET geschikt om deze firmware mee te compileren. Tot v1.9.x zorgt de IDE ervoor dat alle tab-bladen (.ino files) achter elkaar worden geplakt tot één source file waarna van alle functies in dit gecombineerde file zgn. prototypes worden gemaakt voordat deze aan de compiler (als één file dus) wordt aangeboden. De Arduino IDE is eigenlijk de enige IDE (voor zover ik weet) die dit doet en is als zodanig dus een beetje vreemd. v1.9.x (Beta) doet dit voor AVR processoren wel maar helaas (nog) niet voor de ESP8266 processor familie.

Na het downloaden moet je het ontvangen bestand uitpakken (unzip of untar) en installeren. Dat installeren is per OS anders maar staat duidelijk op de website van Arduino aangegeven. Eenmaal geïnstalleerd kun je direct met de Arduino IDE aan de slag.

Om de IDE met de ESP8266 microprocessor te kunnen gebruiken moeten we nog wat stappen uitvoeren.

USE_UPDATE_SERVER

Met deze optie wordt het mogelijk om nieuwe Firmware naar de DSMR-logger te flashen door in de FSmanager op de knop [Update Firmware] te klikken.

en vervolgens in de Flash Utility ..

.. op [Choose file] te klikken en daarna op [Flash Firmware]

Let op! Deze functionaliteit werkt alleen als je 4MB flash geheugen hebt. Standaard heeft iedere ESP-12 dat en dus ook de DSMR-logger v4 of v4.5. Je kunt een ESP-01 eventueel upgraden naar 4MB door de aanwezige flash chip te vervangen door een W25Q32FVSIG 32Mbit flash chip.

#define

Functie

USE_UPDATE_SERVER

Om gebruik te kunnen maken van zgn. "Over The Air" (OTA) updates van de firmware en het bestand systeem moet je deze optie activeren (default). Dit kan alleen met een ESP-12 of een, met 4MB chip ge-upgrade ESP-01 bordjes! 'Normale' (1MB) ESP-01 bordjes hebben hier niet genoeg flash-geheugen voor.

Installeren benodigde bibliotheken

Voor de DSMRloggerAPI firmware zijn de volgende bibliotheken nodig:

dsmr2Lib

Deze library is een uitbreiding op de arduino-dsmr van Matthijs Kooijman. Je kunt de dsmr2Lib library hier vinden.

TimeLib

Deze is door Paul Stoffregen ontwikkeld. Je kunt hem hier downloaden.

WiFiManager

Je kunt de, door Tzapu ontwikkelde, bibliotheek hier downloaden. De DSMR-logger firmware is getest met version 0.14.0 van deze bibliotheek maar nieuwere versies zullen waarschijnlijk ook werken.

TelnetStream

Deze bibliotheek is door Juraj Andrassy ontwikkeld. Je kunt deze bibliotheek hier downloaden. De firmware is getest met version 0.0.2 maar nieuwere versies zullen waarschijnlijk ook werken.

Let op: De installatie van deze bibliotheek gaat net als de andere bibliotheken. Een update kan echter pas geïnstalleerd worden als éérst de map TelnetStream-master uit de map Libraries wordt verwijderd!

SSD1306Ascii

William Greiman heeft deze bibliotheek ontwikkeld met in het achterhoofd minimaal gebruik van resources (dus: een bibliotheek die weinig geheugen gebruikt). Je kunt de bibliotheek hier downloaden. De DSMR-logger Firmware is getest met Version 1.2.x - Commit 97a05cd on 24 Mar 2019 maar nieuwere versies zullen waarschijnlijk ook werken.

PubSubClient

Nick O'Leary (knolleary) heeft deze bibliotheek ontwikkeld. Je kunt de bibliotheek hier downloaden.

ModUpdateServer

Deze bibliotheek maakt het mogelijk om firmware en SPIFFS Over The Air te flashen naar de DSMR-logger. Deze bibliotheek is nodig vanaf versie 2.6.2 van de Arduino/ESP8266 core. Je kunt de bibliotheek hier downloaden.

ESP_SysLogger

Deze bibliotheek is alleen nodig als je USE_SYSLOGGER defined. Je kunt de bibliotheek hier downloaden (vanaf v1.6.3 commit 43eb15681125442addaf8b697f2b8557d4afa300). Pas op! (nog) Niet geschikt voor het LittleFS!

Overige libraries

Onderstaande libraries zijn onderdeel van de ESP8266 Core en moeten dus niet handmatig geïnstalleerd worden!

  • LittleFS

  • ESP8266WiFi

  • ESP8266WebServer

  • WiFiUdp

  • ESP8266mDNS

  • FS

USE_MQTT

Met deze optie wordt de functionaliteit om data naar een MQTT Broker te sturen geactiveerd.

Via FSexplorer -> Edit instellingen -> Settings kun je gegevens over de te gebruiken MQTT Broker invullen:

Rubriek

Functie

MQTT broker URL/IP

Vul hier de URL of het IP adres van de MQTT broker in. Voorbeeld: "test.mosquitto.org"

MQTT Poort

Het default poortnummer is 1883.

Hou er wel rekening mee dat de ESP8266 geen encryptie aan kan!

MQTT Username

Vul hier de naam in van de gebruiker van de MQTT broker.

MQTT Password

Als de MQTT broker gebruiker een wachtwoord nodig heeft vul die dan hier in.

MQTT Interval (sec.)

De Interval geeft aan om de hoeveel seconden de DSMR-logger gegevens naar de MQTT broker moet sturen. De DSMRloggerAPI firmware zal nooit vaker een MQTT bericht versturen dan de interval waarmee telegrammen worden gelezen. Voer je een interval in die kleiner is dan de telegram interval dan zal er, na het lezen van een telegram direct een MQTT bericht worden verzonden.

Voer je hier 0 (nul) in dan worden er géén MQTT berichten verzonden.

MQTT TopTopic

Dit is het topic waaronder alle andere gegevens worden gepubliceerd. Standaard is dit "DSMR-API".

De DSMR-logger zal iedere MQTT Interval seconden de volgende berichten naar de MQTT Broker sturen:


DSMR-API/identification {"identification":"XMX5LGBBLB2410065887"}
DSMR-API/p1_version {"p1_version":"50"}
DSMR-API/timestamp {"timestamp":"140223173001S"}
DSMR-API/equipment_id {"equipment_id":"4530303336303000000000000000000040"}
DSMR-API/energy_delivered_tariff1 {"energy_delivered_tariff1":170.899,"unit":"kWh"}
DSMR-API/energy_delivered_tariff2 {"energy_delivered_tariff2":163.798,"unit":"kWh"}
DSMR-API/energy_returned_tariff1 {"energy_returned_tariff1":113.378,"unit":"kWh"}
DSMR-API/energy_returned_tariff2 {"energy_returned_tariff2":76.650,"unit":"kWh"}
DSMR-API/electricity_tariff {"electricity_tariff":"0001"}
DSMR-API/power_delivered {"power_delivered":1.230,"unit":"kW"}
DSMR-API/power_returned {"power_returned":1.770,"unit":"kW"}
DSMR-API/voltage_l1 {"voltage_l1":237.0,"unit":"volt"}
DSMR-API/voltage_l2 {"voltage_l2":238.0,"unit":"volt"}
DSMR-API/voltage_l3 {"voltage_l3":235.0,"unit":"volt"}
DSMR-API/current_l1 {"current_l1":2,"unit":"ampere"}
DSMR-API/current_l2 {"current_l2":2,"unit":"ampere"}
DSMR-API/current_l3 {"current_l3":0,"unit":"ampere"}
DSMR-API/power_delivered_l1 {"power_delivered_l1":874,"unit":"Watt"}
DSMR-API/power_delivered_l2 {"power_delivered_l2":336,"unit":"Watt"}
DSMR-API/power_delivered_l3 {"power_delivered_l3":17,"unit":"Watt"}
DSMR-API/power_returned_l1 {"power_returned_l1":1066,"unit":"Watt"}
DSMR-API/power_returned_l2 {"power_returned_l2":274,"unit":"Watt"}
DSMR-API/power_returned_l3 {"power_returned_l3":427,"unit":"Watt"}
DSMR-API/gas_device_type {"gas_device_type":"3"}
DSMR-API/gas_equipment_id {"gas_equipment_id":"4730303339303031363532303530323136"}
DSMR-API/gas_delivered {"gas_delivered":119.69,"unit":"m3"}

Voor de Mosquitto client kun je de berichten volgen met het volgende commando:

mosquitto_sub -h test.mosquitto.org -v -t 'DSMR-API/#'

of, als je een username/password hebt ingesteld met dit commando:

mosquitto_sub -h test.mosquitto.org -u <username> -P <password> -v -t 'DSMR-API/#'

#define

Functie

USE_MQTT

Deze define zorgt ervoor dat de Firmware data uit de Slimme Meter naar een MQTT Broker stuurt (default).

USE_SYSLOGGER

Deze functionaliteit is in versie 3 nog niet getest. Deze nieuwe versie maakt geen gebruik meer van SPIFFS maar gebruikt het LittleFS. De SysLogger is hier nog niet voor aangepast!

Als deze optie actief is zal de DSMRloggerAPI firmware debug informatie naar een logfile schrijven. Dit logfile kan mbv.het commando 'Q' in het telnet menu bekeken worden.

Er is ook een restAPI waarmee de log regels uit de DSMR-logger opgehaald kunnen worden.

Ophalen debug informatie

GET http://dsmr-api.local/api/v1/dev/debug

Met deze api kun je de gegevens uit het sysLog bestand opvragen

**
***************************************************************************************************
***************************************************************************************************
***************************************************************************************************
[15:23:35][  12624][openSysLog  ] Last Reset Reason [Software/System restart]
[15:23:35][  13968][openSysLog  ] actTimestamp[200316152328W], nrReboots[0], Errors[0]
 
[15:24:05][  12640][forceMinderg] Force Write Data to [/Mindergas.post]
[15:24:05][  12640][processMinde] Mindergas State: MG_WRITE_TO_FILE
[15:24:05][  12640][writePostToF] Writing to [/Mindergas.post] ..
[15:24:05][  12640][writePostToF] Mindergas.post aangemaakt
[15:24:05][  12640][writePostToF] MinderGas update in [118] minute(s)
[15:25:05][  12496][processMinde] Mindergas State: MG_DO_COUNTDOWN (118 minuten te gaan)
[15:26:05][  12480][processMinde] Mindergas State: MG_DO_COUNTDOWN (117 minuten te gaan)
[15:26:50][  12216][processSlimm] Processed [25] telegrams ([0] errors)
[15:27:05][  12672][processMinde] Mindergas State: MG_DO_COUNTDOWN (116 minuten te gaan)
[15:28:05][  12688][processMinde] Mindergas State: MG_DO_COUNTDOWN (115 minuten te gaan)
    .
    .
    .
[15:39:05][  12688][processMinde] Mindergas State: MG_DO_COUNTDOWN (104 minuten te gaan)
[15:40:05][  12672][processMinde] Mindergas State: MG_DO_COUNTDOWN (103 minuten te gaan)
[15:40:10][  10632][processSlimm] Processed [125] telegrams ([0] errors)
[15:41:05][  12688][processMinde] Mindergas State: MG_DO_COUNTDOWN (102 minuten te gaan)
[15:42:05][  12688][processMinde] Mindergas State: MG_DO_COUNTDOWN (101 minuten te gaan)
[15:43:05][  12688][processMinde] Mindergas State: MG_DO_COUNTDOWN (100 minuten te gaan)
[15:43:30][  12000][processSlimm] Processed [150] telegrams ([0] errors)
[15:44:05][  12688][processMinde] Mindergas State: MG_DO_COUNTDOWN (99 minuten te gaan)
[15:45:05][  14264][processMinde] Mindergas State: MG_DO_COUNTDOWN (98 minuten te gaan)
[15:46:05][  14280][processMinde] Mindergas State: MG_DO_COUNTDOWN (97 minuten te gaan)
[15:46:50][  12920][processSlimm] Processed [175] telegrams ([0] errors)
[15:47:05][  14280][processMinde] Mindergas State: MG_DO_COUNTDOWN (96 minuten te gaan)
[15:48:05][  14280][processMinde] Mindergas State: MG_DO_COUNTDOWN (95 minuten te gaan)
[15:49:05][  14280][processMinde] Mindergas State: MG_DO_COUNTDOWN (94 minuten te gaan)
[15:50:05][  14032][processMinde] Mindergas State: MG_DO_COUNTDOWN (93 minuten te gaan)
[15:50:10][  12920][processSlimm] Processed [200] telegrams ([0] errors)
    .
    .
    .
[15:57:05][  14264][processMinde] Mindergas State: MG_DO_COUNTDOWN (2 minuten te gaan)
[15:58:34][  13744][forceMinderg] found [/Mindergas.post] at day#[16]
[15:58:34][  12400][processMinde] Mindergas State: MG_DO_COUNTDOWN (1 minuten te gaan)
[15:59:34][  12184][processMinde] Mindergas State: MG_SEND_MINDERGAS
[15:59:34][  11672][sendMinderga] Send to Mindergas.nl...
POST /api/gas_meter_readings HTTP/1.1**AUTH-TOKEN:<token>**Host: mindergas.nl**User-Ag
[15:59:35][  12360][sendMinderga] Mindergas response: [422]
Unprocessed entity, goto website mindergas for more information
[15:59:35][  11208][sendMinderga] Disconnected from mindergas.nl
[15:59:35][  12184][processMinde] Deleted Mindergas.post !
[16:00:03][  11000][processTeleg] Update RING-files
[16:00:11][  10368][processSlimm] Processed [275] telegrams ([0] errors)
[16:03:31][  11160][processSlimm] Processed [300] telegrams ([0] errors)

#define

Functie

USE_SYSLOGGER

De ESP_SysLogger is een library waarmee log regels in een RING bestand van 500 regels kunnen worden geschreven. Na 500 regels wordt steeds de oudste regel overschreven door de nieuwste regel.

ESP8266 LittleFS Data Upload Tool

Installatie LittleFS Data Upload Tool

Eén van de mooie eigenschappen van de ESP8266 is dat er flash geheugen in zit. Flash geheugen is geheugen dat zijn inhoud ook zonder spanning behoud. Vergelijk het met een SD-kaart. Het flash geheugen is, afhankelijk van het bordje, 512kB tot 16MB(!) groot. Een deel van dit flash geheugen wordt gebruikt om jouw programma in op te slaan. Wat er over blijft kan als bestand systeem worden ingericht (het zgn. LittleFS).

Je kunt in je programma dit bestand systeem niet alleen gebruiken om (bijvoorbeeld meet-) gegevens maar ook om de inhoud van een web-pagina (index.html) of een configuratie-bestand in op te slaan.

Om het LittleFS voor dit soort bestanden te kunnen gebruiken moet je een plug-in in je Arduino Projecten map installeren.

De plug-in haal je hier vandaan. Ga naar deze github pagina en download het meest recente .zip bestand ..

Download vervolgens het ESP8266LittleFS-x.y.z.zip bestand door er op te klikken.

En bewaar het bestand op een plek die voor jou handig is.

Ga nu naar je Sketchbook Location map en maak daarin een nieuwe map tools aan (als deze nog niet bestaat). Pak het zojuist ge-download-de zip bestand uit in deze tools map. Er wordt nu een aantal nieuwe mappen aangemaakt waar de plug-in wordt neergezet. Het pad ziet er ongeveer zo uit:

<sketchbook location>/tools/ESP8266FS/tool/esp8266fs.jar

Tools_Tree.png

Start de Arduino IDE opnieuw op.

Op de menu-balk zie je nu onder[Tools]een nieuwe optie: ESP8266 LittleFS Data Upload.

Als er onder de map van je Sketch óók een map data staat, dan kun je de bestanden die in deze data-map staan met het ESP8266 LittleFS Data Upload tool naar het bestand systeem van de ESP8266 flashen.

De bestands-tree van de DSMRloggerAPI firmware data-map ziet er zo uit:

Het ESP8266 LittleFS Data Upload tool zal alle bestanden die in de data-map zitten naar het bestand systeem van de aangesloten ESP8266 uploaden.

Ga naar: [tools] -> [ESP8266 LittleFS Data Upload]

Randvoorwaarde is natuurlijk dat het bestand systeem groot genoeg is! In de selectie van je board moet je, behalve het juiste type board ook aangeven hoeveel ruimte van je Flash geheugen je wilt gebruiken voor het bestand-systeem (vóórdat je je programma naar de ESP8266 upload!).

Normaliter zou je dit zo groot mogelijk willen maken, maar als je “Over The Air” programma’s op je ESP8266 wilt zetten (dus zonder fysieke verbinding maar via WiFi) dan moet je er rekening mee houden dat je twee maal de grootte van je programma nodig hebt om dit te kunnen doen. Wat er overblijft kun je als bestand-systeem gebruiken.

DSMRloggerAPI Firmware

Clonen Firmware

De DSMRloggerAPI firmware staat hier https://github.com/mrWheel/DSMRloggerAPI. Er zijn twee manieren om de firmware te clonen.

  1. download de repository als een .zip file

  2. gebruik git

Als je niet handig bent met git raad ik je aan de repository als een .zip file te downloaden.

Download .zip file

Klik op de groene knop [Clone or Download] ..

.. en selecteer [Download ZIP]

Er volgt een scherm als dit:

  1. Bewaar het .zip bestand op een plek op je computer waar je hem terug kunt vinden.

  2. Unzip het DSMRloggerAPI-master.zip bestand in de ArduinoIDE Sketchbook Location.

  3. Rename de map DSMRloggerAPI-master naar DSMRloggerAPI (dus zonder -master)

Ga verder naar DSMRloggerAPI Sketch openen

git clone

Om de repository met git te kunnen clonen moet je er éérst voor zorgen dat je git op je systeem hebt staan. Hoe je dat moet doen valt buiten de scope van deze documentatie maar hier kun je alles vinden over hoe je dit, voor jouw systeem, moet doen.

Voor nu ga ik ervan uit dat je git op je systeem hebt staan en dat je weet hoe je ermee moet werken.

Ga naar de Arduino Sketchbook location (de map waar al je Sketches in staan, kijk hier) en toets het volgende commando in:

git clone https://github.com/mrWheel/DSMRloggerAPI.git

That's it!

In Sketchbook location staat hierna een nieuwe map met de naam DSMRloggerAPI.

DSMRloggerAPI Sketch openen

Start de ArduinoIDE opnieuw op en klik op het open icoon.

Selecteer in het drop-down menu ..

.. de sketch DSMRloggerAPI(In jouw situatie staat deze firmware waarschijnlijk niet onder een submap "SlimmeMeter"!) Er verschijnt een nieuw editor window met de firmware van de DSMRlogger!

Slimme Meters

Onderstaande tabel geeft de gegevens weer zoals deze door gebruikers worden gemeld. Om de lijst zo compleet mogelijk te maken verzoek ik iedere maker/gebruiker om deze gegevens met ons te delen!

Merk

Type

Compiler Opties

Externe Voeding

DSMR

Opmerking/ Setting

Werkt

Landys

E350

1, 2, (3)

Nee

5.0

OK!

Landys

E350

JA

2.2+

Pré DSMR 40[Yes]

OK

Landys

E350

?

?

4.0

ok

Landys

E360

1,2

Nee

5.0

OK!

Landys

ZCF110

1,2

JA

4.2

OK

Landys

ZCM110

?

?

4.2

ok

Landys

ZCF120ABd

1

Nee

2.2+

Pré DSMR 40[Yes]

SM Has Fase Info[No]

GUI geeft géén actueel verbruik

OK

ISKRA

AM550

?

Nee

5.0+

OK!

ISKRA

MT382

?

JA

2.2+

Pré DSMR 40[Yes]

OK

ISKRA

ME382

?

?

2.2+

Pré DSMR 40[Yes]

ok

KAIFA

E0026

?

?

?

?

KAIFA

MA304

?

JA

?

OK!

KAIFA

MA105C

?

JA

?

OK!

KAIFA

MA340C

1,2

JA

?

OK!

Kamstrup

162

1

JA

2.2

Pré DSMR 40[Yes]

SM Has Fase Info[No]

OK

Kamstrup

382

?

?

2.2

Pré DSMR 40[Yes]

?

Sagemcom

XS210

?

?

5.0

ESMR5

ok

Sagemcom

T210-D

Standaard

Nee

5.0

ESMR5

OK!

Sagemcom

S211

1

Nee

?

SM Has Fase Info[No]

OK!

Seconia

T211

1

Nee

?

SM Has Fase Info[No]

OK!

Compile Options

  1. USE_UPDATE_SERVER

  2. USE_MQTT

  3. USE_MINDERGAS

  4. USE_SYSLOGGER

  5. SHOW_PASSWRDS

  6. HAS_NO_SLIMMEMETER

Update Server

Met de Update Server is het mogelijk om firmware en het bestand systeem naar een DSMR-logger te flashen.

Je kunt de Update Server op twee manieren opstarten:

  • Door op de knop [Update Firmware] in de FSmanager te klikken

  • Door in de browser de volgende URL in te toetsen: http://dsmr-api.local/update of: http://<hetIPadresVanDeDSMRlogger>/update

Flash Firmware

Om (nieuwe) firmware te flashen moet je op de knop [Choose file] onder de kop "Selecteer een .ino.bin bestand" klikken.

Er verschijnt nu een drop-down window waar je de gewenste firmware kunt selecteren.

Klik vervolgens op [Flash Firmware]

Flash File Systeem

Om een nieuw bestands systeem op de DSMR-logger te flashen klik je op de knop [Choose file] onder de kop "Selecteer een .mklittlefs.bin bestand".

Er verschijnt nu een drop-down window waar je het gewenste .mklittlefs.bin bestand systeem kunt selecteren.

Klik vervolgens op de knop [Flash FileSYS]

Flashen is geslaagd

Integratie met Home Assistant

Om in Home Assistant de gegevens uit de DSMR-logger (met de DSMRloggerAPI firmware) te gebruiken heb ik het configuration.yaml bestand als volgt aangepast:

Optioneel: Gas gebruik toevoegen (let op: is totaal gebruik):

in deze voorbeelden worden de power_delivered en gas_delivered velden via MQTT uitgelezen en de power_returned via de restAPI's. Uiteraard kun je voor alle velden de manier van uitlezen gebruiken die voor jou het prettigste werkt.

Dit is het resultaat:

Merk op dat ik voor de resource bij de restAPI's het IP adres van de DSMR-logger gebruik. Ik krijg het in mijn opzet niet voor elkaar hier de hostname (dsmr-api.local) te gebruiken. Controleer ook of het MQTT topic juist is.

#################################
# uitbreiding configuratie.yaml #
#################################
# koppeling met de DSMR-logger  #
#################################

sensor:
  - platform: mqtt
    name: "Gebruik"
    state_topic: "DSMR-API/power_delivered" 
    unit_of_measurement: "kWh"
    value_template: '{{ value_json.power_delivered[0].value | round(3) }}'

  - platform: mqtt
    name: "Laatste Update mqtt"
    state_topic: "DSMR-API/timestamp" 
#   value_template: '{{ value_json.timestamp[0].value }}'
    value_template: >
      {{      value_json.timestamp[0].value[4:6] + "-" + 
              value_json.timestamp[0].value[2:4] + "-" + 
         "20"+value_json.timestamp[0].value[0:2] + "   " + 
              value_json.timestamp[0].value[6:8] + ":" + 
              value_json.timestamp[0].value[8:10] + ":" + 
              value_json.timestamp[0].value[10:13] }}

  - platform: mqtt
    name: "Gebruik l1"
    state_topic: "DSMR-API/power_delivered_l1"
    unit_of_measurement: 'Watt'
    value_template: "{{ (value_json.power_delivered_l1[0].value | float * 1000.0) | round(1) }}"

  - platform: mqtt
    name: "Gebruik l2"
    state_topic: "DSMR-API/power_delivered_l2"
    unit_of_measurement: 'Watt'
    value_template: "{{ (value_json.power_delivered_l2[0].value | float * 1000.0) | round(1) }}"

  - platform: mqtt
    name: "Gebruik l3"
    state_topic: "DSMR-API/power_delivered_l3"
    unit_of_measurement: 'Watt'
    value_template: "{{ (value_json.power_delivered_l3[0].value | float * 1000.0) | round(1) }}"


  - platform: rest
    name: "Levering"
    resource: http://192.168.2.106/api/v1/sm/fields/power_returned
    unit_of_measurement: "kWh"
    value_template: '{{ value_json.fields[1].value | round(3) }}'

  - platform: rest
    name: "Laatste Update restAPI"
    resource: http://192.168.2.106/api/v1/sm/fields/timestamp
#   value_template: '{{ value_json.fields[0].value }}'
    value_template: >
      {{      value_json.fields[0].value[4:6] + "-" + 
              value_json.fields[0].value[2:4] + "-" + 
         "20"+value_json.fields[0].value[0:2] + "   " + 
              value_json.fields[0].value[6:8] + ":" + 
              value_json.fields[0].value[8:10] + ":" + 
              value_json.fields[0].value[10:13] }}

  - platform: rest
    name: "Levering l1"
    resource: http://192.168.2.106/api/v1/sm/fields/power_returned_l1
    unit_of_measurement: "Watt"
    value_template: '{{ (value_json.fields[1].value | float * 1000.0) | round(1) }}'

  - platform: rest
    name: "Levering l2"
    resource: http://192.168.2.106/api/v1/sm/fields/power_returned_l2
    unit_of_measurement: 'Watt'
    value_template: '{{ (value_json.fields[1].value | float * 1000.0) | round(1) }}'

  - platform: rest
    name: "Levering l3"
    resource: http://192.168.2.106/api/v1/sm/fields/power_returned_l3
    unit_of_measurement: 'Watt'
    value_template: '{{ (value_json.fields[1].value | float * 1000.0) | round(1) }}'
  - platform: mqtt
    name: "Gas gebruik"
    state_topic: "DSMR-API/gas_delivered"
    unit_of_measurement: 'm3'
    value_template: "{{ (value_json.gas_delivered[0].value | float * 1000.0) | round(1) }}"

Data map Flashen

In de data-map van de DSMRloggerAPI firmware staan bestanden die nodig zijn voor het functioneren van de firmware.

Deze bestanden moeten dan ook overgezet worden naar de DSMR-logger. Dat 'overzetten' kan op twee manieren: 'Bedraad' en 'Over The Air'

Bedraad

Pas op! Koppel de DSMR-logger los van de Slimme Meter vóórdat je de DSMR-logger op de programmer aansluit!!

  1. Sluit de programmer aan op de DSMR-logger v4.

  2. Druk op de FLASH knop en houdt deze ingedrukt.

  3. Druk vervolgens de RESET knop in en laat deze weer los.

  4. Laat nu ook de FLASH knop los.

De DSMR-logger v4 staat nu in "Flash-mode" en wacht (geduldig) tot de inhoud van de data map wordt opgestuurd.

  • Ga in de Arduino IDE naar Tools -> ESP8266 LittleFS Data Upload

Let op! Het uploaden van de data map mislukt als de Serial Monitor open staat!

Het LittleFS (bestand systeem) wordt nu leeg gemaakt en alle bestanden in de data map worden als een LittleFS overgezet.

Hierna zal de DSMR-logger normaal opstarten, maar met de nieuw LittleFS inhoud.

Let op! Hou er rekening mee dat eventuele data-bestanden die al op het LittleFS stonden nu weg zijn! Als je ze niet kwijt wil moet je er eerst een kopie van maken op je computer en deze, na het flashen van het LittleFS weer terug zetten (dat kan met de DSMR-logger FSmanager )!

Over The Air

Bij het Over The Air uploaden van de bestanden uit de data-map kan de DSMRlogger v4 gewoon aan de Slimme Meter gekoppeld blijven.

Alle Board gegevens blijven gelijk alleen selecteer je een Serial Port die nergens op is aangesloten!

Start vervolgens het ESP8266 LittleFS Data Upload-tool

Omdat je een Serial Port hebt geselecteerd waar niets op is aangesloten zal deze opdracht met een foutmelding eindigen. Ondertussen is er wél een .mklittlefs.bin bestand in het build-path neergezet.

Let op! Hou er rekening mee dat eventuele data-bestanden die al op het bestand systeem stonden nu weg zijn! Als je ze niet kwijt wil moet je er eerst een kopie van maken op je computer en deze, na het flashen van het LittleFS weer terug zetten (dat kan met de DSMR-logger FSmanager )!

Klik nu op de DSMR-logger pagina op het icoontje.

In de FSmanager klik je op de knop [Update Firmware]

Er verschijnt nu een scherm waarin je een mklittlefs bestand (de naam eindigt op .mklittlefs.bin) kunt kiezen door op de onderste knop [Choose File] te klikken.

Selecteer uit het popUp scherm dat nu verschijnt het binary file dat je wilt uploaden ..

.. klik op [Open] en daarna op de knop [Flash FileSystem]

Na enige tijd krijg je de melding dat de upload is geslaagd en dat de DSMR-logger opnieuw opstart.

Let op! Het komt soms voor dat het scherm niet automatisch ge-refreshed wordt (dit lijkt te maken te hebben met de omvang van de firmware die je upload). Klik in dat geval, na ongeveer 3 minuten, op de tekst "hier" Als het lijkt of er niets gebeurd, wacht dan ongeveer drie minuten en klik daarna hier. Als de verbinding met de server vóór die tijd verbroken wordt klik dan op de [back] knop van de browser waarna de tekst alsnog (weer) verschijnt. Klik nu op hier om de DSMRloggerAPI hoofd pagina opnieuw te laden.

Upgrade DSMRloggerWS naar DSMRloggerAPI

Deze video laat zien hoe je de DSMRloggerWS firmware eenvoudig kunt upgraden naar de nieuwe DSMRloggerAPI firmware.

Je kunt deze upgrade maar één maal uitvoeren! Nadat de upgrade is uitgevoerd (en als het is gelukt) kun je nieuwe versies van de DSMRloggerAPI firmware via de normale weg updaten!

Het upgraden vanaf de DSMRloggerWS firmware naar de DSMRloggerAPI firmware bestaat uit de volgende stappen:

  • Gebruik de FSexplorer om de PRDhours.csv, PRDdays.csv en PRDmonths.csv naar je computer te downloaden (dit hoef je alleen te doen als je de opgebouwde historie na de upgrade terug wilt zien in de GUI van de DSMR-logger met de nieuwe firmware).

  • Verwijder het bestand DSMRsettings.ini van de DSMR-logger (gebruik weer de FSexplorer). Pas op! Sla deze stap niet over!!

Voer nu de stappen uit zoals in Nieuwe DSMRloggerAPI firmware flashen beschreven.

Als de voorgaande stap goed is gegaan verschijnt na enige tijd het start scherm van de DSMR-logger.

De DSMRloggerAPI firmware heeft een mogelijkheid om bestanden van de DSMRloggerWS (zgn. PRD-bestanden) automatisch te converteren naar het door de DSMRloggerAPI gebruikt (RING) formaat.

Nadat je de DSMRloggerAPI hebt geïnstalleerd en deze 'werkt' kun je met de FSmanager de drie bewaarde PRD-bestanden naar het bestand systeem uploaden.

Upload vervolgens een bestand met de exacte naam !PRDconvert (het eerste teken is een uitroep-teken) naar het File Systeem (de inhoud van dit bestand is niet belangrijk). Start de DSMR-logger nu opnieuw op (klik op de knop [ReBoot]) en de RING bestanden zullen automatisch gevuld worden met de inhoud van de PRD bestanden.

Let op! Je moet ervoor zorgen dat de PRD bestanden zo actueel mogelijk, maar in ieder geval binnen dezelfde dag en bij voorkeur in hetzelfde uur waarop je de conversie uitvoert, nog ge-update zijn! Missen er uren of dagen dan geeft dit vreemde resultaten (maar dat komt na verloop van tijd vanzelf goed)!

HAS_NO_METER

Om te testen of de verwerking van de gegevens, die normaal gesproken uit de Slimme Meter komen, goed gaat kun je met deze #define de firmware zó maken dat hij zélf voor (test) data zorgt. Om de tijd te versnellen zal de testdata eerst de maanden versneld laten voorbij gaan, daarna de dagen en tenslotte de uren.

Let op! Alleen om te testen!

#define

Functie

HAS_NO_METER

De DSMRloggerAPI firmware zorgt zelf voor test-data. Als deze functionaliteit actief is moet de DSMR-logger niet op een Slimme Meter worden aangesloten!

License

MIT License

Copyright © 2018 - 2021 Willem Aandewiel

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Oude Hardware (met ESP-01 bordje)

De omvang van de DSMTloggerAPI firmware is te groot geworden voor een ESP-01 bordje. Het is wél mogelijk om de 1MB flash chip van de ESP-01 te vervangen door een 4MB flash chip, waarna er wél voldoende ruimte is voor deze firmware!

Het gebruik van de DSMR-logger v2 en v3 wordt niet meer ondersteunt.

SHOW_PASSWRDS

Met deze #define geef je aan of je wilt dat de PSK Key van je WiFi netwerk, het wachtwoord van de gebruikte MQTT Broker en het Authenticatie Token van Mindergas.nl zichtbaar worden.

Via telnet het opvragen van de Board Info:

 B - Board Info
         .
         .
         .

==================================================================
               Board type [ESP8266_GENERIC]
                     SSID [A@nd@W@F@]
                  PSK key [**********]
               IP Address [192.168.1.108]
                 Hostname [DSMR-API]
       Last reset reason: [Exception]
                   upTime [32(d):02:01]
==================================================================

en de Settings:

 S - list Settings
         .
         .
         .

==== MQTT settings ==============================================
          MQTT broker URL/IP : hassio.local
                   MQTT user : hassUser1
               MQTT password : *************
          MQTT send Interval : 120
              MQTT top Topic : DSMR-API

Define

Functie

SHOW_PASSWRDS

In de System Info tab wordt, als deze #define actief is, de PSK Key van het WiFi netwerk getoond. Bij de B - Board Info uitvoer wordt met deze deze #define de PSK Key zichtbaar en bij S - list Settings het wachtwoord van de MQTT Broker en de Authenticatie Token van Mindergas.nl.

Selecteren compiler opties

Overzicht te selecteren functies

Tijdens het compileren van de firmware kun je bepaalde functionaliteit in- en uit-schakelen door de #defines wél of níet door twee slashes ("//") vooraf te laten gaan.

In onderstaande tabel kun je zien of een bepaalde functionaliteit beschikbaar is voor de DSMR-logger.

#define

Functie

Default

Met de Update Server kun je vanuit de FSexplorer updates van de firmware installeren

JA

Deze optie zorgt ervoor dat de functionaliteit voor het versturen van gegevens naar een MQTT broker wordt ingebouwd

JA

Deze optie zorgt voor de functionaliteit voor het versturen van gegevens naar waar je het huidige gasverbruik kunt vergelijken met anderen.

JA

Met de System logger is het mogelijk om debug informatie over de werking van de DSMR-logger op te slaan in een bestand van 500 regels.

NEE

alleen gebruiken om te debuggen.

Of je de gebruikte passwords in het Systeem Info scherm en via telnet wilt tonen

NEE

Als je geen Slimme Meter op de DSMR-logger hebt aangesloten maar toch (dummy) data wilt zien.

NEE

alleen om te testen


/******************** compiler options  ********************************************/
#define USE_UPDATE_SERVER         // define if there is enough memory and updateServer to be used
//  #define HAS_NO_SLIMMEMETER        // define for testing only!
#define USE_MQTT                  // define if you want to use MQTT
#define USE_MINDERGAS             // define if you want to update mindergas (also add token down below)
//  #define USE_SYSLOGGER             // define if you want to use the sysLog library for debugging
//  #define SHOW_PASSWRDS             // well .. show the PSK key and MQTT password, what else?
/******************** don't change anything below this comment **********************/
USE_UPDATE_SERVER
USE_MQTT
USE_MINDERGAS
mindergas.nl
USE_SYSLOGGER
SHOW_PASSWORDS
HAS_NO_METER

Upgrade DSMRloggerAPI v2 to v3

Het upgraden vanaf de DSMRloggerAPI v2 firmware naar de DSMRloggerAPI firmware v3 is nodig omdat het SPIFFS bestand systeem binnenkort niet meer ondersteund wordt door de esp8266 core. Versie 3 van de DSMRloggerAPI firmware maakt daarom gebruik van het zgn. LittleFS (little file system) en daarom is het noodzakelijk de volgende stappen uit te voeren:

  • Gebruik de FSexplorer om de RINGhours.csv, RINGdays.csv enRINGmonths.csv naar je computer te downloaden (dit hoef je alleen te doen als je de opgebouwde historie na de upgrade terug wilt zien in de GUI van de DSMR-logger met de nieuwe firmware).

  • Download de laatste (nieuwste) versie DSMRloggerAPI.ino.bin en DSMRloggerAPI.mklittlefs.bin files van github naar je computer.

  • Klik op de knop [Update Firmware], selecteer met [Choose File] het goede firmware bestand (DSMRloggerAPI.ino.bin) en flash eerst deze nieuwe firmware door op de knop [Flash Firmware] te klikken.

  • Wacht na de boodschap dat de update goed is gegaan tot de teller op 10 staat en klik dan in de browser op [Back] , tik in de URL-balk het IP-Adres van de DSMR-logger in met daarachter "/update" of wacht tot de DSMR-logger opnieuw is opgestart. Je komt nu weer in het scherm waar je nieuwe firmware kunt flashen.

  • Klik nu op de knop [Update Firmware], selecteer door op [Choose File] onder de tekst "Selecteer een .mklittlefs.bin bestand" te klikken. Selecteer nu het zojuist gedownloade DSMRloggerAPI.mklittlefs.bin bestand en klik op de knop [Flash FileSystem].

Als het flashen goed is gegaan verschijnt na enige tijd het start scherm van de DSMR-logger.

Gebruik vervolgens de FSmanager om de, in stap 1 naar de PC gekopieerde, RINGbestanden terug naar de DSMR-logger te zetten.

Firmware Flashen

Versie 4 van de DSMR-logger hardware maakt gebruik van een ESP-12 processor. Deze processor zit op de printplaat van de DSMR-logger gesoldeerd en moet dus, op de printplaat, geflashed worden.

Om de firmware naar de DSMR-logger Versie 4 te kunnen flashen moet deze eerst voor deze versie van de DSMR-logger geschikt worden gemaakt.

Dit doe je door in de ArduinoIDE de #define's in het eerste tab-blad aan te passen.

/******************** compiler options  ********************************************/
#define USE_UPDATE_SERVER         // define if there is enough memory and updateServer to be used
//  #define HAS_NO_SLIMMEMETER        // define for testing only!
#define USE_MQTT                  // define if you want to use MQTT
#define USE_MINDERGAS             // define if you want to update mindergas (also add token down below)
//  #define USE_SYSLOGGER             // define if you want to use the sysLog library for debugging
//  #define SHOW_PASSWRDS             // well .. show the PSK key and MQTT password, what else?
/******************** don't change anything below this comment **********************/

Vervolgens moeten de Boards settings als volgt worden ingevuld:

Instelling

Waarde

Board

"Generic ESP8266 Module"

Upload Speed

"115200"

CPU Frequency

"80MHz" (of 160MHz)

Flash Frequency

"40MHz"

Flash Mode

"DIO" of "DOUT (compatible)"

Flash Size

"4MB (FS: 2MB OAT:~1019KB)" <<== let op! 2MB

Crystal Frequency

"26MHz"

Reset Method

"None"

Debug Port

"Disabled"

Debug Level

"None"

IwIP Variant

"v2 Lower Memory"

VTables

"Flash"

Exeptions

"Disabled"

Builtin Led

"2"

Erase Flash

"Only Sketch" (First Time: "All Flash Contents")

Port

Bedraad: "Serial Port"

Let op! Als je de Flash Mode veranderd t.o.v. wat je gebruikt hebt voor de firmware die nu in de DSMR-logger zit en je doet een OTA update van de firmware, dan zal de Flash Mode pas veranderen na een power cycle!

Firmware Bedraad Flashen

Pas op! Koppel de DSMR-logger los van de Slimme Meter vóórdat je de DSMR-logger op de programmer aansluit!!

Sluit de USB->ESP12 programmer aan op de Program-header van de DSMR-logger v4

  1. Druk de FLASH knop in en houd deze ingedrukt

  2. Druk op de RESET knop

  3. Laat de RESET knop los

  4. Laat de FLASH knop los

De DSMR-logger v4 staat nu in Flash-mode en blijft in die mode tot er gegevens vanaf de programmer naar de DSMR-logger zijn overgebracht óf tot je nog een keer op de RESET knop drukt.

Vergeet niet in de Arduino IDE de Port te selecteren waarop je de USB->ESP12 programmer hebt aangesloten en druk op het Compile and Upload icoon.

Firmware Over The Air Flashen

Bij het Over The Air flashen van de firmware of data-map kan (moet) de DSMR-logger v4 gewoon op de Slimme Meter aangesloten blijven.

Alle instellingen voor de DSMRloggerAPI firmware blijven gelijk aan de bedrade methode van flashen.

Vervolgens moet je niet op het Compile & Upload-Icoon

klikken maar in het[Sketch]drop-down menu de keuze Upload Compiled Binary selecteren.

De firmware wordt nu gecompileerd en in de Arduino Sketch map waar de DSMRloggerAPI firmware ook staat neergezet. Het bestand heeft de extensie .bin.

Als de firmware gecompileerd is klik je op de DSMR-logger pagina op het icoontje.

In de FSmanager klik je op de knop [Update Firmware]

Er verschijnt nu een scherm waarin je een firmware bestand (de naam eindigt op .bin met ergens in de naam ook .ino.) kunt kiezen door op de bovenste knop [Choose File] te klikken.

Selecteer uit het popUp scherm dat nu verschijnt het binary file dat je wilt uploaden ..

.. klik op [Choose] (of [Open]) en daarna op de knop [Flash Firmware]

Let op! De firmware heeft áltijd ".ino." in de naam en eindigt áltijd op ".bin"!

Na enige tijd krijg je de melding dat de upload is geslaagd en dat de DSMR-logger opnieuw opstart.

Let op! Het komt soms voor dat het scherm niet automatisch ge-refreshed wordt. Klik in dat geval, na ongeveer 3 minuten, op de tekst "hier" Als het lijkt of er niets gebeurd, wacht dan ongeveer drie minuten en klik daarna hier. Als de verbinding met de server vóór die tijd verbroken wordt klik dan op de [back] knop van de browser waarna de tekst alsnog (weer) verschijnt. Klik nu op hier om de DSMRloggerAPI hoofd pagina opnieuw te laden.

gitbook boekenplank