PgUp    Home    PgDn

Womp3.14 - Hobby & DHZ Projecten

Womp3.14
Womp3.14  

P.2013C: Warmte Meter en Raspberry Pi


Inleiding

Nu het gelukt is om m.b.v. de Raspberry Pi (RPI) de slimme elektra meter uit te lezen, wordt het tijd voor de volgende uitdaging: het uitlezen van de warmte meter (ons huis is aangesloten op stadsverwarming, i.p.v. op het gasnet). De warmte meter (Landis+Gyr Ultraheat 50) heeft echter geen P1-poort en kan standaard ook niet communiceren met de slimme elektra-meter. Wel heeft de warmte meter een optische interface (conform IEC 62056-21; dat is dus geen "simpele" pulse-interface). Om daar gebruik van te maken, heb ik een prototype in elkaar gezet van een IR-lees/schrijfkop, die aangesloten wordt op de serial port van de RPI.

Prototype optische interface    Schema optische interface    Prototype IR lees/schrijf-kop


Nota Bene: zie onderstaande 'Achtergrond informtie' en mijn vorige project m.b.t. de slimme elektra meter, voor meer details over het gebruik van de seriele port van de RPI.

Resultaten

Het eerste prototype bleek op zichzelf wel te werken: als ik met een spiegeltje de IR-diode (zender) op de IR-transistor (ontvanger) richtte, dan werkte de communicatie. Maar als ik de IR-lees/schrijfkop (met een ringmagneet) op de warmtemeter plaatste, kreeg ik geen enkele reactie terug. Na wat speurwerk op internet, kwam ik erachter dat de signalen geinverteerd moesten worden. Het prototype daarop aangepast, waarna de interface wel (b)leek te werken, maar deze leverde nog niet meteen zinvolle output op. Na nog wat speurwerk en hulp van enkele andere hobbyisten, is het ook gelukt om de meter met het juiste protocol aan te spreken. Hieronder volgt een overzicht van het gebruikte python-script.

  import serial
  from time import sleep

  ser = serial.Serial("/dev/ttyAMA0", baudrate=300, bytesize=7, parity="E", stopbits=1, timeout=2, xonxoff=0, rtscts=0)

  ser.write("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
  ser.write("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")

  sleep(1.0)

  ser.write("/?!\x0D\x0A")

  print ser.readline()

  ser.baudrate=2400

  line = "X"

  try:      while line[0] != "!":
       line = ser.readline()
       print line

  finally:
     ser.close()


Output

De onderstaande afbeelding laat een deel van de output van de warmte meter zien. De eerste regel beginnend met '/' is het "Identification"-bericht, dat de meter geeft in reactie op het "Request"-bericht. Daarin staat een identificatie van de leverancier (LUG = Landis und Gyr), gewenste baudrate (C = 2.400 bps) en een leveranciersspecifieke code (UH50 = Ultra Heat 50). Daarna volgt een "telegram" met allerlei meetgegevens, waarbij de eerste twee rubrieken voor zichzelf spreken.

Meetgegevens Ultra Heat 50

IEC 62056-21

Het feit dat het niet meteen lukte om de warmtemeter uit te lezen, kon vele oorzaken hebben. De IEC 62056-21 standaard is helaas niet zonder meer beschikbaar, maar uiteindelijk heb ik de volgende feiten kunnen achterhalen:

Update 2x

Inmiddels heb ik het prototype van de lees-/schrijfkop omgezet in een gesoldeerde versie, met daaraan een plat snoer en RJ12 stekker. Nu het geheel alleen nog van een nette behuizing voorzien.

Optische interface

Verder heb ik geprobeerd om de seriele poort van de RPI onder windows als COM poort beschikbaar te krijgen ("redirect", zodat ik de UH50 met een windows-programma kan uitlezen). Helaas is dat nog niet gelukt (ook niet met tijdelijk uitgeschakelde firewall), waarschijnlijk omdat de UH50 tussentijds de snelheid aanpast (van 300 naar 2400 bps). De volgende opties heb ik uitgeprobeerd:

 Aan RPI-kant:
 - sudo apt-get install socat
   socat tcp-l:1234,reuseaddr,fork /dev/ttyAMA0,raw,b2400,echo=0,ocrnl=1

 - python rfc2217_server.py /dev/ttyAMA0
 Aan Windows-kant:
 - HW VSP3 - Virtual Serial Port
 - Com2tcp (Com0Com)

Achtergrond informatie

  > volkszaehler: IR-Schreib-Lesekopf (mijn prototype is hiervan afgeleid).
  > Reading your Electricity Meter. IEC 62056-21
  > Protocol IEC 62056-21, telegram structure (par. 4.3.1)
  > Notes on IEC 62056-21
  > How to use GPIOs on raspberry pi
  > Using the Raspberry Pi's serial port
  > Opening serial ports
  > Datablad SFH309FA IR NPN Phototransistor
  > Datablad SFH487 Infrared Emitter


... © 2013 π
Womp3.14