Op internet zijn al diverse beschrijvingen te vinden hoe de P1-poort van een slimme meter uitgelezen kan worden, ook m.b.v. een Raspberry Pi. Daar heb ik dan ook veel kennis en inspiratie op kunnen doen en ik ga dat hier ook niet allemaal herhalen of samenvatten. Op de volgende twee punten wijkt mijn oplossing echter af van hetgeen ik bij andere heb gelezen:
- Aansluiting van meerdere apparaten op de P1-poort, m.b.v. een zelfgebouwde splitter / hub / port duplicator
- Gebruik van de standaard seriele poort (UART op de GPIO) van de Raspebbery Pi, in plaats van een USB-poort
In de beschrijving hieronder ga ik met name in op die twee punten.
Splitter P1-poort Slimme Meter
Aan de P1-poort van mijn Slimme Meter had ik al een apparaatje aangesloten waarmee ik meterstanden via een Webinterface uit kan lezen, namelijk "Mijn Meter" van XemeX. Om alle meet-data echter goed vast te kunnen leggen in een database, wilde ik de P1-poort direct uit kunnen lezen. Uiteindelijk heb ik ervoor gekozen om daarvoor de mini-linux-computer Raspberry Pi in te zetten. Ik wilde echter ook het apparaatje van XemeX in de lucht houden. In de "Dutch Smart Meter Requirements" (DSMR versie 2.2) staat op hoofdlijn beschreven hoe een P1-splitter zou moeten werken (zie onderstaande afbeelding), maar voor zover ik heb kunnen nagaan zijn die (nog) nergens te koop.
Daarom heb ik mijn doos met oude electronica spullen maar weer eens van zolder gehaald en bij Conrad wat aanvullende onderdelen besteld. Hieronder staan de afbeeldingen van het ontwerp en het inmiddels werkende prototype voor 3 devices. Op twee punten wijkt de door mij gebouwde P1-splitter / P1-Hub af van het DSMR-ontwerp. Ten eerste is 1 van de 3 aansluitingen specifiek bedoeld voor (bijvoorbeeld) een Raspberry Pi (RPi). Het data-signaal van een standaard P1-poort is namelijk geinverteerd; op de RPi-poort van de P1-splitter is dat data-signaal juist niet geinverteerd (en geen 5,0V, maar max. 3,3V), zodat deze via een normale seriele poort gelezen kan worden. Ten tweede wordt het request-signaal alleen via de RPi-poort van de P1-splitter doorgegeven; het request-signaal van de 2 andere devices wordt alleen zichtbaar gemaakt m.b.v. een led.
In de komende tijd ga ik de P1-splitter nog op een printplaat solderen en in een nette behuizing plaatsen . . .
Seriele Poort / UART Raspberry Pi
Op de General Purpose Input Output (GPIO) van de Raspberry Pi is standaard een Serial Port (UART) beschikbaar, namelijk op de pinnen 8 (TxD/GPIO14) en 10 (RxD/GPIO15). Deze zijn standaard toegewezen als Serial Console. Om de seriele poort vrij beschikbaar te maken, zijn onderstaande stappen nodig: sudo cp /boot/cmdline.txt /boot/cmdline_backup.txt sudo joe /boot/cmdline.txt (joe is een editor, je kunt bijv. ook vi gebruiken)
=> "console=ttyAMA0,115200 kgdboc=ttyAMA0,115200" verwijderen sudo joe /etc/inittab
=> "T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100" uitzetten (# ervoor) sudo chmod a+rw /dev/ttyAMA0
sudo apt-get install minicom sudo apt-get install cu minicom cu -l /dev/ttyAMA0 -s 9600 --parity=none (exit met ∼.<enter>)
En voila, de onderstaande output wordt zichtbaar. Links staat de output die via de seriele poort van de Raspberry Pi direct van de P1-poort is uitgelezen (zie DSMR voor uitleg van de diverse rubrieken). Rechts staat de output in de webinterface van XemeX MijnMeter.
Overigens verstuurt de slimme meter alleen (elke 10 sec.) berichten, als het Request-signaal "hoog" wordt gemaakt. Je kunt er natuurlijk voor kiezen om het request signaal simpelweg standaard met de 5V te verbinden, of om het request-signaal van 1 van de overige devices te gebruiken. Bij het ontwerp van de P1-splitter heb ik er echter voor gekozen om het request-signaal aan te sturen m.b.v. de Raspberry Pi. Hiervoor heb ik de TxD-pin (8 / GPIO14) van de standaard seriele poort omgeschakeld naar een "gewone" output-poort. Hiervoor zijn de volgende stappen nodig:
In /etc/init.d/ o.b.v. "skeleton" een script maken dat bij elke (re)boot uitgevoerd wordt. sudo joe /etc/init.d/init-gpio en daarin onder "start" het volgende opnemen. echo "14" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio14/direction chmod 666 /sys/class/gpio/gpio14/value chmod 666 /sys/class/gpio/gpio14/direction #splitter inverteert dit signaal naar P1-poort, dus 1=uit, 0=aan/rts echo "0" > /sys/class/gpio/gpio14/value
chown root:root /etc/init.d/init-gpio
chmod 755 /etc/init.d/init-gpio
update-rc.d init-gpio defaults
sudo shutdown -r now
Landis&Gyr ZCF120ABd M40
Op het dak van ons huis heb ik een aantal zonnepanelen staan die met mooi weer soms meer elekriciteit opwekken dan dat ons huis(houden) op dat moment gebruikt. In die situatie registreert op de slimme meter (Landis&Gyr ZCF120ABd) de teller voor teruglevering netjes de geproduceerde kWh's. Wat echter opviel, was dat de rubriek "actuele productie" op de Xemex MijnMeter altijd op nul bleef staan (om dat beter inzichtelijk te maken heb ik de webinterface daarvan zelfs wat aangepast). De vraag was of dat een fout in de Xemex MijnMeter was, of in de slimme meter. Mede om dat te achterhalen ben ik gaan knutselen om de slimme meter via de P1-poort direct uit te lezen. En die output laat hetzelfde euvel zien, ofwel de fout zit in de slimme meter van Landis&Gyr. De discussie in een
forum van Eneco blijkt dat ook te bevestigen.
Inmiddels heb ik de klantenservice van Stedin gevraagd om mijn slimme meter te vervangen door een wel goed werkend exemplaar. Binnen de beloofde 2 werkdagen kreeg ik een nette reactie, dat mijn e-mail is doorgestuurd naar de betreffende afdeling ... Wordt vervolgd ...
[update 1] Onlangs per mail een reminder gestuurd naar de helpdesk, en de functionele mailbox van Stedin voor Prioplaatsing. Daarop kreeg snel een reactie met excuses voor de vertraagde reactie en inmiddels heb ik een concrete datum waarop mijn Slimme Meter opmgewisseld gaat worden voor een exemplaar met een goed werkende P1-poort.
[update 2] De slimme meter is vandaag vervangen door een Landis&Gyr ZCF120ABdFs2 E350. Het bovengenoemde euvel is daarmeer inderdaad verholpen. Top!