Slimme Meter Monitor

Met de hier beschreven ‘Monitor’ kan een Slimme Meter (op afstand) uitgelezen worden.

Wie zelf de P1-poort van z’n “Slimme Meter” wil uitlezen, moet wat elektronica bouwen om de P1-signalen om te zetten naar signalen die geschikt zijn voor een microcontroller (ESP, Raspberry Pi, Arduino etc.). En er moet software geschreven worden om de ontvangen signalen te interpreteren. Dit zelfbouwproject bestaat daarom uit hardware en software:

  • De hardware is een printplaatje met wat transistors om de P1-signalen om te zetten voor de microcontroller. Het printje is zo ontworpen dat er een ESP8266 Lolin NodeMCU v3 ingeprikt kan worden.
  • De software voor de ESP8266 ontvangt de P1-data en zet die om in leesbare tekst in de vorm van een website. De software kan natuurlijk op alle mogelijke manieren aangepast en uitgebreid worden, en dat is inmiddels ook gebeurd.

De P1-poort

De P1-poort van de Slimme Meter is speciaal bedoeld om de meter uit te lezen met een extern apparaat. Deze poort is volledig gedocumenteerd zowel qua hardware als qua software.

De elektrische interface is in onderstaande figuur weergegeven (bron: DSMR-specs v5.0.2).

Hardware interface P1-poort

Van boven naar beneden:

  • De Data_Request pin moet door het externe apparaat hoog gemaakt worden. Als reactie daarop zal de Slimme Meter een ‘Telegram’ gaan verzenden: een brok data met alle meterstanden en nog veel meer. Deze pin moet hoog blijven zolang het telegram verzonden wordt. En de pin mag niet laag gemaakt worden. Niet hoog = hoge impedantie.
    Deze pin wordt hier ook wel ReadyToSend (RTS) genoemd.
  • De Data-pin is de output van de Slimme Meter. Monteer een weerstand tussen de +5V en deze pin om een spanningssignaal te maken. Deze pin wordt dan een seriële poort, alleen met TTL spanningsniveaus. De polariteit is wel conform RS232. Om dit signaal te kunnen inlezen met een microprocessor moet het logisch geïnverteerd worden.
  • Het zal inmiddels duidelijk zijn dat de P1-poort galvanisch gescheiden is van de interne elektronica van de Slimme Meter. Pin 3 is de Data_GND, de gemeenschappelijke ground voor zowel Data_Request als Data.
  • Op de pinnen 1 en 6 staat 5V, althans wanneer de Slimme Meter modern genoeg is – vanaf V5. De GND van deze voeding is verbonden met de GND van Data_Request en Data, maar is galvanisch gescheiden van de interne elektronica van de Slimme Meter.
  • Deze spanning kan gebruikt worden om een extern apparaat te voeden.

De P1-poort bestaat fysiek uit een RJ12 connector. De aansluitingen zijn als volgt:

Aansluitingen RJ-12 connector van P1-poort

Hardware

De benodigde elektronica moet zorgen voor de juiste aansturing van de Data_Request-pin van de meter, en andersom moet hij het signaal van de meter geschikt maken voor de microcontroller, in dit geval de ESP-8266. Deze twee functies zijn met een paar componenten te realiseren:

Schema Slimme Meter Monitor

Het datasignaal van de P1-poort wordt met een BS170 omgezet van 5V naar 3.3V en geïnverteerd. Daarmee kan het op een seriële ingang van de ESP aangesloten worden.
Om de Slimme Meter te verleiden om het datasignaal te sturen, moet de lijn ‘Data_Request’ hoog gemaakt worden met 5V. Een 3.3V digitale uitgang van de ESP wordt met twee transistors omgezet naar 5V.

En zo wordt de NodeMCU er in geprikt

Voeding

Uniek aan dit project is dat de ESP gevoed wordt vanuit de P1-poort. Dat kan en dat mag en het is ook nog gratis! Dat scheelt een externe voeding, een stopcontact en ruimte. Tussen de pinnen 1 en 6 van de RJ12 connector staat een voedingsspanning van 5V. Die worden aangesloten op de 0V en 5V-in van de ESP. De GND-pin 3 en de 0 van de voeding (pin6) worden met elkaar verbonden.

Volgens de DSMR-specs kan de voeding in de Slimme Meter 250 mA leveren. Deze maximale stroom is voldoende voor de ESP dus het werkt prima. NB: Deze energie mag de meter niet in rekening brengen!

Galvanische scheiding

In deze Logger is er geen galvanische scheiding toegepast tussen Logger en Slimme Meter. Want de Logger wordt gevoed vanuit de Meter en is al via die route galvanisch gekoppeld. Er is geen scheiding nodig omdat er in de Meter zelf al opto-couplers zitten en omdat er geen galvanische verbinding is met enig ander elektrisch netwerk. Hiermee wijkt dit elektronicaontwerp af van de meeste ontwerpen die je op verschillende andere websites kunt aantreffen.

Printplaat

Voor dit project heb ik een printplaat ontworpen. Hiermee is het eenvoudig om een interface te maken tussen de P1-poort van de meter en een ESP. Het vergt een handje vol onderdelen en je hebt het zo in elkaar gesoldeerd.

De print is ontworpen voor gebruik met een ESP 8266 (NodeMCU v3). Het data-signaal wordt toegevoerd aan D7/RXD2 terwijl D6/GPIO12 gebruikt wordt om het signaal ReadyToSend (RTS) op te wekken.

De printplaat bevat ruimte voor:

  • Een RJ12-connector,
  • Twee 15-pins Female-headers waar een ESP8266 ingeprikt kan worden.
    NB: De connectors zijn dubbel-rij zodat je makkelijk nog iets anders kunt aansluiten op de ESP. En op deze manier is de print geschikt voor zowel de brede als de smalle versie van de NodeMCU.
  • Een paar transistors en weerstanden om de signalen van de ESP om te zetten in P1-compatibel signalen, en vice versa.

Te koop

NB: Voor wie interesse heeft: ik heb nog een aantal printplaten over die ik wil verkopen. Bestellen kan hier.

ESP-varianten

De printplaat is voorzien van 2×2 rijen Female headers – althans de gaatjes zijn er. Daarmee is de pin geschikt voor de twee types Lolin NodeMCU’s: de compacte versie en de wat bredere en langere. Al steekt de laatste wel een beetje uit ten opzichte van de printplaat.

Software

Functionaliteit

Over de software valt heel veel te zeggen. Eerst de functionaliteit maar.

Seriële poort

Het datapakket van de P1-poort wordt ingelezen op de seriële poort. Niet degene die ook aan de USB-converter (CH304) gekoppeld is, want die kun je niet van buitenaf aansturen. Maar de andere. Daar is een klein truukje voor nodig, zie verderop.

Data inlezen

De seriële data wordt regel-voor-regel ingelezen en geïnterpreteerd. De codes aan het begin van elke regel worden uit gepluisd en zo wordt elke regel omgezet in een waarde die op de juiste plaats in een datastructuur wordt geplaatst. Aan het eind van het bericht wordt de CRC gecontroleerd. Als die OK is, wordt de nieuw gevulde datastructuur vrijgegeven en als ‘actuele data’ aangemerkt. De andere softwareonderdelen kunnen nu met deze data aan de slag.

Modi

Welke die andere softwareonderdelen zijn, is afhankelijk van de modus waarin het systeem draait:

  • Modus ‘Server’: in deze modus is de ESP een Wifi-AccessPoint waarop een webserver draait. Vanaf een mobieltje of een laptop kunnen de actuele gegevens van de Slimme Meter opgevraagd worden en kan het gebruik van de dag in de gaten gehouden worden.
  • Modus ’Client’: in deze moduls is de ESP een Wifi-client die inlogt op het thuisnetwerk en zo periodiek data verstuurt naar bijv. een Domoticz server.

Softwarearchitectuur


Todo: Plaatje + toelichting


Webserver

De webserver levert statische bestanden (html, css, js) op die samen een kleine website vormen. Vanuit deze statische pagina’s wordt m.b.v. AJAX periodiek de benodigde data opgehaald die vervolgens met javascript wordt getoond in de daarvoor bedoelde html-objecten. De data wordt door de webserver geleverd in de vorm van JSON-bestandjes.

Het meeste ‘rekenwerk’ vindt daardoor plaats in de browser en die is daar uitermate geschikt voor. De webserver kan vrij eenvoudig blijven omdat die of volledig statische bestanden of volledig dynamisch data hoeft te retourneren maar nooit zelf een dynamisch een complete HTML-pagina hoeft op te bouwen.

Daarbij komt dat er goede en uitgebreide javascript libraries zijn om bijv. grafiekjes te maken. Dat is niet te evenaren in ESP-code…

Handlers

De webserver is modulair opgebouwd. Het samenstellen van de http-response wordt uitbesteed aan zogenaamde ‘Handlers’. Deze kunnen ‘geregistreerd’ worden bij de webserver. Wanneer er een http-request binnenkomt, wordt aan elke geregistreerde Handler gevraagd of die iets kan met het in de URL opgegeven path. Als er zo’n Handler is, dan wordt het request doorgesluisd naar die Handler die de verdere afhandeling verzorg.

Er is een StaticHandler die de html, css, js, png etc. bestanden retourneert. Deze bestanden staan in het Flash-filesysteem. De Handler leest ze daar vandaan in en streamt de data naar de http-socket.

Er is ook een Handler voor json-requests. Voor elk request heeft hij een functie die op basis van de in-memory gegevens van de ESP een JSON-bestand samenstelt.

Door specifieke Handlers toe te voegen kan de functionaliteit van de webserver eenvoudig uitgebreid worden zonder de code van de webserver te hoeven wijzigen.

Beveiliging

Wanneer de Logger als webserver draait, is deze vrij toegankelijk voor iedereen die connectie maakt met het Wifi-AccessPoint dat de Logger op dat moment is. Dus iedereen die dicht genoeg in de buurt is om contact te leggen, kan het actuele gebruik etc. bekijken. Het is niet echt ingewikkeld om het AccessPoint te voorzien van een Wifi-wachtwoord.

Wanneer de Logger als webclient draait, is er een basale vorm van informatiebeveiliging toegepast. Want om in deze modus te kunnen draaien, moet de Logger inloggen op het thuisnetwerk. Daarvoor is over het algemeen een Wifi-wachtwoord nodig, dus dat moet geconfigureerd opgeslagen worden. Hetzelfde geldt voor de toegangscodes voor de Domoticz-server waar de data naartoe gestuurd wordt.

Deze toegangscodes kunnen ingevoerd worden via de in de Logger ingebouwde website. Dat gebeurt niet via HTTPS maar dat is niet erg: de kans dat iemand in of rond het huis dat dataverkeer op het juiste moment onderschept, is niet erg groot. De toegangscodes worden opgeslagen in de EEPROM van de ESP. Ze worden daarbij niet versleuteld. Maar er is wel voor gezorgd dat ze niet opgevraagd kunnen worden via de ingebouwde website of hoe dan ook. Alleen wanneer de ESP in onbevoegde maar bekwame handen valt, is het vrij eenvoudig om de toegangscodes uit te lezen uit de EEPROM. Dus kwaadwilligen die fysiek toegang krijgen tot de ESP zijn in staat het Wifi-wachtwoord te ontfutselen. In zo’n geval volstaat het wijzigen van het Wifi-wachtwoord van het thuisnetwerk.

Enkele weetjes…

Laag of hoog tarief

In het P1-datapakket zit ook een vlaggetje dat aangeeft welk tarief er momenteel geldt: hoog of laag tarief. Daarmee kun je bijv. een elektrische boiler aan- en uitschakelen zodat die bij voorkeur alleen op laag tarief wordt verwarmd.

Klok

De Slimme Meter heeft een ingebouwde GSM-module. Daaruit wordt een kloksignaal afgeleid. De actuele tijd wordt in de datapakketjes meegegeven. Daarmee kan je de Slimme Meter gebruiken als masterklok voor bijv. een Nixieklok met Wifi-module. Omdat de datapakketjes om de paar seconden worden verstuurd, is hij dus beslist niet op de 10e seconde nauwkeurig. Maar hij zal nooit veel voor- of achterlopen.