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 omdat deze library moeite heeft met hoge snelheden zoals 115200 baud!, 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, 7404 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

Alternatief met een BC547

*Mailtip* Dhr. Otten

Zie het Aansluitschema (zelfgebouwd) voor de P1-poort wat ik gebruikt heb. Die 2 diodes zijn voor extra veiligheid. De uitgang heb ik rechtstreeks aan de RX van een [WEMOS R1 D2 mini] hangen, zodat kan je mbv de harware-serial de data perfect kan uitlezen (115k baud rate). Superstabiel!


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


CRC Berekenen

*Mailtip* van Dhr. Otten
Voor wat betreft de CRC (de 4 hex waarden achter het “!”)
CRC is a CRC16 value calculated over the preceding characters in the data message
(from “/” to “!” using the polynomial: x16+x15+x2+1).
CRC16 uses no XOR in, no XOR out and is computed with least significant bit first.
The value is represented as 4 hexadecimal characters (MSB first).

Voorbeeldcode in C++

Bron: jantenhove @ github


Mailtips

De Sagemcom T210-D
De Sagemcom T210-D is ook een open collector. Met een 2kOhm weerstand tussen TX en +5V functioneert het uitlezen van telegrammen met een 1,8 meter lange kabel. Het functioneert ook met die 2 kilo-ohm tussen TX en RTS als je dat gebruikt om softwarematig het zenden van telegrammen te starten en stoppen.


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