Smart mätarläsare

Placerad på
I det här blogginlägget beskriver jag hur du enkelt och för lite pengar kan göra denna DSMR-logger (DSMR är en akronym för "Nederländska Smart Meter-krav") kan göra. När vi utvecklar DSMR-loggern vill vi uppnå följande:
  • Hårdvaran måste vara enkel och billig att tillverka;
  • DSMR-loggerns fasta programvara måste kunna uppdateras "Over The Air";
  • Begränsad historik måste lagras och bevaras internt;
  • DSMR-loggern måste vara åtkomlig via en extern terminal (telnet);
  • De (historiska) uppgifterna ska kunna hämtas från DSMR-loggern via FTP för eventuell extern bearbetning;
  • DSMR-loggern måste presentera data från Smart Meter via en webbläsare;
  • Data måste kunna begäras via ett REST API;
  • Den avlästa datan ska vara lätt att bearbeta vidare.
I ett uppföljande blogginlägg kommer jag att visa hur vi kan skicka data till en MQTT-mäklare och hur man konfigurerar Home-Assistant för att presentera denna data i Home-Assistant.


Tekniken i Smart Meter

Smart Meter skickar data via P1-porten (RJ12) i form av ett telegram. Hur Smart Meter gör detta och hur ett telegram är uppbyggt beskrivs i det här dokumentet. Kapitel 5 är särskilt intressant eftersom det beskriver hur det fysiska gränssnittet är uppbyggt. Detta visar bland annat att Smart Meter måste kunna leverera 5 volt vid 250mA, med en kortvarig toppströmminskning på 300mA. Kapitel 6 beskriver protokollet och de olika fälten.

Med detta dokument i handen och lite googling kommer du snart att hitta mer information. Vi är inte de första och absolut inte de enda som känner behov av att läsa av Smart Meter.
Till exempel har Matthijs Kooijman skrivit en verkligt sublim mjukvara för att analysera telegrammen från mätaren och lagra dem i småstora variabler. Naturligtvis kommer vi att använda detta bibliotek. Du kan honom här att ladda ned.

Tillbehör

Den viktigaste delen av DSMR-loggern är processorn. Vi använder en ESP8266 för detta eftersom den förutom att vara snabb och utrustad med tillräckligt med minne även kan kommunicera via WiFi. För att hålla kostnaderna nere antar vi ett ESP-01-kort (svart utgåva) med 1MB minne. Dessutom, förutom sex motstånd och tre kondensatorer (C4 är egentligen inte nödvändigt men du kan lägga till det om du har problem med att ansluta till ditt WiFi-nätverk), behöver vi en NPN-transistor (BC547) och en spänningsregulator (MCP1700-3302E). För att ansluta DSMR-loggern till Smart Meter behöver du en RJ12-kontakt med en bit tråd. Jag köpte en RJ12-kabel på internet (med två RJ12-hankontakter) och skar den på mitten.

Om du inte vill använda DSMR-loggerns PCB behöver du också en bit experimentbräda.
De totala kostnaderna är ca € 20,-

Schematisk DSMR-logger

Nedan kan du se schemat för DSMR-loggern:
Schema DSMR Logger Schema DSMR Logger
Grovt sett består schemat av fyra delar (den femte, som innehåller 5 volt och GND PWR_FLAGs, krävs tekniskt av KiCAD men är faktiskt inte en del av schemat).

Först och främst kopplingen mellan Smart Meter och DSMR-loggern. Det är enklast att löda kabeln direkt till DSMR-loggern, men du kan även använda en Molex hankontakt. Du kan inte ansluta Molex-kontakter "på fel sätt" (det skulle vara irriterande för då ansluter du 5 volt och jord från Smart Meter till jord respektive 5 volt på DSMR-loggern, vilket ESP-01 definitivt inte kommer att överleva! ). Anslutningarna på DSMR-loggern är desamma som på RJ12-kontakten (1 är ansluten till 1, 2 till 2, etc.).

Den andra delen består av spänningsregulatorn som omvandlar 5 volt från Smart Meter till 3v3 för ESP-01. Enligt databladet för ESP-01 använder den normalt 80mA och toppar vid 200-250mA. MCP1700 som används kan leverera maximalt 250mA. Tillräckligt för denna applikation.

Själva ESP-01 har bara 8 anslutningar. Två för strömförsörjningen (Vcc och GND), en för kommunikation med Smart Meter (TxD) och tre stift som måste vara "höga" under uppstart (CH_PD, GPIO0 och GPIO2). De två sista stiften (RST och TxD) används inte.

Den sista kretsdelen, runt transistorn BC547, har två funktioner. Först och främst säkerställer den att 5 voltsdata från Smart Meter inte överbelastas 3,3 volts ingången på ESP8266. Så det är i första hand en Level-Shifter. Men det är också en växelriktare som omvandlar den inverterade signalen från Smart Meter till en icke-inverterad signal för ESP8266.

Hårdvaran

Som ett bevis på konceptet lödde jag en första version av DSMR-loggern på ett experimentkort.
DSRM - Experimentutskrift DSRM - Experimentutskrift
Här kan du se det slutliga resultatet kopplat till Smart Meter:
DSRM - Experiment PCB slutfört DSRM - Experiment PCB slutfört
När det visade sig att allt fungerar som planerat designade jag ett kretskort med KiCAD.
Designa DSRM Logger Designa DSRM Logger

Installera firmware på ESP-01

Ett av designmålen är att firmware "Om The Air” (via flyg) ska kunna sättas på DSMR-loggern. Det var också framgångsrikt, men du kommer alltid att behöva sätta in firmware på ESP-01 som erbjuder denna funktion för första gången. Därför kan du inte undvika att skicka den fasta programvaran via ett trådbundet sätt till DSMR-loggern minst en gång. Dessutom, under utvecklingen av mjukvaran, hände det mig flera gånger att jag introducerade en bugg som gjorde att OTA-uppladdningen inte längre fungerade. Även då är det enda sättet att skicka den fasta programvaran, utan en bugg, till DSMR-loggern via tråd.

Du behöver en programmerare för att programmera ESP-01. En annan billig lösning är att ladda ett specialprogram i en Arduino UNO och sedan göra ett antal anslutningar mellan Arduino och ESP-01-kortet.
Det enklaste sättet är att köpa en "ESP-01 till USB -adapter" och göra en liten modifiering (se mitt blogginlägg).

Mjukvaran

I princip är mjukvaran väldigt enkel (se exemplet som ingår i DMSR-biblioteket). Men om du vill ha några fler alternativ blir det snabbt ett riktigt projekt!

DSMR-loggern använder följande bibliotek:
Dessa måste därför installeras i din Arduino -IDE-miljö.

Vi använder även den enkla FTP-servern från David Paiva. Detta ingår som källa direkt i DSMRlogger2HTTP-skissen (två flikar) och du använder därför citattecken (“) istället för mindre och större än-tecken för include.
Specialbehandlingen var nödvändig eftersom jag gjorde mindre ändringar i källan och inte vill att de ska gå förlorade vid en biblioteksuppdatering.

Skissen består av totalt åtta flikar. Huvudprogrammet, FTPserver.cpp, FTPserver.h, SPIFFSstuff, TimeStuff, UpdateHTML, WiFiStuff och menuStuff. Du kan ladda ner programvaran som en ZIP-fil från GitHub och packa sedan upp i din Arduino -projektmapp. Om du har git installerat på din maskin kan du också klona förvaret med kommandot:

git-klon https://github.com/mrWheel/DSMRlogger2HTTP.git

Den kommer sedan att skapa, i katalogen där du kör kommandot (helst Arduino projektmappen), en mapp som heter "DSMRlogger2HTTP" som innehåller all kod, inklusive en "data"-katalog för att lagra ESP-filsystemet. -01 (detta också innehåller filen "index.html").

I pseudokod ser programmet ut så här:
Huvudprogrammet upprepas i det oändliga och består av följande steg:

Börja använda DSMRlogger

Innan du kan använda DSMRlogger måste du ladda upp inte bara firmware utan även ett filsystem med innehåll till DSMRlogger. För enkelhetens skull kommer jag att anta att du vet hur man laddar upp firmware och kommer att begränsa mig till att förklara hur man får filsystemet på DSMRlogger.
Om inte, läs min andra blogg om det vilket gör ArduinoIDE lämplig för ESP8266.


I Arduino IDE, klicka på följande menyalternativ:
Uppladdning av Arduino IDE-data Uppladdning av Arduino IDE-data
Alla filer som finns i "data"-katalogen i detta projekt är nu placerade i en speciell del av ESP-01:s minne.

OBS! Att ladda upp filsystemet går fel om du har "Serial Monitor" öppen!

Nu kan du ansluta DSMRlogger till Smart Meter, men den känner inte till data för ditt WiFi-nätverk. Den skapar därför själv en åtkomstpunkt (AP) som du måste registrera din dator till. Du kan känna igen AP med namnet "ESP01-DSMR-xx-". När du har anslutit till AP, starta din webbläsare och gå till som står i AP:s namn. Du kommer sedan in i WiFi-konfigurationsmenyn:
Wi-Fi-konfiguration Wi-Fi-konfiguration
WiFi-konfiguration åtkomstpunkt WiFi-konfiguration åtkomstpunkt
Klicka på knappen [Konfigurera WiFi], varefter en sida som visas till höger visas.

På den här sidan väljer du det WiFi-nätverk som tillhör dig och anger lösenordet. Tryck sedan på [spara]-knappen.

Om allt gick bra kommer du att se följande text:
Bekräftelse WiFi sparat Bekräftelse WiFi sparat
DSMRloggern kommer nu att starta om och ansluta till ditt WiFi-nätverk. Under uppstart kan du se från den blå lysdioden vad DSMRloggern gör

1. 3 långsamma blinkningar - första start
2. 5 snabba blinkningar - ansluten till WiFi-nätverk
3. Därefter blinkar den blå lysdioden varje gång ett nytt telegram bearbetas

Om lysdioden förblir tänd efter de tre första långsamma blinkningarna, kunde DSMRloggern inte ansluta till ditt WiFi-nätverk och kommer att starta om sin egen AP. Det kan bero på att ditt nätverk tillfälligt var otillgängligt eller dåligt tillgängligt eller att du inte angav detaljerna för ditt WiFi-nätverk korrekt. I så fall startar DSMRloggern automatiskt om efter några minuter och försöker återansluta till ditt WiFi-nätverk. Denna process upprepas tills en anslutning upprättas eller tills du anger detaljerna för ditt WiFi-nätverk igen enligt beskrivningen ovan.

DSMRloggers webbgränssnitt

När DSMRlogger är ansluten till ditt WiFi-nätverk kan du gå till adressen med din webbläsare:
http://ESP01-DSMR.local/ 
Sidan nedan kommer då att visas i din webbläsare. Datan du ser uppdateras automatiskt.
DSMR GUI DSMR GUI
Genom att klicka på flikarna kan du se olika typer av data.
DSMR veckoöversikt DSMR veckoöversikt

telnet-session:

För att ansluta till DSMRlogger via telnet, skriv in följande kommando i ett terminalfönster:
telnet ESP01-DSMR.local
Därefter kan du se live vad DSMRloggern gör. Genom att trycka på visas en meny med vilken du kan ordna några hushållsärenden. Du stänger telnet-sessionen med tangentkombinationen ctrl+] q (håll ned kontrollen, tryck på “]”, släpp båda och tryck på “q”).
DSMR Telnet DSMR Telnet
OBS! DSMRloggern kan endast hantera en aktiv telnet-session.

REST API

Om du vill använda data från Smart Meter från ett annat program kan du hämta den genom att begära denna URL:
http://ESP01-DSMR.local/getActual.json
DSMRloggern returnerar sedan en json-sträng som ser ut så här:
>

I ett uppföljande blogginlägg kommer jag att visa dig hur du använder denna data i Home-Assistant.

Uppdatera firmware

Det kommer en tid när du vill anpassa firmwaren för DSMRloggern efter dina egna insikter och behov.
Det är då irriterande att behöva gå till mätarskåpet för varje justering för att koppla bort DSMRloggern, ta bort ESP-01 från loggern och förse den med ny firmware med valfri programmerare. Lyckligtvis behöver du inte. I Arduino IDE kan du inte bara välja seriella portar som DSMRloggern är ansluten till. Valmenyn innehåller också "Nätverksportar":
Välj Arduino IDE-port Välj Arduino IDE-port
I mitt fall är nätverksporten "ESP01-DSMR at 192.168.12.142" nätverksporten för min DSMRlogger. Genom att välja denna port och kompilera och ladda upp den nya firmware kommer den att skickas trådlöst till DSMRloggern (du kommer att märka att detta är ännu snabbare än med en USB kabel!).

Se bara till att den firmware du laddar upp inte innehåller några irriterande buggar. Det har hänt mig flera gånger att jag introducerar en bugg som gör att Over The Air-uppladdningen av firmware slutar fungera (vanligtvis slutar hela DSMRloggern att fungera i ett sådant fall) så att jag ändå var tvungen att gå till mätarskåpet...

DSRM-loggersatsen

Inte längre tillgänglig
Version 3 har samma funktionalitet som version 1, men har även några uppgraderingar som underlättar lödningen.
Opencircuit har tillsammans med Willem Aandewiel satt ihop ett kit med PCB och alla nödvändiga delar för att själv bygga denna DSMR-logger.

Med detta kit kan du själv bygga DSRM-loggern på ett tydligt strukturerat PCB. Detta sparar inte bara tid, utan ser också mycket snyggare ut!
Postat av Hemsida Willem Aandewiel (1955) har en bakgrund inom elektronik och digital teknik. Men större delen av sitt yrkesverksamma liv har han arbetat inom automation där han har arbetat inom i stort sett alla discipliner från programmerare till projektledare och projektledare. Willem var en av de första holländarna med en mikrodator (KIM-1, 1976) vid en tidpunkt då datorn ännu inte hade uppfunnits. Numera sysslar han främst med design och produktion av små elektroniska kretsar med mikroprocessorer. Hans "uppdrag i livet" är att göra människor entusiastiska över att göra sina egna elektroniska kretsar, mikrodatorer och programmering.

Kommentarer

The Netherlands Verkenner
Här samma problem som Joahn Krabe skrev 12 oktober 2019. Anslutningen från DSMR (version 4.5) telefon/PC fungerar, men data från smartmätaren förblir hemliga, här finns även en Kamstrup 382 meter, 5 volts strömförsörjning, utan resultat. Vad är fel? Mätaren fungerar med en P1-monitor med TOON. Tack för förslagen.
Placerad på 
The Netherlands Johan Krabbe
Bart: https://github.com/mrWheel/DSMRlogger2HTTP Filen KiCad innehåller de nödvändiga filerna för utskrifterna, fungerar perfekt
Placerad på 
Belgium Bart De Pauw
Hej Willem, jag har redan sökt, även på din sida, men kunde inte hitta om detta även kan användas för DSMR 5.0.2 P1-telegram (i nuvarande version). Tydligen skiljer sig de belgiska Fluvius/Eandis digitala mätarna något. då den holländska DSMR 4 https://www.feebel.be/data/content/file/201804-technische-specificaties-gebruikerspoorten-digitale-meters.pdf Kanske dags att lansera en v5? Alltid villig att hjälpa till med versionstestning (jag är själv elektronikingenjör sedan 1992) Förresten, jag såg att gör-det-själv-kiten inte längre fanns? Finns det något sätt att släppa printboard-filerna så att vi kan göra dem själva? Tack på förhand för detta underbara projekt (och sedan väntar jag ett tag med att starta ett själv, det skulle vara värdelöst efter allt arbete du redan har lagt ner på det...)
Placerad på 
1
Webwinkelkeur Kiyoh Trustpilot Opencircuit