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!

27 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

  2. Hartelijk dank, nu nog een service schrijven die deze data aanbiedt en stockeert in een database.

    • Hi Fred, that’s not possible as it’s a serial port. Only the connector looks similar, the data signal over it is completely different. Even if you would have a router with a serial port, which consumer models do not have, it most likely would only support RS232 or RS485.

      • OK, i just bought a raspberry pi, already can access the data through your command and python script, now looking how i can actually use the data and break the data from the meter.

  3. Hi Jens,

    Fantastische tekst en uitleg! Perfect wat ik nodig had! Ik probeer de meter uit te lezen via een ComfortClick oplossing (misschien ken je dit?); maar ik stoop op een aantal problemen; m.n. de “End of line”. Als ik je script even nalees, denk ik dat een “!” de gevraagde “End of line” is (klopt?); maar ik zie ook een hoop staan over de checksum.
    Is er een manier om dit te berekenen zodat ik dit eventueel kan meegeven met de parser?

    Grtn,
    Michiel

    • Dag Michiel,
      Ik ken ComfortClick verder niet maar ! is inderdaad de end of line. De bytes daarna, zijn de CRC16 checksum van het gehele bericht ervoor, inclusief de !. CRC16 is een standaard methode om dit te doen dus misschien heeft de parser die optie ingebouwd?

      Het is ook geen verplichting om dit te doen maar dan moet je wel zorgen dat bij ongeldige data, dit wordt opgevangen in de rest van het parsen/code.

  4. Beste Jens,
    Geweldig duidelijk uitgelegd.
    Ik zoek iemand die een projectje wil opstarten met mij om verschillende apps op de markt te brengen die deze informatie gebruikt.
    Als je iemand weet ? Graag !
    Jacques

    • Dag Jacques, dit lijkt me een goed idee en ik denk dat er zeker een markt voor is, zolang het eenvoudig en vooral betaalbaar blijft. Zelf heb ik wat tijd tekort hiervoor naast mijn normale job. Maar wie weet kun je iemand vinden vinden via deze weg.

  5. Werkt het lezen van de meter nog altijd voor iedereen op dit moment?

    Ik heb net op aliexpress deze ‘Domoticz on Raspberry DSMR Dutch P1 Poort Cable for Smart Slimme Meter Kaifa Landis Iskra Sagemcom Kamstrup’ kabel gekocht.

    Als ik dit aan poort P1 of S1 hang met baurdrate 115200 8N1 dan krijg ik ogenschijnlijk een binaire datastroom binnen.
    Ik vermoed dat mijn kabel niet deugt, kan iemand mij zeggen welke kabel er zeker werkt in belgie voor een 3 fase siconia T211 en waar deze gekocht kan worden.

    • Dag Frederic, de kabel die ik heb gebruikt komt van bol.com. Normaal zou je onmiddellijk leesbare data moeten zien met die settings en een juiste kabel.

    • In principe kun je gewoon hetzelfde script gebruiken, zolang dezelfde Python modules geïnstalleerd zijn. Enige aanpassing zal zijn om /dev/ttyUSBX te vervangen door de correcte COM-poort onder Windows.

  6. Jens,

    Zeer interessant, pet af … dit bespaart me veel tijd!

    In mijn geval zou ik er vooral mijn Daikin warmtepomp mee willen sturen om energie op te slaan in sanitair water en vloer. Maar voor ik eraan begin zou ik graag weten of het loont.
    Aan de kostenzijde: daikin BRP069A61 aan 200 eur + raspbery pi of dergelijke + kabeltje + …?
    Aan de batenzijde: stijging eigenverbruik en daling netverbruik met ???

    Iemand ervaring wat een realistische aanname is voor de baten?
    Iemand ervaring met de BRP069A61?

    Alvast bedankt!

  7. Hallo Jens,

    Ken je het openenergymonitor project? https://openenergymonitor.org. Een Raspberry PI is de basis voor hun toepassingen. Ze gebruiken CTs in hun standaard toepassing. Maar koppelen aan een P1 poort met jou benadering zou knap zijn!

  8. Gezien poorten 1 en 6 “Spanning voor leesapparatuur” voorzien, dacht ik een raspberry pi te gebruiken en zowel de stroom als de data via daar te voorzien. Misschien zelfs de stroom uit de S1 poort om de kabel niet te moeten splitsen. Ik vraag me wel af of zo’n kabel de hoeveelheid stroom dat een pi nodig heeft kan voorzien gezien die aders vrij dun gaan zijn. Enig idee?

    Heb jij gewoon een alleenstaande PC of zo gebruikt? Ik zie het niet in je post (tenzij ik ernaast lees).

    • Bij mij was dit inderdaad met een gewone PC. Ik denk niet dat de poort voldoende stroom kan leveren voor een rPi maar zou dit moeten opzoeken om 100% zeker te zijn.

  9. Erg interessante guide, had enkel nog een vraagje.

    Om als een te testen zou ik zelf een kabel maken van RJ11 naar serieel. Is de chip in de kabel dan nog steeds nodig of is dit enkel wanneer je serieel naar USB wil converteren?

    Alvast bedankt

    Vr gr,
    Dominique

    • De poort op de meter is gewoon serieel. Er moet dus inderdaad niets van extra elektronica tussen de poort en een seriële poort op een PC.

      • Als ik het goed versta zou ik daar direct van serieel kunnen met moxsa omvormer omzetten naar modbus en zo invoeren naar mijn PLC om verder mijn woning te sturen ?

  10. hey

    bedankt voor deze informatie kan het zeker gebruiken bij mijn GIP maar heb nog een vraagje
    kun je de p1 poort rechtstreeks op een RPI 3 model B aansluiten?

    alvast bedankt mvg:)

    • Voor zover ik weet, heeft de rPi een seriële poort op de GPIO header. pin 8: TXD (GPIO 14) en pin 10: RXD (GPIO 15).

Leave a Reply

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