Energie meter uitlezen via P1 poort

Om beter bij te houden wat mijn energie verbruik & opbrengst is wil ik mijn meterkast elektronisch uitlezen.
In mijn meterkast is sinds kort een z.g. slimme meter geplaatst en ook de gasmeter is vervangen.
Het doel is om deze alle 2 uit te lezen en het verbruik inzichtelijk te maken.

Natuurlijk kan je commerciële pakketten kopen zoals de pakketten van de energie leveranciers zoals de Toon of Nuons e-manager maar dan ben je geen baas over je eigen data.  Youless lijkt ook leuk, maar kan volgens mij niet meten wat ik terug lever met mijn zonnepanelen. en natuurlijk wil ik dit allemaal zo goedkoop mogelijk meten ;)

Mijn meter is van het type kamstrup 382j, zover ik kan zien zijn er verschillende manieren om de meter uit te lezen.
  • via de z.g. P1 poort
  • Optisch vie de knipper let (S0). Deze led geeft met de knipper frequentie aan hoe veel het verbruik is.
  • Optisch via 2 weg communicatie met infrarode oogje

Mijn eerste poging is om uit te lezen via de P1 poort is vrij goed gegaan....
Op http://www.zonstraal.be/wiki/Datalogging_van_%22slimme_meters%22 had ik uitgevonden dat het een redelijk eenvoudige seriele poort betreft.
De RS-232 poort op de laptop voldoet niet helemaal want de spanning is te hoog, maar een eenvoudige USB serial poort dacht ik wel omdat daar de voltages wat anders liggen.

Met een diepte investering van 3.25 EUR voor een USB seriele converter bij dx.com http://dx.com/p/5859
 + 1 eur voor een telefoon stekker houder heb ik mijn  connector gemaakt.


P1 connector
P1 nr signaal USB Serial
2 request (RTS) Verbonden met +
3 ground (GND) Verbonden met -
4N.C.Niet verbonden
5data (RxD) Verbonden met pin 2

De verbinding parameters is snelheid: 9600 7 bit, even partity  (9600 7N1) let even op die 7 bit want dat is geen standaard instelling.

Doordat ik de RTS verbonden heb met de + komt er elke 10 seconden een berichtje uit de meter:


/KMP5 ZABF001587315111 KMP lijkt de identificatie te zijn van Kamstrup

0-0:96.1.1(
205C4D246333034353537383234323121)
serienummer meter in hexadecimale ascii code
1-0:1.8.1(00185.000*kWh)Totaal verbruik tarief 1 (nacht)
1-0:1.8.2(00084.000*kWh)Totaal verbruik tarief 2 (dag)
1-0:2.8.1(00013.000*kWh)Totaal geleverd tarief 1 (nacht)
1-0:2.8.2(00019.000*kWh)Totaal geleverd tarief 2 (dag)
0-0:96.14.0(0001)Actuele tarief (1)
1-0:1.7.0(0000.98*kW)huidig verbruik
1-0:2.7.0(0000.00*kW)huidige teruglevering
0-0:17.0.0(999*A)maximum stroom per fase
0-0:96.3.10(1)stand van de schakelaar
0-0:96.13.1()bericht numeriek
0-0:96.13.0()bericht tekst
0-1:24.1.0(3)andere apparaten op de M-Bus
0-1:96.1.0(3238313031453631373038389930337131)identificatie van de gasmeter
0-1:24.3.0(120517020000)(08)(60)(1)(0-1:24.2.1)(m3)tijd van de laatste gas meting (120517020000 = 17 mei 2012 2uur
(00124.477)Verbruikte hoeveelheid gas
0-1:24.4.0(1)stand gasklep?
!Afsluiter
Structuur lijkt redelijk eenvoudig te lezen.
Volgende stap is om deze meting netjes in een database te gooien en er wat trends uit te halen. Dan kijken of ik het misschien online wil zetten op een site als Bidgely.com

Reacties

  1. Ha Marcel,

    Super dat jij ook al zo ver bent gekomen, nu heb ik een vraag. Bovenstaande heb ik ook werkend alleen krijg natuurlijk gewoon tekst op mijn seriele poort. Nu wil ik graag de informatie echt gaan loggen, dit wil ik doen door middel van het wegschrijven naar een SQL database. Kan jij aangeven hoe jij hier verder mee gegaan bent?

    Heb al enkele python scripts gevonden maar krijg het nog niet voor elkaar.

    Alvast bedankt!

    Groeten,
    Stefan

    BeantwoordenVerwijderen
    Reacties
    1. Hallo Stefan,

      Ik zal inderdaad binnekort weer een update posten hoe ik verder gegaan ben.

      In plaats van alles locaal te loggen heb ik in eerste instantie gekozen om het online te loggen en dan evt terug te schrijven naar een database (of saven als text files). Ik doe dat door elke 10sec :-) het huidige gebruik naar internet te schrijven naar een site https://cosm.com die dat heel netjes logt.

      Ik lees dan de relevante tekst regels uit de meter, neem het juiste stukje van de regel en stuur het naar die site.

      gr Marcel

      Verwijderen
    2. Ha Marcel,

      Dit is precies wat ik zoek, maar ik krijg het maar niet voor elkaar. Mocht je alvast een oplossing hebben maar niet online willen zetten zou je me een duwtje in de juiste richting kunnen geven (stefan.dingemanse[@]gmail.com)

      Alvast bedankt! En misschien kan ik nog iets voor je betekenen.

      Verwijderen
    3. Op www.smartmeterdashboard.nl is denk ik de oplossing te vinden die je zoekt. Scriptjes kun je gewoon downloaden.

      Verwijderen
    4. Geweldig wat een techneuten hebben in dit kleine landje. Is er nu echt niets dat de P1 kan uitlezen en desnoods via je router en vervolgens de laptop de meter kan uitlezen?
      Sorry, techniek vind ik razend interessant, maar ik weet er bijna niets van. Toch meen ik dat er apparaten in de handel moeten zijn dit het bovenstaande kunnen uitvoeren!!??

      Verwijderen
    5. Nog ene misschien domme opmerking: Eneco kan onze meter uitlezen. Met welke techniek doen ze dat? Zit er in de slimme meter geen Bluetooth-zendertje? Dat zou het hele probleem oplossen (dacht ik)

      Verwijderen
    6. Je netbeheerder kan de slimme meter uitlezen via de P4-poort. Dat doen ze via het GPRS-netwerk (SIM-kaart zit in de communicatie-unit). Dat doen ze alleen op verzoek van bijvoorbeeld de leverancier. Wil die op het einde van de maand een stand uitlezen om je een factuur te sturen, dan wordt die nacht één einde-maand stand opgehaald van je slimme meter.

      Verwijderen
  2. Beste Marcel,
    ik heb sinds kort ook een "slimme meter" (een ISKRA MT382, geleverd door Liander), en heb jouw instructies gevolgd om de P1-poort uit te lezen. Er komt echter geen "nette tekst" uit, maar (voor mij) onleesbare symbolen, wel netjes elke tien seconden:

    O<_C_C_C_o____7_cw_n[?~CCCOoO|~<C{|?{<8x8O~?x<888n<G{_??8<8x88?~~<G{[8<8888?^
    C{_?8<xoGCn
    C{{_{O8|C{oOwOn
    o{{OwCcon_7{O8xwn|~
    G{{O?~_C_G_<wowww3_cw_O~<G{O?|?n<8?~c<8x{?8~~n<Cs[?~CCGO|~<G{[?|?{<88x{~
    C{{O~?x<x88n<C{_??8|888~n<G{[8<x888?n
    G{8?x<xoooCGC{{O8<n
    C{{_?_~

    Ik gebruik dezelfde USB/serial converter als jij, maar krijg met een andere (de CN-104 van Sitecom) precies dezelfde resultaten.
    Ik heb de connecties en pin-verbindingen van de kabeltjes en instellingen van seriele poort grondig gecontroleerd, geen fouten daar. Ik gebruik putty om de poort uit te lezen.
    Enig idee wat ik mogelijk fout doe?
    Ik ben een absolute leek op dit gebied, elke hulp is welkom...

    BeantwoordenVerwijderen
    Reacties
    1. @Alfred

      Ik heb sinds gisteren de CN104 aangelsoten.
      En heb helaas exact zo'n uitkomst als bij jou. :-(

      Ik zie dat je post al een maandje oud is, ben jij nog verder gekomen? Ik vermoed iets met port instellingen, staat standard op 8N1 en van wat ik kan vinden zou de P1 poort 7E1 zijn. En tja, dan heb je heel andere charaters :-(

      JT

      Verwijderen
    2. Hi JT, poort instellingen moeten idd op 7E1 staan.

      Ik voor testen heb ik putty gebruikt, dat is een simpel, klein gratis programma waarmee je ook serial aan kan, in het laatste item van de connectie parameters staan de serial parameters en kan je die 7E1 ingeven.

      Als je linux gebruikt, er zit iets niet helemaal goed in de 7 bit driver, dan kan je beter mini perl/python of andere simpele taal pakken en er 1 bit vanaf strippen (zoals ik ook in het Arduino programma in mijn andere post doe).

      Verwijderen
    3. Hallo Alfred,

      Het ziet er naar uit dat je seriele poort instellingen niet op de juiste staan.
      Aan de karacters volgorde te zien lijkt de snelheid wel goed te staan.

      Die 7 bit zou je in je terminal programma moeten kunnen aanpassen. Ik gebruike putty (zie ook mijn antwoord aan JT)



      Verwijderen
    4. Hi Marcel,

      Ik gebruik ook putty of vanaf mijn windows machine naar de raspberry Pi tegaan.
      Op de raspberry gebruik ik cu of minicom als terminal programma.
      Maar als ik daar 7E1 instell blijf ik bovenstaande krijgen :-(

      Die instellingen in putty hebben toch geen invloed op wat er op de raspberry, in het terminal programma gebeurt?

      JT

      Verwijderen
    5. cu -l /dev/ttyUSB0 -7 -s 9600 --parity=even

      en toch weer dit als input vanaf de sitecom

      s{OO88wn|n
      G{o{{O?~{~{~~7_C_O7ww7wwwwn<G{O?|?~CCC{o{_{n<C{O?|?{<888~??88on<[?|?~CCC?8n<C{_?|?{<88~{go{w8o{{O~?8<888n<G{?8<8888<C{[??8<8888?n
      C{O?8?8<8oooCCn
      C{o{9_{O\n
      C{o{{O7_n
      C{o{{O{Ccon
      O?{~?~Cc_on
      O?o{O?8<77_Ow7_C_Owww~ww7wwn
      O?{~?7GcO{888CGo<?4O?{~?{wnCCCO~n
      G?{~?~?8<~7n

      Het is een CN-104 v4 004

      Verwijderen
    6. Ah, ja, ik bedoelde het inderdaad iets anders:
      probeer de CN-104 eens op je windows PC aan te sluiten (putty in dat geval ipv cu of minicom) en kijk of het dan wel werkt.

      Ik heb het idee dat de linux driver van de CN-104 wat tekort schiet bij 7bit setting. Bij linux zou je ook kunnen proberen 8 bit in te lezen, en dan 1 bit eraf te strippen in perl/php/python of welk programma je geschreven hebt om de verdere verwerking te doen. (ik heb hier een python progsel die nu het werk doet op een RPI, kan ik evt wel delen)

      Verwijderen
    7. Deze reactie is verwijderd door de auteur.

      Verwijderen
    8. Hi Marcel,

      Succes!

      Nu komen er leesbare pakketen

      /ISk5\2MT382-1003

      0-0:96.1.1( [serie nummer weggehaald] )
      1-0:1.8.1(00075.128*kWh)
      1-0:1.8.2(00046.136*kWh)
      1-0:2.8.1(00085.888*kWh)
      1-0:2.8.2(00185.890*kWh)
      0-0:96.14.0(0001)
      1-0:1.7.0(0000.00*kW)
      1-0:2.7.0(0002.54*kW)
      0-0:17.0.0(0999.00*kW)
      0-0:96.3.10(1)
      0-0:96.13.1()
      0-0:96.13.0()
      0-1:24.1.0(3)
      0-1:96.1.0( [serie nummer weggehaald] )
      0-1:24.3.0(130707090000)(00)(60)(1)(0-1:24.2.1)(m3)
      (00014.292)
      0-1:24.4.0(1)
      !


      Maar nu dus t vervolg.
      De USB driver op de raspberry heeft dus moeite met 7E1 :-(

      JT

      Verwijderen
    9. Nu komt de grap

      Ben ik op de windows PC een poosje met Python bezig (log naar csv file.
      Denk ik laat ik Raspberry nog eens proberen.
      En voer zoals gebruikelijk apt-get update uit.
      Maar vandaag ook apt-get upgrade.

      En wat denk je.

      Nu doet ie het wel ! :-)

      /ISk5\2MT382-1003

      0-0:96.1.1( [serie nummer weggehaald] )
      1-0:1.8.1(00075.133*kWh)
      1-0:1.8.2(00046.136*kWh)
      1-0:2.8.1(00100.350*kWh)
      1-0:2.8.2(00185.890*kWh)
      0-0:96.14.0(0001)
      1-0:1.7.0(0000.00*kW)
      1-0:2.7.0(0003.36*kW)
      0-0:17.0.0(0999.00*kW)
      0-0:96.3.10(1)
      0-0:96.13.1()
      0-0:96.13.0()
      0-1:24.1.0(3)
      0-1:96.1.0( [serie nummer weggehaald] )
      0-1:24.3.0(130707140000)(00)(60)(1)(0-1:24.2.1)(m3)
      (00014.384)
      0-1:24.4.0(1)
      !

      Hmmmmm

      Anyway, dank voor je hulp dusver.

      Groet JT

      Verwijderen
    10. Goed dat je het aan het werk hebt gekregen...

      Hier evt mijn python P1 reader

      https://code.google.com/p/p1-reader/source/browse/P1reader.py

      Verwijderen
    11. @JT:
      Ik ben inmiddels zover dat ik, net als jij dit soort regels ontvang:
      s{OO88wn|n
      G{o{{O?~{~{~~7_C_O7ww7wwwwn<G{O?|?~CCC{o{_{n<C{O?|?{<888~??88on<[?|?~CCC?8n<C{_?|?

      ik heb ook een apt-get update en een apt-get upgrade gedaan maar helaas werkt dat bij mij niet.
      Kan jij je iets herinneren wat je (wellicht) nog meer hebt gedaan waardoor het nu wel werkt?

      Verwijderen
  3. Beste Marcel
    Ik heb me kapstrup aangesloten op een rasberry pi met usb2serial + comport2rj11 draadje, dat heeft een tijdje gewerkt, echter nu doet niks meer, ook niet als ik comport2rj11 draadje op me laptop aansluit en via putty bekijk. Wat het voorheen wel deed.
    Kan de p1 port opgeblazen zijn ?

    BeantwoordenVerwijderen
    Reacties
    1. Hallo Ingrid,

      Zover ik me kan herinneren uit de spec zou de P1 poort kortsluit vast moeten zijn. Zou dan misschien eerder kunnen zijn dat de usb2serial niet juist is.

      Waar ik me ook een paar keer in vergist heb (maar dat blijkt verder niet uit je verhaal) is dat als je goedkope telefoon kabeltjes gebruikt er maar 2 aders bedraad zijn ipv alle 4. Met zo'n telefoon kabeltje tussen je P1 en rj11 werkt het ook niet

      Verwijderen
  4. Hey Marcel,

    Bedankt voor deze tutorial! Ik heb een DX rs232 naar usb convertertje gekocht en deze gesoldeerd. Pin 2 op geel, rood/zwart op + en -.
    Nu wil ik in Putty (windows) mijn energie meter uitlezen maar ik krijg incorrecte waardes:

    /ISk5\2M\&k
    003

    0-0:N).1(4B4136


    k1 S
    .8.1(02217.[?SkWh)
    1 R
    sB.2(01367.O[=/
    1-0:2/8/1(00000.001*=/-L,kRsBsCs"S[Wl)c!jRJ2r
    #sBK
    1-0:1/7/0(0001.15*kWkc!lKS.7.0(0000/00*kW)
    0-0:l CJJJrR[Wjc!jRJ2rr
    BK
    0-0:97.l&)()
    0-0:97.l& CJ
    0-1?26.l B
    0-1?97.l B831303l&M&[&l'"
    &l&l&njjS#.3.0(13l
    200000)(00)(60)(1)(0-1:26.3.1)(m3)
    (0163MIS[Kk
    0-1?24.4.0(1)
    !Lx

    Mijn settings zijn 9600, databits 7, stopbits 1, parity even, flow rts/cts.

    Enig idee wat er fout gaat? (andere sites die bv een andruino gebruiker hebben er ook een inverter tussen hangen)

    BeantwoordenVerwijderen
    Reacties
    1. Hallo PoweRoy,

      Als ik het goed herinner lijkt jou output meer op een verkeerde databit setting dan op een geïnverteerde output. Je zou het ook kunnen proberen met 2 stopbits

      Maar goed, het is nog eigenlijk vrij onduidelijk waarom met bij die goedkope usb2serials goed gaat. (op een of andere reden hebben ze geen probleem met dat geïnverteerde signaal). Weet je welke chipset je hebt gekregen?

      Als je een wat duurdere hebt gekocht (die met de FTDI chipset) dan kan je hem met behulp van een configuratie programmatje laten inverteren zie link in http://www.zonstraal.be/wiki/Datalogging_van_slimme_meters

      Als het toch niet lukt dan is misschien de op,lossing om er toch een inverter tussen te zetten. Er zijn verschillende mogelijkheden (bv met HD74LS04P Signal Inverter IC. of met een transitor en een weerstand. Dat laatste gebruik ik tegenwoordig met een arduino. )

      Verwijderen
  5. Afgelopen weekend ben ik bezig geweest om data uit te lezen uit mijn P1 poort.
    Ik hiervoor een (USB naar RS232) Eminent EM1610 gebruikt.
    http://www.eminent-online.com/product/332/em1016-usb-to-serial-converter-high-performance.html

    De 3 pins heb ik aangesloten op de onderstaande methode:
    Pin 2 = Rood
    Pin 3 = Zwart
    Pin 5 = Geel

    Na installatie van minicom en commando "cu -l /dev/ttyUSB0 -s 9600 --parity=none" op de Raspberry Pi krijg ik echter alleen maar Connected.

    Iemand een idee waarom het verkeerd gaat.
    Alvast bedankt.

    BeantwoordenVerwijderen
  6. Hi Nico:
    Ben jij al verder gekomen? Ik heb exact hetzelfde probleem als jij.

    BeantwoordenVerwijderen
  7. Beste Marcel, ik heb inmiddels vanuit mijn Raspberry onderstaande output:
    ook vanaf windows /putty heb ik soortgelijke output, heb jij enig idee wat er fout gaat? Ik heb het signaal niet geinverteerd.

    {s{7{~C_n
    C{o{{O?~sc~~|w7_C__C_c777w_C__7n<C{O?|?~C__O|?~{|n<C{_?|?{<87?{?wo{|n<G{[?|?~GCCCC{CCC{|n<G{[?|?{<88888?88~|n
    C{o{{O~?8<888{~<C{O??8<8888?o{~<C{[??8<8888?88n
    C{O?8?8<8oooCC{n
    C{o{{_{O8<~n
    C{o{{_7O<n
    C{o{{O7Ccon
    O?{~?~Gc_o~
    O?o{O?8<777_Oww_C__7www_O7_{_O7~
    O?{~?7CcO~8{{[88888Co<?8OGO?{~?{?~wn
    Cs?87n
    O?{~?~?8<~n<~{7{O88wn|n
    C{o{{O?~sc~~|w7_C__C_c7777_C_O7n<C{O?|?~C__O|?~{~n<C{O?|?{<87?{?~8~|n<C{[?|?~CCCCC{CCC{|n<C{[?|?{<88888?88~|n
    C{{{O~?8<888{n<C{O??8<8888?o7~<C{[??8<8888?88n
    C{O?8?8<8oooGC{n
    C{{{_{O8<~n C{o{{_7O<n
    C{o{{O7Ccon
    O?{~?~Cc_n
    O?o{O?8<777_Ow7_C_O7w7w_O7_{__7n
    O?{~?7CcO~8{{[88888GCo<?8OCO?{~?{?~w~
    Cs??87n
    O?{~?~?8<~n<~.

    BeantwoordenVerwijderen
  8. Deze reactie is verwijderd door de auteur.

    BeantwoordenVerwijderen

Een reactie posten

Populaire posts van deze blog

Onkyo TX-NR656 hacking

P1 port als energiemeter voor SolarEdge omvormer