P1 poort slimme meter uitlezen (hardware)

data analyse

Op internet zijn legio voorbeelden te vinden hoe je zelf je P1 poort kan uitlezen (zie bronnen onderaan de pagina), hetzij met RS232 USB kabeltjes tot aan de (net)Arduino toe, echter is niet elke methode een garantie voor succes!, omdat de P1 poort een rare seriële instelling heeft daar heb ik internet hier en daar afgespeurd om wat voorbeelden bij elkaar te brengen. Onderaan deze pagina heb ik ook een aantal scripts verzamelt om de P1 gegevens via ethernet/internet te versturen.

Waar moet ik rekening mee houden?
Er zijn twee standaarden voor het gebruikte (functionele) protocol in omloop:
– DSMR 3 protocol zijn de logische waarden zijn omgekeerd (0=1, 1=0) en 9600 7E1 (7 databits, even parity, 1 stop bit)
– DSMR 4 protocol zijn de logische waarden zijn omgekeerd (0=1, 1=0) en heeft een snelheid van 11500 baud.
Er zijn ook meters in omloop waarbij je niet de data hoeft te inverteren, en tussenvarianten, het is dus even uitproberen…

Het uitlezen met een Arduino is vrij lastig, mede omdat de Arduino een extra seriele poort moet “emuleren”, welke niet altijd goed werkt, de standaard “softwareSerial” library is ook niet de beste, daarom zijn er tal van andere “serial libraries” te vinden voor de Arduino”. Veelal is het beste om hardwarematig te seriele signalen te inverteren, dit kan met een MAX232, 7407 IC, of een BC547 / BS170 transistor, hieronder zijn een aantal voorbeelden gegeven.


Uitlezen met een USB <–> RS232 Kabel

Dit is de makkelijkste manier, de hardware in het kabeltje zelf kan vreemd genoeg al met de omgekeerde instellingen van de P1 poort overweg er is dus GEEN extra hardware nodig, gebruik de juiste seriële instellingen om de data binnen te krijgen.

serial-usb-rs232-kabel

   BESTEL NU!

P1 poort pin:RS232 kabel pin:
01 (RTS / +5v)
02 (GND)
03 (NC)
04 (TxD)02 (RxD)

p1 uitlezen usb rs232 kabel

De praktijk:

p1_uitlezen_usb_rs232_kabel_praktijk

Putty voorbeeld: (let op: zelf je eigen COM poort nummer invullen)

p1_putty_uitlezen_01

p1_putty_uitlezen_02


Uitlezen met een Arduino Uno (library: AltSoftSerial, inverter: 7404 IC)

Wat heb je nodig?

1) Arduino UNO/NANO/MEGA:

Arduino UNO R3 + USB Kabel (Funduino) zijkant Arduino NANO R3 + USB Kabel (Funduino) zijkant Arduino MEGA (Funduino) bovenkant

   BESTEL NU!

2) ArduinoIDE software
3) ArduinoIDE AltSoftSerial library
4) 7404 IC (optioneel: breadboard + jumpwires)

Inverter Gate 6-kanaals (SN74HC04N)

   BESTEL NU!

Gebruik een 7404 IC (gate inverter) om de seriële data te inverteren (0=1, 1=0), van de 7404 heb je maar 1 inverter gate nodig:

– Sluit de TX pin van de P1 poort aan op pin 1 van de 7404.
– Sluit pin 2 van de 7404 aan op pin 8 van de Arduino Uno (staat beschreven in de “AltSoftSerial library”).

Dit is de pinout van een 7404 IC (er bestaan vele benamingen voor deze IC, zoals: 74HC04, SN74HC04N, HD74LS04P)

IC_7404_pinout

Voorbeeld aansluitschema:

p1 uitlezen arduino inverter gate 7404 IC

De praktijk:

p1_uitlezen_arduino_7404IC_praktijk


Uitlezen met een Arduino Uno (library: AltSoftSerial, inverter: BC547)

Wat heb je nodig?

1) Arduino UNO/NANO/MEGA:

Arduino UNO R3 + USB Kabel (Funduino) zijkant Arduino NANO R3 + USB Kabel (Funduino) zijkant Arduino MEGA (Funduino) bovenkant

   BESTEL NU!

2) ArduinoIDE software
3) ArduinoIDE AltSoftSerial library
4) BC547 transistor
5) 2x weerstand 1K Ohm
6) 1x weerstand 10K Ohm

Dit is een pinout van de BC547 transistor:

bc547 transistor pinout

Voorbeeld aansluitschema:

p1 uitlezen arduino BC574 transistor

De praktijk:

p1_uitlezen_arduino_BC574_praktijk


Uitlezen met een Arduino Uno (library: AltSoftSerial, inverter: BS170)

Wat heb je nodig?

1) Arduino UNO/NANO/MEGA:

Arduino UNO R3 + USB Kabel (Funduino) zijkant Arduino NANO R3 + USB Kabel (Funduino) zijkant Arduino MEGA (Funduino) bovenkant

   BESTEL NU!

2) ArduinoIDE software
3) ArduinoIDE AltSoftSerial library
4) BS170 transistor
5) 1x weerstand 1K Ohm

Dit is een pinout van de BS170 transistor:

bs170 transistor pinout

Voorbeeld aansluitschema:

p1 uitlezen arduino BC170 transistor

De praktijk:

p1_uitlezen_arduino_BS170_praktijk


Gebruik deze code met de “AltSoftSerial library”, de code is inclusief de 7-bit instellingen om de P1 poort uit te lezen:

Als je nu de “serial monitor” van de Arduino software opent (@9600 baud), komt er elke 10 seconden een telegram binnen:

p1_arduino_uitlezen

Update Juni 2016

Hebben we een firmware update gehad?, er ontbreken regels in het telegram, niet meer van toepassing?, het gaat om:

p1 arduino uitlezen 2016-06


Bronnen:
Zonnig Breda – Realtime Energiemeting online met COSM
Zonstraal.be – Datalogging van “slimme meters”
Circuits Online – Slimme Meter aansluiten op Arduino
Tweakers.net – Slimme meter via P1-poort loggen met een Netduino Plus
Tweakers.net – Alix 2d2 COM2 i.c.m. Kamstrup
Wij hebben zon! – P1 en Arduino
Maarten Damen – New smart meter installed
GEJanssen – Slimme meter uitlezen met Raspberry Pi
nodo-domotica.nl – Slimme meter P1 poort uitlezen

Top