Data lezen van de P1 poort op de Belgische digitale elektriciteitsmeter

Zoals enkele andere Belgen werd, jammer genoeg, ook mijn analoge elektriciteitsmeter vervangen door een digitaal exemplaar. Initieel was ik daar best wel blij mee gezien het hiermee gemakkelijker is om het verbruik en opbrengst van de zonnepanelen bij te houden. Dat laatste is net he probleem, gezien de overheid heeft beslist dat de teller niet langer kan “terugdraaien”. Los daarvan, ik heb de meter nu dus kan ik er zowel gebruik van maken. Dit artikel beschrijft hoe je de meter kunt verbinden met je computer en hoe je de data van de P1 poort kunt gebruiken voor een Belgische digital elektriciteitsmeter.

YouTube Video

Van de info hieronder heb ik ook een YouTube video gemaakt. Uiteraard, als u liever leest, dan kunt u hieronder gewoon verdergaan. De video heeft ondertiteling in het Nederlands.

Introductie

Digitale elektriciteitsmeters worden gebruikt in veel landen. Terwijl ik hier onderzoek naar deed, of beter probeerde uit te vogelen hoe alles in elkaar zat, viel het me op dat ieder land/regio en zelfs verschillende modellen in één land op een andere manier en standaard werken (zie verder). Deze post is dus vooral interessant voor inwoners van België. Vandaar dat ik, voor de eerste keer, een Nederlandstalige versie heb gemaakt van deze post. Mocht je toch interesse hebben in de Engelstalige versie, dan kunt u die hier vinden: https://jensd.be/1183/linux/read-data-from-the-belgian-digital-meter-through-the-p1-port

De digitale elektriciteitsmeter communiceert zijn waardes, extra data en ook de waardes van de aardgasmeter terug naar de distributeur op regelmatige tijden. Er wordt hiervan gebruik gemaakt van het GSM-netwerk. Dit laat je toe om die data ook te bekijken op de website van de energiedistributeur:

Mocht het doel dus gewoon zijn om je data netjes in een overzichtelijke grafiek te krijgen dan is het eigenlijk niet nodig om de P1 poort te gebruiken. Echter, als u de data wil gebruiken om automatisatie te triggeren of om de mogelijkheid te hebben om bijna real-time information mbt. het verbruik en opbrengst te zijn, dan bent u op de juiste plaats.

De digitale meter

In België is distributeur Fluvius gestart met de uitrol en installatie van de digitale meters in Vlaanderen. Momenteel gebruikt met slechts drie verschillende types van deze digitale meters. Een model voor eenfasige installaties, een ander model met ondersteuning foor drie fasen en als derde een aardgasmeter. Deze aardgasmeter maakt gebruik van de digitale elektriciteitsmeter om zijn data door te sturen.

  • Sagecom S211: Eenfasig
  • Sagecom T211-D : Driefasig
  • Flonidan – G4SRTV: Aardgas

De P1 en S1 poorten

De elektriciteitsmeters die ik hierboven heb vermeld, hebben twee seriële poorten aan de voorkant van het toestel, achter de gelede cover aan de linkerkant. Beide poorten kunnen gebruikt worden om data van te lezen. De S1 poort zend ruwe data, rond de 2600-4000 keer/seconde. De P1 poort daarentegen is een beetje rustiger en geeft ongeveer één keer per seconde geformatteerde data door.

De P1 poort, die ik verder voor de rest van het artikel zal gebruiken, is het meest interessant voor de meeste gebruikers of integratie met automatisatie.

Fysieke poort

Zowel de P1 als S1 poort volgen de seriële RS422 standaard en maken gebruik van een RJ12-connector (RJ11 werkt ook door pin 1 en 6 niet te gebruiken). Belangrijk om te weten is dat deze poorten standaard uitgeschakeld staan. Gelukkig kan dat makkelijk opgelost worden door gebruikt te maken van de Fluvius webinterface: https://mijn.fluvius.be/poortbeheer/

Om met de poort te verbinden kunt u zelf een kabel maken met de volgende pinout:

Pinsignaalbeschrijving
1+5VSpanning voor leesapparatuur (optioneel)
2RTSInput
3GNDData ground
4
6RXOutput
6Power GNDSpanning voor leesapparatuur (optioneel)

Een andere optie, als u niet in staat bent om een kabel te maken of gewoon een beetje lui zoals mezelf, is om een kant en klaar kabel te kopen. Deze zijn breed beschikbaar en komen meestal met een geïntegreerde serial to USB convertor. Zoals deze hieronder:

Dataformaat

Het dataformaat van de P1 poort, zoals ook het fysieke formaat zoals hierboven uitgelegd, maakt gebruik van de de DSMR 5.0.2 P1 standaard. DSMR staat voor Dutch Smart Meter Requirements. Zoals de naam of afkorting laat raden, dit wat ontwikkeld door onze noorderburen. Jammer genoeg, zoals ook kort gemeld in het begin van dit artikel, viel het me op dat iedere soort meter de standaard in een licht andere manier gebruikt of implementeert. Het meeste hieronder is dus ook van toepassing op meters in andere landen, zolang ze gebruik malen van de DSMR standaard maar het kan nodig zijn dat hier en daar wat aanpassingen nodig zijn.

Alle details mbt. de standaard kunt u hier terugvinden, ter referentie: https://www.netbeheernederland.nl/_upload/Files/Slimme_meter_15_a727fce1f1.pdf

Om niet te diep in de materie te gaan maar om nog steeds alles begrijpbaar te houden, zal ik proberen om de zaken die nodig zijn om de data te gebruiken, te vermelden.

Het gehele bericht dat van de P1 poort op de meter komt (ook telegram of COSEM object genoemd) ziet er als volgt uit in de DSMR standaard:

De data zelf, in het telegram, ziet er als volgt uit:

Uit bovenstaande kunnen we volgende conclusie halen:

  • Elk blok met info (telegram) begint met een /
  • Na het startkarakter is er een vaste, modelspecifieke identificatie, gevolgd door een vaste toestelunieke identificatie.
  • De lijnen in het data gedeelte starten met een OBIS-code, inclusief identificatie van welke meter (elektriciteit of aardgas) de data heeft verzonden. Het type data volgt in deze code.
  • De waardes zijn te vinden binnen haakjes () en als er een eenheid aanwezig is, wordt dit gescheiden door een *
  • Elk blok met info (telegram) eindigt met een !
  • Het CRC veld bevat een CRC16 berekende waarde van de rest van het blok

In de praktijk: data lezen en interpreteren

Tot nu toe heb ik de dingen alleen van een theoretische kant bekeken. Dus laten we nu eens kijken hoe we data kunnen lezen en interpreteren zodat we er iets nuttig mee kunnen doen.

Hiervoor zal ik starten met een minimale installatie van Debian maar elke andere Linuxdistributie zoals Ubuntu, CentOS maar ook Windows of OS X zouden hiervoor geschikt moeten zijn en op een vergelijkbare manier moeten werken.

Eerst installeer ik pyserial en crcmod met de package manager gezien ik gebruik zal maken van Python om de data die van de P1 poort komt te parsen.

jensd@deb10:~$ sudo apt install python3-serial python3-crcmod python3-tabulate
Reading package lists… Done
Building dependency tree
...
Setting up python3-serial (3.4-4) ...

Vervolgens, om te beginnen, kunnen we proberen om de seriële poort uit te lezen. In mijn geval, zoals vermeld hierboven, maak ik gebruik van een P1 kabel met geïntegreerde serial to USB convertor. Dit zorgt er voor dat mijn seriële poort /dev/ttyUSB0 is. De instellingen voor de P1 poort zijn: 115200 baud, 8N1, Xon/Xoff.

Om gebruik te maken van de seriele poort als niet root-user, moeten eerst de correcte rechten ingesteld worden:

jensd@deb10:~$ sudo chmod o+rw /dev/ttyUSB0

En dan kunnen we, eindelijk, de data uitlezen:

jensd@deb10:~$ python3 -m serial.tools.miniterm /dev/ttyUSB0 115200 --xonxoff
--- Miniterm on /dev/ttyUSB0  115200,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
925*m3)
!CE4E
/FLU5\253xxxxxx_A

0-0:96.1.4(xxxxx)
0-0:96.1.1(xxxxxxxxxxxxxxxxxxxxxxxxxxxx)
0-0:1.0.0(210204163628W)
1-0:1.8.1(000439.094kWh)
1-0:1.8.2(000435.292kWh)
1-0:2.8.1(000035.805kWh)
1-0:2.8.2(000012.156kWh)
0-0:96.14.0(0001)
1-0:1.7.0(00.233kW)
1-0:2.7.0(00.000kW)
1-0:21.7.0(00.233kW)
1-0:22.7.0(00.000kW)
1-0:32.7.0(236.2V)
1-0:31.7.0(002.04A)
0-0:96.3.10(1)
0-0:17.0.0(999.9kW)
1-0:31.4.0(999A)
0-0:96.13.0()
0-1:24.1.0(003)
0-1:96.1.1(xxxxxxxxxxxxxxxxxxxxxxxxxxxx)
0-1:24.4.0(1)
0-1:24.2.3(210204163500W)(00343.925*m3)
!1374
/FLU5\253xxxxxx_A

0-0:96.1.4(xxxxx)
0-0:96.1.1(xxxxxxxxxxxxxxxxxxxxxxxxxxxx)
0-0:1.0.0(210204163629W)
1-0:1.8.1(000439.094kWh)
1-0:1.8.2(000435.292kWh)
1-0:2.8.1(000035.805kWh)
1-0:2.8.2(000012.156kWh)
0-0:96.14.0(0001)
1-0:1.7.0(00.228kW)
1-0:2.7.0(00.000kW)
1-0:21.7.0(00.228kW)
1-0:22.7.0(00.000kW)
1-0:32.7.0(236.3V)
1-0:31.7.0(002.01A)
0-0:96.3.10(1)
0-0:17.0.0(999.9kW)
1-0:31.4.0(999A)
0-0:96.13.0()
0-1:24.1.0(003)
0-1:96.1.1(xxxxxxxxxxxxxxxxxxxxxxxxxxxx)
0-1:24.4.0(1)
0-1:24.2.3(210204163500W)(00343.925*m3)
!4BE6

 --- exit ---

Zoals u kunt zien, komt dit overeen met het dataformaat voor DSMR die ik hierboven heb proberen beknopt te omschrijven. In de documentatie kunnen we de betekenis van de OBIS codes terugvinden. Helaas is dit niet altijd even gemakkelijk gezien de codes niet altijd exact overeenkomen en ook een meternummer of kanaal kunnen bevatten. Voor het voorbeeld hierboven, is het volgende van toepassing. Ik heb hierbij ook nog enkele andere nuttige codes bijgevoegd om compleet te zijn. Meer info, specifiek voor de Belgische meters kunt u hier ook vinden: https://www.fluvius.be/sites/fluvius/files/2020-02/technische-info-displays-digitale-elektriciteitsmeter.pdf

OBIS codebetekenis
0-0:96.1.4ID
0-0:96.1.1Serienummer van de elektriciteitsmeter (in ASCII hex)
0-0:1.0.0Timestamp van de telegram
1-0:1.8.1Tarief 1 (dag) – totaal verbruik
1-0:1.8.2Tarief 2 (nacht) – totaal verbruik
1-0:2.8.1Tarief 1 (dag) – totale injectie
1-0:2.8.2Tarief 2 (nacht) – totale injectie
0-0:96.14.0Huidig tarief (1=dag,2=nacht)
1-0:1.7.0Huidig verbuik op alle fases
1-0:2.7.0Huidige injectie op alle fases
1-0:21.7.0L1 huidig verbruik
1-0:41.7.0L2 huidig verbruik
1-0:61.7.0L3 huidig verbruik
1-0:22.7.0L1 huidige injectie
1-0:42.7.0L2 huidige injectie
1-0:62.7.0L3 huidige injectie
1-0:32.7.0L1 spanning
1-0:52.7.0L2spanning
1-0:72.7.0L3spanning
1-0:31.7.0L1 stroom
1-0:51.7.0L2 stroom
1-0:71.7.0L3 stroom
0-0:96.3.10Positie schakelaar elektriciteit
0-0:17.0.0Max. toegelaten vermogen/fase
1-0:31.4.0Max. toegelaten stroom/fase
0-0:96.13.0Bericht
0-1:24.1.0Andere toestellen op bus
0-1:96.1.1Serienummer van de aardgasmeter (in ASCII hex)
0-1:24.4.0Positie schakelaar aardgas
0-1:24.2.3Data van de aardgasmeter (timestamp) (waarde)

Python script

Door dit door een sceipt in Python te halen, om de data te parsen, krijg je volgend resultaat:

jensd@deb10:~$ python3 test.py
 
 Description                         Value           Unit
 ----------------------------------  --------------  ------
 Meter serial electricity            XXXXXXXXXXXXXX
 Timestamp                           210204172711.0
 Rate 1 (day) - total consumption    439.33          kWh
 Rate 2 (night) - total consumption  435.292         kWh
 Rate 1 (day) - total production     35.805          kWh
 Rate 2 (night) - total production   12.156          kWh
 Current rate (1=day,2=night)        1.0
 All phases consumption              0.329           kW
 All phases production               0.0             kW
 L1 consumption                      0.329           kW
 L1 production                       0.0             kW
 L1 voltage                          238.3           V
 L1 current                          2.18            A
 Switch electricity                  1.0
 Meter serial gas                    XXXXXXXXXXXXXX
 Switch gas                          1.0
 Gas consumption                     343.925         m3
...
 

Mocht u interesse hebben in dit script, dan kunt u dit vinden op GitHub: https://github.com/jensdepuydt/belgian_digitalmeter_p1

het script heeft waarschijnlijk nog wat aandacht nodig maar ik denk wel dat het kan helpen als bron voor iemand die een projectje maakt en gebruik wil maken van de data die van de P1 poort komt.

Opmerkingen of vragen zijn zeker welkom hieronder!

2 thoughts on “Data lezen van de P1 poort op de Belgische digitale elektriciteitsmeter

  1. Pingback: Read data from the Belgian digital meter through the P1 port | Jensd's I/O buffer

Leave a Reply

Your email address will not be published. Required fields are marked *