Siemens UH50 / Landis+Gyr ULTRAHEAT T550 und die optische Schnittstelle

Submitted by Stefan Sedelmaier on Wed, 02/10/2016 - 10:08


Der Siemens Ultraschall-Wärme- und Kältezähler UH 50 ist offensichtlich nur "private labeling" für den Landis+Gyr ULTRAHEAT T550

Datenblatt Siemens UH 50
Datenblatt Landis+Gyr ULTRAHEAT T550

Der Zähler besitzt eine Optische Schnittstelle deren Protokoll an EN 62056-21 angeleht ist. Mithilfe eines Optischen Tastkopfs kann der Zähler ausgelesen werden.
Der originale Siemens Tastkopf ist für private Benutzer doch etwas höher preisig, der USB-Tastkopf von Propertools funktioniert problemlos mit Siemens UH 50 und Raspberry PI, es wird kein extra USB Hub benötigt, da ein FTDI-Chip im Tastkopf verbaut war, wurde das USB Device automatisch erkannt. Der Tastkopf muss an die richtige Position gestzt werden, es sind zwei kleine Platisknoppen die den Tastkopf passend zentrieren, das Kabel vom tastkopf muss nach unten zeigen.

Da das Protokoll an EN 62056-21 angeleht ist, war doch einiges an Recherche notwendig um den Zähler die gewünschten Zahlen zu entlocken. Es müssen einfach vor der eigentlichen init-Message 40 NUL Zeichen gesendet werden, danach arbeitet der Zähler fast genau nach Protokoll, natürlich sind die OBIS-Kennzahlen auch nicht im Standard enthalten, eine Beschreibung der befindend sich am Schluss.

Das Script unter /usr/local/sbin/uh50.py speichern mit chmod +x /usr/local/sbin/uh50.py ausführbar machen und aufrufen.
Ausgabe:

/LUGCUH50

6.8(0074900*kWh)6.26(04142.48*m3)9.21(66409080)
6.26*01(03957.55*m3)6.8*01(0071925*kWh)
F(0)9.20(66409080)6.35(60*m)
6.6(0016.2*kW)6.6*01(0015.3*kW)6.33(001.608*m3ph)9.4(094.4*C&092.9*C)
6.31(0046124*h)6.32(0000000*h)9.22(R)9.6(000&66409080&0&000&66409080&0)
9.7(60000)6.32*01(0000000*h)6.36(01-01&00:00)6.33*01(001.608*m3ph)
6.8.1()6.8.2()6.8.3()6.8.4()6.8.5()
6.8.1*01()6.8.2*01()6.8.3*01()
6.8.4*01()6.8.5*01()
9.4*01(094.4*C&092.9*C)
6.36.1(2016-01-18)6.36.1*01(2011-07-13)
6.36.2(2015-01-07)6.36.2*01(2015-01-07)
6.36.3(2014-12-23)6.36.3*01(2014-12-23)
6.36.4(2014-03-14)6.36.4*01(2014-03-14)
6.36.5()6.36*02(01&00:00)9.36(2016-02-12&19:36:08)9.24(1.5*m3ph)
9.17(0)9.18()9.19()9.25()
9.1(0&1&0&0000&CECV&CECV&1&5.16&5.16&F&101008&1>1>04&08&0)
9.2(&&)9.29()9.31(0014842*h)
9.0.1(00000000)9.0.2(00000000)9.34.1(000.00000*m3)9.34.2(000.00000*m3)
8.26.1(00000000*m3)8.26.2(00000000*m3)
8.26.1*01(00000000*m3)8.26.2*01(00000000*m3)
6.26.1()6.26.4()6.26.5()
6.26.1*01()6.26.4*01()6.26.5*01()0.0(66409080)
!

Bekannte OBIS Kennzahlen

  • 6.8 Zählerstand kw/h
  • 6.6 maximale Heizleistung kw/h
  • 6.26 Durchlauf m³
  • 6.33 Durchlauf maximal m³/h
  • 9.4 Vorlauf / Rücklauf maximal
  • 6.31 Betriebstunden
  • 6.32 Fehlstunden
  • 9.31 "Flowhours"

Attachments 

AttachmentSize
Plain text icon /usr/local/sbin/uh50.py754 bytes

Comments

Submitted by Joachim Gantenberg (not verified) on Mon, 11/21/2016 - 10:49

Hallo,
ich habe eine Frage zum Zähler.
Muss der Zähler vor jedem Auslesen mit der Initialisierung befeuert werden oder nur einmal, so dass er dann regelmäßig von alleine sendet?

Vielen Dank

Submitted by Stefan Sedelmaier on Tue, 11/22/2016 - 14:41

Der Zähler muss vor dem Auslesen immer mit der Initialisierung befeuert werden, prinzipiell funktioniert das nach dem Request-Response Prinzip. Erst nachdem ein Request(Anforderung) gesendet worden ist kommt ein Response(Antwort), ein Response kommt nie von allein.

Submitted by MG (not verified) on Mon, 02/04/2019 - 09:24

Hi, habe den gleichen Zähler und lese diesen mit Node-Red aus.
Bekomme somit auch die Objektdaten, wie z.B. 6.8 Zählerstand kw/h
oder 6.6 maximale Heizleistung kw/h.
Im Zähler gibt es ja aber auch noch ein "Extra-Menü", in welchem z.B. der aktuelle Durchfluss/Verbrauch dargestellt wird.
Hast du eine Idee, wie man auch an diese "aktuellen" Werte kommt. Oder werden die nicht über die optische Schnittstelle ausgegeben?

Submitted by Jan D. (not verified) on Fri, 02/08/2019 - 10:59

Hallo,
ich wollte mich nur einmal bei dir bedanken. Habe mir einen USB Tastkopf bestellt, draufgesetzt und es ist mir tagelang nicht gelungen dem Zähler etwas zu entlocken. Dank deiner Beschreibung funktioniert es jetzt aber problemlos! Vielen Dank dafür!

Submitted by Malte (not verified) on Sun, 03/01/2020 - 11:37

Hallo.
Ich würde am Liebsten nur Impulse zählen, wie es auch bei den modernen Stromzählern möglich ist.
Brauche ich dafür wirklich solch ein "Impuls-Modul" und falls ja, woher bekommt man das? Habe kein einziges der Kommunikationsmodule aus der Anleitung für den käuflichen Erwerb finden können. :)

Gruß
Malte

Submitted by NZ (not verified) on Mon, 03/09/2020 - 08:53

Hallo,
ich würde gern meinen Wärmemengenzähler UH50 bei www.volkszaehler.org mittels eine IR-Schreib-Lese einbinden. Gibt es dafür bereits eine dafür konfigurierte vz.logger.conf?
Und ist es überhaupt möglich die "Aktuelle Leistung" aus Serviceschleife LOOP 1 auszulesen? (OBIS-Kennzahl?)

Submitted by Christoph Feil (not verified) on Sun, 11/22/2020 - 13:09

Vielen Dank für die Bereitstellung der Informationen und des Skripts. Funktioniert einwandfrei.
Haben Sie vielleicht noch weitere Infos zu den anderen Kennzahlen welche ausgegeben werden? Oder eine Quelle, wo diese Daten interpretiert werden.

Vielen Dank,
Mit freundlichen Grüßen
DI Christoph Feil

Submitted by Lukas (not verified) on Wed, 03/03/2021 - 08:29

Hallo

Ich habe versucht Ihre implementierung auf einen T330 von Landis+Gyr anzuwenden. Leider war das nicht vom großem Erfolg. Da Sie sich mit der Materie der Wärmezähler auseinandergesatzt haben können sie evtl. Wisse ob es zwischen den Modell T550 und T330 derartige Unterscheide gibt, sodass man den T330 auf eine andere Weise auslesen muss. Ich bekomme nach der ausführung legidlich ein "/?!" zurück. Also das was sie kurz davor schreiben. Im try block läuft dann alles in einer Endloschleife ohne Augabewerte. Wäre dankbar wenn Sie einen Tipp/Debugvorschlag hätten. Grüße. Lukas

Submitted by Peter (not verified) on Thu, 04/29/2021 - 06:24

Hallo Lukas, hast du für dein Problem bereits eine Lösung gefunden? Ich habe auch einen T330 und komme ebenfalls an keine Daten.
Grüße Peter

Submitted by Christian (not verified) on Fri, 05/14/2021 - 15:21

Hallo Lukas,
ich hab auch ein T330 und beobachte das gleiche Verhalten.
Es kommt lediglich ein "/?!" zurück.
Ansonsten keinerlei Lebenszeichen.
Hast du weitere Erkenntnisse?

Gruß
Christian

Submitted by Alb (not verified) on Fri, 03/26/2021 - 22:24

Danke Dir für die Deine Arbeitund das Teilen hier! Ich habe damit meinen Landis&Gyr UltraHeat T550 auslesbar gekriegt. Hat mir SEHR geholfen :-)

Submitted by Martin (not verified) on Thu, 01/06/2022 - 19:14

Hallo Stefan,

Allerbesten Dank!
Hat auf Anhieb mit "Landis&Gyr UltraHeat T550" funktioniert (mit VZ-Lesekopf).

An alle: bin dankbar für weitere OBIS Codes für diesen Zähler

PS:
Die 9.36 ist der aktuelle Zeitstempel

Submitted by Danyel (not verified) on Tue, 02/08/2022 - 18:47

Wie finde ich den die init-Message die nach den 40 nullen kommt raus?

Brauch die in HEX für tasmota

Submitted by Paul (not verified) on Sun, 10/23/2022 - 19:28

Danke für Deine Arbeit, konnte so auch meinen Ultraheat T550 auslesen. Habe den von Dir verwendeten Tastkopf nicht gefunden. Hat aber mit dem IR Schreib/Lesekopf USB (Optokopf) von Weidmann Elektronik auch funktioniert.

Submitted by Ulrich Popp (not verified) on Wed, 10/26/2022 - 21:44

Ich habe mal deinen Code geschnappt und auf python3 umgeschrieben. Dabei habe ich noch python-cgi-scripte gebaut: https://codeberg.org/HoSnoopy/T550-Ausleser
Allerdings klappt das bei meinem zu Hause nicht. Da kommt kein Reply. Ich habe den Leserkopf X Mal nachjustiert. Nix. Sogar den Lesekopf getauscht. Nix.
Diese Optische Schnittstelle muß man nicht irgendwie erst einschalten, oder ? *Kopfkratz* Also am Gerät selbst?

Submitted by Chri Jaes (not verified) on Mon, 08/26/2024 - 13:47

Danke fuer das Script (und den damit verbundenen Debug)!
Hier waere eine Version, die auch unter einer neueren python version laeuft:

#!/usr/bin/python
from __future__ import print_function
import serial, time

ser = serial.Serial("/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0061-if00-port0", baudrate=300, bytesize=7, parity="E", stopbits=1, timeout=2, xonxoff=0, rtscts=0)

#send init message
ser.write(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00');
ser.write(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00');

#send request message
cmd = "/?!\x0D\x0A";
ser.write(cmd.encode());
ser.flush();
time.sleep(.5)

#read identification message
response = ser.readline()
respStr = response.decode();
print(respStr)

print("Switching to 2400 baud")
ser.baudrate=2400

try:
#read data message
while True:
response = ser.readline()
respStr = response.decode();
print(respStr, end="")
if "!" in respStr:
break
finally:
ser.close()

Add new comment