Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:channels:heating_control:gastherme_buderus

Dies ist eine alte Version des Dokuments!


Gastherme Buderus/Bosch/Junkers mit Heatronic 3

Hier geht es um die Anbindung zu einer Gastherme mit Heatronic 3, diese gibt es unter den Namen Buderus, Junkers sowie seit wenigen Jahren auch Bosch selbst. Die Regelungen sind sehr ähnlich, da ja alle aus dem Hause Bosch kommen.

Nicht passend ist diese Lösung für ältere Thermen mit Heatronic 2, die jedoch auch mit einem busfähigen Regler ausgestattet werden können. Siehe hierzu Junkers Gastherme mit Heatronic 2 und Can-Bus-Regler.

Bei den Junkers-Geräten wurde der HT3-Bus ab 2010 eingeführt, bei Buderus gibt es ihn schon etwa 10 Jahre länger unter dem Namen EMS.

Im Mikrocontroller-Forum https://www.mikrocontroller.net/topic/317004 wurden verschiedene Adapter für den Anschluss eines Heatronic 3 Busses an einen Raspberry Pi entwickelt. Mit etwas Glück bekommt man auf Nachfrage ein bereits bestücktes Adapter-Board. Dieses wird über eine zweiadrige verpolungssichere Leitung mit der Therme oder auch dem Regler verbunden.

Passend zu diesen Boards gibt es eine eigene Software, die die Dekodierung übernimmt: https://github.com/norberts1/hometop_HT3.git, auch dazu gibt es einen Thread im genannten Forum https://mikrocontroller.net/topic/324673. Diese Software ist wirklich herstellerspezifisch und würde bei Geräten anderer Hersteller mit EMS-Bus nicht so einfach funktionieren.

Die hometop-HT3 Software kann die dekodierten Daten wahlweise als RRD Dateien speichern und damit einen eigenen Webserver füttern, oder aber auch als Sqlite Datenbank. Für das Logging in den Volkszähler wählen wir die zweite Methode. In der Konfigurationsdatei setzen wir HT3_db_cfg.xml unter <sql-db> den Parameter enable auf on und wählen die automatische Löschung von alten Daten:

HT3_db_cfg.xml
"<sql-db>
  <enable>on</enable>
  <autoerase_olddata>1</autoerase_olddata>
</sql-db>"
<code>
 
Jetzt geht es an die Anbindung an den Volkszähler: 
 
 
 
Alternativ kann man das Skript auch ein bisschen anpassen, so dass es im Hintergrund läuft, in einem festgesetzten Abstand die aktuellen Daten abfragt und den VZ auf dem aktuellen Stand hält. Das sieht dann in etwa so aus:
 
<code python ht3logger.py>
#!/usr/bin/python3
 
import sqlite3
from requests import post
from time import ctime,sleep
 
print("Starting up ht3logger V1 on "+ctime())
 
channel_list = {
        'ch_V_spare_1'     : '80089ae0-fa81-11e9-bdc6-b99d5fa0fe8b',
        'T_vorlauf_soll'   : 'af1863e0-fa81-11e9-8d30-337b7499db8e',
        'T_vorlauf_ist'    : 'cbf99f10-fa81-11e9-9709-d55e7ad0883e',
        'T_mischer'        : '521a0ca0-fa8d-11e9-970f-752aababd342',
        'V_heizungs_pumpe' : 'a5958bf0-fa8f-11e9-bf34-4f7c2163b201',
        'V_brenner_flamme' : '5ec31d30-fa90-11e9-98b7-3b9f4a33ba29',
        'V_leistung'       : '81f3ed90-7f7b-11ed-90c6-b747fd43b61f',
        'C_brenner_gesamt' : '9bbd1c20-a8ee-11e5-82ab-079b3d8ffc8e'
}
 
while True:
	try:
		db = sqlite3.connect("/var/HT3/sw/var/databases/HT3_db.sqlite")
		db.row_factory = sqlite3.Row
		cursor = db.execute("SELECT * FROM heizgeraet order by utc desc limit 1")
	except:
		print("Error accessing Sqlite database.")
		raise SystemExit(2)
	for dbvalue in cursor:
		timestamp = int(dbvalue['UTC'] * 1000)
		for key,uuid in channel_list.items():
			try:
				#print(key, timestamp, uuid, dbvalue[key])
				post('http://localhost/middleware/data.json', data='uuid':uuid,'ts':timestamp,'value':dbvalue[key]})
			except:
				print("Couldn't post to VZ Middleware.")			
	db.close()
	sleep(10)

Die genannten Werte sind nur Beispiele, ein Blick in die SQLite DB genügt um herauszufinden, was man selbst gerne hätte. In diesem Beispiel einer Kombitherme findet man unter T_mischer im übrigen die DL-Warmwassertemperatur.

Bitte beachten: das Skript nutzt für die Volkszähler-DB noch nicht die UUIDs, sondern die jeweilige interne channel_id. Die Zuordnung findet man in der entities Tabelle der VZ-Datenbank
Da die hometop Software beim Startup etwas Zeit benötigt um die Datenbank zu aktualisieren, empfiehlt es sich, zwischen dem Start des ht_collgate.py und des ht3logger.pl eine Wartezeit von 3 Minuten eizuhalten (z.B. sleep 180 im Startup Skript). Andernfalls findet der logger alte Daten vor und wirft eine Fehlermeldung.

Last not least ein Bild des Frontends, was den Erfolg und auch die verwendeten Kanaltypen zeigt:

 Frontend

In diesem Fall muss für den Kanaltyp der Brennerstarts nicht der „Allgemeine Impulszähler“, sondern „Bestriebsstundenzähler (Zählerstand)“ verwendet werden. Der Grund hierfür ist, dass vom Skript nicht die einzelnen Starts geloggt werden, sondern die Therme selbst die Starts aufaddiert und auf den Bus schreibt.

TODO - Umstellung des Skriptes auf UUIDs und Verwendung der Middleware zur Datenübertragung anstelle des direkten Datenbankzugriffs. Dokumentierung der hometop-Konfiguration und der Startup-Skripts. Add prerequisites & error-handling.

hardware/channels/heating_control/gastherme_buderus.1764442716.txt.gz · Zuletzt geändert: von trabant