DSMR-logger V4 (Slimme Meter uitlezer)

[ 261 views ]

In augustus 2018 publiceerde ik een project voor het uitlezen van de Slimme Meter.

Aan de hand van de vele reacties van de mensen die het project hebben nagebouwd en mijn eigen ervaring met versie 3 van de DSMR-logger vond ik het tijd worden om een nieuwe versie van de hardware en de firmware te ontwikkelen.

Een aantal gebruikers gaf aan gebruik te maken van externe diensten om de gelogde data in grafieken weer te geven. Ik heb ook de behoefte aan een grafische weergave van de gelogde data maar ik wil voorkomen dat ik daar externe diensten voor moet gebruiken.

De doelstellingen voor versie 4 van de DSMR-logger zijn ongeveer gelijk gebleven aan die van versie 3 met dien verstande dat ik méér data op de DSMR-logger wil opslaan én dat ik de gelogde data ook in grafieken wil kunnen bekijken.

Tot en met versie 3 van de DSMR-logger wordt iedere seconde een telegram van de Slimme Meter ontvangen. Daarvan wordt slechts een klein deel (iedere tien seconden) één telegram ook daadwerkelijk verwerkt. Op zich is dat geen probleem want de overige negen telegrammen vallen gewoon in een groot gat maar .. de ESP8266 UART moet wél op deze vloed aan data reageren (de UART is interrupt driven). Zowel de Slimme Meter als de DSMR library van Matthijs Kooijman hebben een mogelijkheid om telegrammen alleen op afroep te versturen (Slimme Meter) of te vragen (DSMR library).
Het werkt zo: De Slimme Meter verstuurd alléén een telegram als de Data Request pin “hoog” is. De DSMR library heeft een functie call “enable(true)” die een pin van de ESP8266 “hoog” maakt en deze “hoog” houdt tot er een volledig telegram is ontvangen (waarna de pin “laag” wordt gemaakt).
Omdat ik voor de eerdere versies van de DSMR-logger een ESP-01 bordje wilde gebruiken kon van deze functionaliteit geen gebruik worden gemaakt eenvoudigweg omdat de ESP-01 niet genoeg pinnen heeft om er één voor vrij te maken.

De ESP-12(E/F) heeft wel voldoende GPIO pinnen en aanzienlijk (4x) zoveel geheugen als de ESP-01(S). Het was daarom een logische keuze om deze variant van de ESP8266 te gebruiken voor versie 4 van de DSMR-logger.

Het prototype en Proof of Concept heb ik op een 1of!-ESP12 processor bordje met een 1of!-Proto bordje gemaakt.

Data Request Circuit

Voor het “hoog” en “laag” maken van de Data Request pin van de Slimme Meter heb ik verschillende varianten uitgeprobeerd. Met een combinatie van één of twee transistoren en/of MosFets kreeg ik het niet stabiel werkend. Uiteindelijk is het een opto-coupler geworden.

Hieronder staat het schema voor de Data Request functionaliteit:

Het circuit wordt gestuurd vanuit GPIO12 van de ESP8266 en zorgt ervoor dat bij een “hoog” signaal de led in de opto-coupler gaat branden.

Hierdoor zal de transistor “sluiten” (hij gaat geleiden) waardoor de 5Volt op de collector (pin5) direct op de emitter (pin4) terecht komt (hij wordt “hoog”). Hierdoor zal DTR_SM ook “hoog” worden en zal de Slimme Meter een telegram versturen.


Telegram ontvangen

Het telegram wordt door de Slimme Meter via pin 5 van de RJ12 connector met een geïnverteerde 5volt TTL logica verstuurd. Voor de ESP8266 moet dit signaal zowel (terug) geïnverteerd- als geschikt gemaakt worden voor 3v3 logica van de ESP8266.

In rust zal R6 de Base van Q1 “hoog” trekken, waardoor Q1 “gesloten” wordt en de Collector, en daarmee Rx_SM “laag” zal zijn. Als Tx_SM “laag” is zal de Base van Q1 óók “laag” worden en zal Q1 “open” gaan staan. De Collector en daarmee ook Rx_SM zal door R8 naar 3v3 getrokken worden. Rx_SM is dan dus “hoog”. Komt er bij Tx_SM een “hoog” signaal binnen, dan zal de Base van Q1 ook “hoog” worden. Hierdoor gaat Q1 geleiden en zal de Collector samen met Rx_SM “laag” worden.


Hiernaast zie je hoe dat deel van het schema er op het 1of!-Proto bordje uit ziet.



I2C Interface

Een aantal bouwers van versie 3 vroeg of het mogelijk is in een volgende versie een klein Oled scherm op te nemen. Er zijn twee mogelijkheden om een Oled scherm aan te sturen. Eén is via een SPI interface de andere maakt gebruik van de I2C interface. Ik heb ervoor gekozen de I2C interface te gebruiken.

In versie 4 is een uitbreiding poort met I2C interface opgenomen die ook voor andere modules gebruikt kan worden. In de firmware wordt een Oled scherm aangestuurd.

Er kan in de J4 poort direct een Oled-module worden gestoken. Omdat niet iedere verkrijgbare Oled-module dezelfde aansluitingen heeft moet via draad-bruggen de juiste aansluitingen van J2 naar J3 worden doorverbonden (met name GND en 3v3 zitten niet op alle Oled-modules op dezelfde plaats).


ADC Interface

Een groot nadeel van de Slimme Meter is dat deze de energie van de zonnepanelen sommeert met die van de verbruikers op dezelfde groep.

Zo krijg je nooit een inzicht in de werkelijk opgewekte energie en de werkelijk verbruikte energie. De opgewekte energie kun je ook (buiten de Slimme Meter om) meten met een AC Stroom Sensor (bijvoorbeeld een SCT013-030 of ECS1030-L59). Deze klem je om de, in de meterkast binnenkomende, fase draad van de zonnepanelen en ze geven een spanning af die afhankelijk is van de stroom die door de kabel loopt. Voor gebruik van dit soort sensoren is de ADC (Analoge to Digital Convertor) pin van de ESP8266 uitermate geschikt. In het schema van de DSMR-logger v4 heeft deze, via een weerstands-deler een bereik van 0-5volt. Door R12 en R13 (5% tolerantie, een kleinere tolerantie is beter) aan te passen kun je dit bereik veranderen.

Putting It All Together

Om het schema van de nieuwe DSMR-logger te complementeren moet het basis-circuit van de ESP8266 nog worden toegevoegd (zie mijn post over de 1of!-ESP12). Dit basis circuit bestaat uit de ESP-12, de 3v3 voeding, een Program Interface en de schakeling rond de Reset en Flash buttons.

Dit resulteert in het complete schema voor de DSMR-logger V4:

Uitgebreide (‘technische’) documentatie van dit project kun je hier vinden. Hou er wel rekening mee dat deze documentatie nog niet compleet is (work in progress).

En hieronder staat een plaatje van het prototype zoals ik dat op de 1of!-bordjes heb gemaakt en getest.

En een life versie in de meterkast:

This entry was posted in Arduino, Computer, ESP8266, Hardware, Uncategorised, WiFi. Bookmark the permalink.

5 Responses to DSMR-logger V4 (Slimme Meter uitlezer)

  1. Pingback: Slimme Meter uitlezer | Willem's Website

  2. Eric says:

    Bedenken doe ik dit allemaal niet, MAAR soldeer het graag in elkaar als er een officiële versie beschikbaar komt 🙂

    Laat de upgrade van de huidige versie maar komen. Het ziet er veelbelovend uit!

    • Hoi Eric,

      De upgrade van de Firmware komt eraan. Nog even geduld 😉

      Vandaag ontvang ik de PCB’s en ga ik kijken of er geen fouten in zitten.
      Kitjes komen ook, maar dat zal nog wel een maand to zes weken duren.

  3. Klaas says:

    Beste Willem,

    Met veel interesse heb ik je artikel gelezen. Mijn complimenten hoe goed alles er uit zien.
    Ik ben zelf ook bezig met het maken van een schema in KiCAD om mijn meter te koppelen via een ESP-12F aan domoticz. De ESP-12F wordt dan gebuikt als P1 Wifi Gateway.

    Twee kleine opmerkingen:

    1. Data Request Circuit
    De weerstand R4 150 ohm, lijkt mij aan de lage kant. Een GPIO pin kan maximaal 12mA leveren. 3,3v – 0,6v = 2,7v -> 2,7v / 150 ohm = 18mA. Mijn tip is 270 ohm te gebruiken. Ik ga zelf deze optocoupler gebruiken: PC817.
    R5 is strikt genomen niet nodig denk ik.

    2. Level-Shift inverter
    Helaas wordt de Data_GND gedeeld door de twee optocouplers in de meter. Anders was het helemaal simpel geweest.
    Ik denk zelf dat R7 kan komen te vervallen en ik zou R6 verhogen naar 5K6.

    Ik ben erg benieuwd naar je reactie! Mogelijk zie ik met mijn opmerkingen hierboven iets over het hoofd. Ik heb nog geen proef opstelling gemaakt.

    Groet, Klaas

    • Willem Aandewiel says:

      Hoi Klaas,

      Dank voor het compliment!

      In de uiteindelijke versie zijn R1 en R4 220R
      R5 en R7 zijn een poging tot ‘current limiter’. R6 heb ik 4k7 gemaakt.

      Aanpassingen aangebracht in het totaal schema, nog niet in de sub-plaatjes.

Leave a Reply

Your e-mail address will not be published. Required fields are marked *