Slimme meter uitlezer

Geplaatst op
Zo langzamerhand zijn alle huizen in Nederland uitgerust met een “Slimme Meter”. Hoog tijd dus om een project te starten om deze Slimme Meter thuis uit te kunnen lezen en de gegevens op een door jouw gewenst formaat te presenteren.
In deze blog-post beschrijf ik hoe je, eenvoudig en voor weinig geld, zelf deze DSMR-logger (DSMR is een acroniem voor “Dutch Smart Meter Requirements“) kunt maken. Bij het ontwikkelen van de DSMR-logger willen we het volgende bereiken:
  • De hardware moet eenvoudig en goedkoop gemaakt kunnen worden;
  • De firmware van de DSMR-logger moet “Over The Air” ge-update kunnen worden;
  • Een beperkte historie moet intern opgeslagen en bewaard worden;
  • De DSMR-logger moet via een externe terminal benaderd kunnen worden (telnet);
  • De (historische) gegevens moeten via FTP van de DSMR-logger afgehaald kunnen worden voor eventuele externe bewerking;
  • De DSMR-logger moet via een browser de gegevens uit de Slimme Meter presenteren;
  • De gegevens moeten via een REST API opgevraagd kunnen worden;
  • De gelezen gegevens moeten eenvoudig verder verwerkt kunnen worden.
In een vervolg blog-post laat ik zien hoe we de gegevens naar een MQTT-broker kunnen sturen en hoe Home-Assistant moet worden geconfigureerd om deze gegevens in Home-Assistant te presenteren.


De techniek van de Slimme Meter

De Slimme Meter stuurt gegevens via de P1 poort (RJ12) in de vorm van een telegram naar buiten. Hoe de Slimme Meter dit doet en hoe een telegram is opgebouwd staat beschreven in dit document. Met name hoofdstuk 5 is interessant omdat hier wordt beschreven hoe de fysieke interface is opgebouwd. Hieruit blijkt o.a. dat de Slimme Meter 5 volt bij 250mA moet kunnen leveren, met kortstondig een piek stroom afname van 300mA. Hoofdstuk 6 beschrijft het protocol en de diverse velden.

Met dit document in de hand en een beetje Googlen vindt je al gouw meer informatie. Wij zijn niet de eerste en zeker niet de enige die de behoefte hebben om de Slimme Meter uit te lezen.
Zo heeft Matthijs Kooijman een werkelijk subliem stukje software geschreven om de telegrammen uit de meter te parsen en in hapklare variabelen op te slaan. Natuurlijk gaan we van deze bibliotheek gebruik maken. Je kunt hem hier downloaden.

Benodigdheden

Het belangrijkste onderdeel van de DSMR-logger is de processor. We gebruiken hier een ESP8266 voor omdat deze, behalve snel en voorzien van voldoende geheugen, ook via WiFi kan communiceren. Om de kosten laag te houden gaan we uit van een ESP-01 bordje (black edition) met 1MB geheugen. Daarnaast hebben we, behalve zes weerstanden en drie condensatoren (C4 is niet echt nodig maar kun je aanbrengen als je problemen ondervind met het verbinden met je WiFi netwerk), een NPN transistor (BC547) en een voltage regulator (MCP1700-3302E) nodig. Om de DSMR-logger met de Slimme Meter te verbinden heb je een RJ12 stekker met een stukje draad nodig. Ik heb op internet een RJ12 kabel gekocht (met twee RJ12 male connectoren) en deze door midden geknipt.

Als je geen gebruik wilt maken van de DSMR-logger PCB dan heb je ook nog een stukje experimenteer board nodig.
De totale kosten komen uit op ongeveer € 20,-

Schema DSMR-logger

Hieronder zie je het schema van de DSMR-logger:
Schema DSMR Logger Schema DSMR Logger
Grofweg bestaat het schema uit vier onderdelen (de vijfde, met de 5 volt en GND PWR_FLAG’s, is technisch nodig voor KiCAD maar is niet echt onderdeel van het schema).

Allereerst de verbinding tussen de Slimme Meter en de DSMR-logger. Het is het makkelijkst om de kabel direct op de DSMR-logger te solderen maar je kunt ook een Molex-male connector gebruiken. Molex-connectoren kun je niet “verkeerd-om” aansluiten (dat zou vervelend zijn omdat je dan de 5 volt en Ground uit de Slimme Meter aansluit op respectievelijk Ground en 5 volt van de DSMR-logger wat de ESP-01 beslist niet zal overleven!). De aansluitingen op de DSMR-logger zijn gelijk aan die op de RJ12 plug (1 is verbonden met 1, 2 met 2 enz.).

Het tweede deel bestaat uit de spanningsregelaar die de 5 volt uit de Slimme Meter omzet naar 3v3 voor de ESP-01. Volgens de data-sheet van de ESP-01 gebruikt deze normaal 80mA en in pieken 200-250mA. De gebruikte MCP1700 kan maximaal 250mA leveren. Voldoende dus voor deze toepassing.

De ESP-01 zelf heeft slechts 8 aansluitingen. Twee voor de voeding (Vcc en GND), één voor de communicatie met de Slimme Meter (TxD) en drie pinnen die tijdens het opstarten “hoog” moeten zijn (CH_PD, GPIO0 en GPIO2). De laatste twee pinnen (RST en TxD) worden niet gebruikt.

Het laatste schema onderdeel, rond de BC547 transistor, heeft twee functies. Allereerst zorgt het ervoor dat de 5 volt data van de Slimme Meter de 3.3 volt input van de ESP8266 niet overbelast. Het is dus in eerste instantie een Level-Shifter. Maar daarnaast is het óók een invertor die het geïnverteerde signaal uit de Slimme Meter omzet in een non-inverted signaal voor de ESP8266.

De Hardware

Ik heb, als proof of concept, een eerste versie van de DSMR-logger op een experimenteer bordje gesoldeerd.
DSRM - Experimenteer print DSRM - Experimenteer print
Hier zie je het uiteindelijke resultaat aangesloten op de Slimme Meter:
DSRM - Experimenteer PCB compleet DSRM - Experimenteer PCB compleet
Toen bleek dat alles werkt zoals bedacht, heb ik met KiCAD een printplaat ontworpen.
Ontwerp DSRM Logger Ontwerp DSRM Logger

Firmware op de ESP-01 installeren

Eén van de Design Goals is dat de firmware “Over The Air” (door de lucht) op de DSMR-logger gezet moet kunnen worden. Dat is ook gelukt maar je zult altijd een eerste keer firmware op de ESP-01 moeten zetten die deze functionaliteit biedt. Daarom ontkom je er niet aan om tenminste één keer de firmware via een bedrade manier naar de DSMR-logger te sturen. Daarnaast is het mij, tijdens het ontwikkelen van de software, meerdere keren gebeurd dat ik een bug introduceer waardoor het OTA uploaden niet meer werkt. Ook dan is de enige manier de firmware, zonder bug, bedraad naar de DSMR-logger te sturen.

Om de ESP-01 te kunnen programmeren heb je een programmer nodig. Een andere, goedkope oplossing is een speciaal programma in een Arduino-UNO te laden en dan een aantal aansluitingen te maken tussen de Arduino en het ESP-01 bordje.
De makkelijkste manier is het om een “ESP-01 to USB Adapter” te kopen en hier een kleine modificatie aan te doen (zie mijn blog-post).

De Software

De software is in beginsel heel simpel (zie het voorbeeld dat bij de DMSR bibliotheek zit). Wil je echter wat meer mogelijkheden dan wordt het toch al snel een behoorlijk project!

De DSMR-logger gebruikt de volgende bibliotheken:
Deze moeten dan ook in je Arduino-IDE omgeving geïnstalleerd zijn.

Verder gebruiken we de simpele FTP server van David Paiva. Deze wordt als source direct in de DSMRlogger2HTTP sketch opgenomen (twee tab-bladen) en voor de include gebruik je daarom quotjes (“) in plaats van kleiner- en groter-dan tekens.
De speciale behandeling was nodig omdat ik kleine aanpassingen in de source heb gemaakt en niet wil dat deze, bij een library-update, verloren gaan.

De sketch bestaat in totaal uit acht tab-bladen. Het hoofdprogramma, FTPserver.cpp, FTPserver.h, SPIFFSstuff, TimeStuff, UpdateHTML, WiFiStuff en menuStuff. De software kun je als ZIP file downloaden van GitHub en dan in je Arduino projecten map uit-pakken. Als je git op je computer hebt geïnstalleerd kun de repository ook clonen met het commando:

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

Er wordt dan, in de directory waar je het commando uitvoert (bij voorkeur de Arduino projecten folder), een map aangemaakt met de naam “DSMRlogger2HTTP” waar alle code in staat, inclusief een “data” directory om het bestand-systeem van de ESP-01 mee te vullen (hier staat ook het bestand “index.html” in).

In pseudo code ziet het programma er zo uit:
Het hoofdprogramma wordt eindeloos herhaalt en bestaat uit de volgende stappen:

De DSMRlogger in gebruik nemen

Voordat je de DSMRlogger kunt gebruiken moet je niet alleen de firmware maar ook een file-systeem met inhoud naar de DSMRlogger uploaden. Ik ga er, gemakshalve, van uit dat je weet hoe je de firmware moet uploaden en beperk mij tot het uitleggen hoe je het file-systeem op de DSMRlogger krijgt.
Indien dit niet het geval is, lees dan mijn andere blog over het geschikt maken van de ArduinoIDE voor de ESP8266.


In de Arduino IDE klik je daarvoor de volgende menu-optie aan:
Arduino IDE Data Upload Arduino IDE Data Upload
Alle bestanden die in de “data” directory van dit project staan worden nu in een speciaal stukje van het geheugen van de ESP-01 geplaatst.

Let op! Het uploaden van het file-systeem gaat fout als je de “Serial Monitor” open hebt staan!

Nu kun je de DSMRlogger aansluiten op de Slimme Meter, alleen heeft hij geen weet van de gegevens van jouw WiFi netwerk. Hij creëert daarom zelf een Acces Point (AP) waar je je computer op moet aanmelden. Je herkent het AP aan de naam “ESP01‑DSMR‑xx‑<ipaddress>”. Als je verbinding met het AP hebt gemaakt start je je browser en ga je naar het <ipaddress> zoals in de naam van het AP staat. Je komt dan in het WiFi configuratie menu:
WiFi configuratie WiFi configuratie
WiFi configuratie accesspoint WiFi configuratie accesspoint
Klik op de knop [Configure WiFi] waarna een pagina zoals hiernaast staat verschijnt.

Selecteer op deze pagina het WiFi netwerk dat van jouw is en voer het wachtwoord in. Druk vervolgens op de knop [save].

Als alles goed is gegaan krijg je de volgende tekst in beeld:
Bevestiging WiFi opgeslagen Bevestiging WiFi opgeslagen
De DSMRlogger zal nu opnieuw opstarten en verbinding zoeken met jouw WiFi netwerk. Tijdens het opstarten kun je aan de blauwe led zien wat de DSMRlogger aan het doen is

1. 3 x langzaam knipperen - initiële start
2. 5 x snel knipperen - verbinding gemaakt met WiFi netwerk
3. Daarna knippert de blauwe led iedere keer als er een nieuw telegram verwerkt wordt

Als de led, na de eerste drie keer langzaam knipperen blijft branden, dan kon de DSMRlogger geen verbinding met jouw WiFi netwerk maken en start hij weer zijn eigen AP op. Dit kán komen omdat je netwerk tijdelijk niet of slecht bereikbaar was of omdat je de gegevens voor jouw WiFi netwerk niet goed hebt ingevuld. In dat geval start de DSMRlogger na een paar minuten automatisch opnieuw op en probeert weer verbinding met jouw WiFi netwerk te krijgen. Dit proces herhaalt zich tot er een verbinding tot stand komt of totdat jij opnieuw de gegevens van je WiFi netwerk invoert zoals hier voor beschreven.

De DSMRlogger Web Interface

Als de DSMRlogger verbonden is met je WiFi netwerk kun je met je browser naar het adres gaan:
http://ESP01-DSMR.local/ 
De onderstaande pagina verschijnt dan in je browser. De gegevens die je ziet worden automatisch ververst.
DSMR GUI DSMR GUI
Door op de tabbladen te klikken kun je verschillende soorten gegevens bekijken.
DSMR weekoverzicht DSMR weekoverzicht

Telnet sessie:

Om via telnet verbinding met de DSMRlogger te maken toets je, in een terminal window, het volgende commando in:
telnet ESP01-DSMR.local
Waarna je live kunt zien waar de DSMRlogger mee bezig is. Door op <enter> te drukken zie je een menu verschijnen waarmee je wat huishoudelijk zaken kunt regelen. Je sluit de telnet sessie af met de toetscombinatie ctrl+] q (control ingedrukt houden, op “]” drukken, beide los laten en op de “q” drukken).
DSMR Telnet DSMR Telnet
Let op! De DSMRlogger kan maar één actieve telnet sessie aan.

REST API

Als je, vanuit een ander programma, de gegevens uit de Slimme Meter wilt gebruiken kun je deze ophalen door het opvragen van deze URL:
http://ESP01-DSMR.local/getActual.json
De DSMRlogger geeft dan een json string terug die er zo uit ziet:
   { 
"Timestamp":"180828173739S",
"EnergyDelivered":"1497.813",
"EnergyReturned":"681.720",
"GasDelivered":"1210.44",
"Energy_Delivered_Tariff1":"724.717",
"Energy_Delivered_Tariff2":"773.096",
"Energy_Returned_Tariff1":"195.645",
"Energy_Returned_Tariff2":"486.075",
"Power_Delivered":"127.060",
"Power_Returned":"44.151",
"Voltage_l1":"232.0",
"Current_l1":"0.0",
"Voltage_l2":"237.0",
"Current_l2":"0.0",
"Voltage_l3":"235.0",
"Current_l3":"0.0",
"Power_Delivered_l1":"0.053",
"Power_Returned_l1":"0.000",
"Power_Delivered_l2":"0.070",
"Power_Returned_l2":"0.000",
"Power_Delivered_l3":"0.000",
"Power_Returned_l3":"0.173",
"StatusLong":"telegrams Processed: 9441"
}

In een vervolg blog-post zal ik laten zien hoe je deze gegevens in Home-Assistant kunt gebruiken.

Firmware updaten

Er komt een moment dat je de firmware van de DSMRlogger naar eigen inzicht en behoefte wilt aanpassen.
Het is dan vervelend om voor iedere aanpassing naar de meterkast te moeten lopen om de DSMRlogger los te koppelen, de ESP-01 uit de logger te halen en hem met een programmer naar keuze van nieuwe firmware te voorzien. Gelukkig hoeft dat niet. Je kunt in de Arduino IDE niet alleen Seriële poorten selecteren waarop de DSMRlogger is aangesloten. In het keuze menu staan ook “Netwerk poorten”:
Arduino IDE Port select Arduino IDE Port select
In mijn geval is Network port “ESP01‑DSMR at 192.168.12.142” de netwerk port van mijn DSMRlogger. Door deze port te selecteren en de nieuwe firmware te compileren en te uploaden, wordt deze draadloos naar de DSMRlogger gestuurd (je zult merken dat dat zelfs een stuk sneller gaat dan met een USB kabel!).

Zorg er wel voor dat de firmware die je upload geen vervelende bugs bevat. Het is mij meerdere keren overkomen dat ik een bug introduceer die ervoor zorgt dat het Over The Air uploaden van firmware niet meer werkt (meestal werkt de hele DSMRlogger in zo’n geval niet meer) waardoor ik alsnog naar de meterkast moest...

Het DSRM-logger bouwpakket

Slimme meter uitlezer - bouwpakket (met ESP-01) Zo langzamerhand zijn alle huizen in Nederland uitgerust met een “Slimme Meter”.  Met dit bouwpakket bouwt u zelf een DSMR-logger (Dutch Smart Meter Requirements), welke op basis van de ESP-01 het verbruik van de apparaten in huis logt. € 13,95 Bestellen
Opencircuit heeft samen met Willem Aandewiel een bouwpakket samengesteld met PCB en alle benodigde onderdelen om deze DSMR-logger zelf na te kunnen bouwen.

Met dit bouwpakket kunt u zelf de DSRM-logger bouwen op een duidelijk gestructureerde PCB. Dit scheelt niet alleen tijd, maar ziet er ook een stuk mooier uit!
Geschreven door Willem AandewielWillem Aandewiel (1955) heeft als achtergrond een opleiding in elektronica en digitale technieken. Het grootste deel van zijn werkbare leven heeft hij echter in de automatisering gewerkt waar hij zo'n beetje in alle disciplines van programmeur tot project-leider en project manager heeft gewerkt. Willem was één van de eerste Nederlanders met een micro-computer (1976) in een tijd dat de PC nog moest worden uitgevonden. Tegenwoordig houd hij zich vooral bezig met het ontwerpen en maken van kleine elektronische schakelingen met microprocessoren.Website


Beoordelingen

-
Alles werkt prima incl telnet. De ftp-functie lukt helaas nog niet.

Wij horen graag uw mening