Uitlezen en rapportage ISKRA slimme meter met Raspberry PI

In 2016 kregen wij een slimme meter in ons huis. Er is niet zoveel slim aan behalve dan het feit dat deze meter digitaal werkt en op afstand uitleesbaar is. Op die manier wordt het veel makkelijker om je stroom (en gas verbruik) in de gaten te houden. In eerste instantie geldt dit voor het electriciteitsbedrijf. Maar de consument wil ook wat. Natuurlijk kan je allerlei aparaten kopen om aan te sluiten op je slimme meter, maar veel leuker is om het zelf te maken. Hoe ga je daar aan beginnen.
Na wat zoeken op internet kwam ik de pagina van GEJansen tegen Slimme meter uitlezen met een Raspberry Pi. Hierin wordt beschreven hoe je een kabel aan kan sluiten aan een USB poort, hoe het telegram in elkaar steekt van een de slimme meter (elke meter werkt weer wat anders). En hoe je die uit kunt lezen in Python. Het maken van een eigen kabel heeft helaas bij mij niet gewerkt, daarom heb ik de gok genomen en een kabel kant en klaar gekocht bij SOS solution. Die werkte gelukkig wel en ik kon mijn meter uitlezen. Het was nog wat lastig om het telegram helemaal te begrijpen, maar veel clues heb ik kunnen vinden op de eerder genoemde pagina van GEJansen.
Behalve uitlezen van de meter (kan je ook gewoon op de meter zelf doen natuurlijk), wilde ik ook graag mijn eigen overzichten genereren over mijn stroom en gas verbruik. Om dat mogelijk te maken, moet de data opgeslagen worden in een database. Ik heb gekozen voor een raspberry PI 3B+ en heb daarop een minimale installatie gedaan, dus zonder desktop. De Raspberry heb ik verder nog voorzien van een 128Gb USB stickje, waar ik voorlopig voldoende data op kan slaan om elke seconde een telegram uit te lezen van mijn slimme meter in een database. Verder heb ik de Raspberry voorzien van de applicaties mySQL, R en Apache webserver en er voor gezorgd dat ik dit computertje aangesloten aan de slimme meter via een terminal verbinding kon benaderen.
De database voor de telegrammen heb ik heel simpel opgezet. Minimaal, waardoor er dadelijk wel wat programmeerwerk is om de data representabel op een scherm te laten zien. Deze database bevat alleen de data die uit de slimme meter komt, niets meer en niets minder. Nu was het zaak om de de meter uit te lezen en de data netjes in de database te stoppen. De code die ik hiervoor geschreven heb is in eerste instantie geheel gebaseerd op de code van GEJansen, natuurlijk aangepast aan mijn eigen situatie en uitgebreid met code om de database te benaderen. De code die ik hiervoor gebruik, vindt u hier Door dit scriptje elke seconde te laten draaien, wordt de database gevuld met 60 entries per minuut, 3600 per uur, 86K4 per dag en 31M536 per jaar. Dat is veel, maar mySQL draait op een Raspberry vrij soepel. Later heb ik nog wel een SQL routine toegevoegd die van alle data ouder dan een week, maar 2 entries overlaat om de database een beetje schoon te houden.
Sinds maart 2017 bewaar ik zo alle data van mijn slimme meter in een eigen database op de Raspberry PI, die ik natuurlijk weer wekelijks backup. Nu komt het programmeer gedeelte, want ik wil ook iets zien. Uiteraard heb ik hier de Apache webserver voor ingezet. Het eerste wat ik daar mogelijk heb gemaakt is een real time view op de laatste entrie in de database. Daar staat behalve het gebruik tot nu toe ook het huidige gebruik van gas en licht. Het was nog even spannend of de Raspberry wel snel genoeg was om zowel de database 1x per seconde te vullen als de deze data op een scherm 1x per seconde te displayen, maar dat bleek allemaal prima te doen. Je ziet al in het bijgevoegde voorbeeld dat de web applicatie nog veel meer kan. Naast verbruik van mijn slimme meter, houdt ik ook een overzicht van het weer bij, maar dat is een heel ander project waar ik hier verder niet op in ga. Behalve het huidige verbruik, wilde ik ook graag een live view op het verbruik in de afgelopen minuut, 5 minuten, 10 minuten, 30 minuten, 1 uur, 4 uur, 12 uur en 24 uur kunnen laten zien. Hiervoor is een scriptje geschreven (javascript) wat gebruik maakt via een .php pagina om de data real time uit de database te lezen.
In de illustratie ziet u hier een voorbeeld van een live view op de database, in dit geval ingesteld op 12 uur. Wanneer de tijdseenheid op 1 minuut wordt ingesteld, zie je de grafiek echt lopen. Als er een lamp wordt aangedaan, zie je dit met een delay van hooguit een seconde, nogmaal een bewijs dat een Raspberry PI hier snel genoeg voor is. De bijgevoegde sources bevatten overigens nog veel meer functionaliteit dan alleen het uitlezen van de digitale meter, ook het al eerder genoemde bijhouden van het weer project is hierin opgenomen. Een realtime view op het gasverbruik heb ik nooit gemaakt. Dat lukt ook niet goed. De gasmeter is aangesloten aan de slimme meter, maar wordt door deze slimme meter niet meer dan 1x per minuut of soms langer, bemonsterd. Hierdoor is een realtime view op de gasmeter op dit moment nog niet mogelijk.
De volgende uitdaging was het maken van een overzicht van het verbruik van de afgelopen dag. Dit hoeft niet meer realtime te gebeuren, maar eens per uur, dag, week, maand of jaar. Uiteraard heb ik hier ook het gasverbruik in meegenomen. Totaal gaat het hier om 10 grafieken die ik via een crontab tabel op de Raspberry PI heb geautomatiseerd. Deze grafieken worden gemaakt met R, wat ook op de Raspberry PI prima blijkt te werken. Het installeren van de benodigde libraries met de hand is nog wel een uitdaging als je alleen maar een terminal sessie hebt op een Raspberry, maar dat is uiteindelijk ook voor GGPlot prima gelukt. Hieronder vindt u een aantal voorbeelden van de overzicht die nu automatisch bij mij thuis geproduceerd worden.