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 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 HT3/sw/config/HT3_db_cfg.xml setzen wir in der Sektion <sql-db> den Parameter <enable> auf on und wählen die automatische Löschung von alten Daten (<autoerase_olddata>1). Darunter kann unter <rrdtool-db> die Erstellung der RRD Daten ausgeschaltet werden - muss aber nicht. Diese Anpassungen sollten am Besten vor dem Lauf des Programmes create_databases.py vergenommen werden.
Für die Anbindung an den Volkszähler ist es wichtig, dass die Dienste ht_proxy.py und ht_collgate.py laufen und die Sqlite Datenbank HT3_db.sqlite auch aktualisiert wird.
Folgendes Skript kann dann verwendet werden um in einem festgesetzten Abstand (voreingestellt sind 10s) die aktuellen Daten abzufragen und via Middleware an den Volkszähler zu übermitteln:
- 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("/home/pi/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)
channel_list im Skript muss händisch angepasst werden. An erster Stelle stehen die Spaltennamen aus der hometop Sqlite-DB, an zweiter Stelle die UUID eines bestehenden VZ-Kanals. Der Name (z.B. T_vorlauf_ist kann, muss aber nicht mit der Benennung des entsprechenden Kanals im VZ übereinstimmen.
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.
heizgeraet noch weitere, für den Fall dass separate Heizkreise, Solarthermie oder ein Warmwasserspeicher existieren. Möchte man von weiteren Tabellen Daten abrufen, lässt sich das Skript einfach replizieren und entsprechend anpassen.
Wenn man das Skript dann auf dem VZ-System abgelegt hat, z.B. unter /home/pi/bin/, kann man es dann auch automatisch mittels systemd-service starten, dazu folgende Datei nach /etc/systemd/system/ kopieren:
- ht3logger.service
[Unit] Description=Logging data from hometop HT3 database to VZ Middleware After=mysql.service middleware.service nginx.service ht_proxy.service ht_collgate.service [Service] ExecStart=/home/pi/bin/ht3logger.py ExecReload= StandardOutput=syslog Restart=always [Install] WantedBy=multi-user.target
Dann sollte sich der Dienst per systemctl enable ht3logger.service und systemctl start ht3logger.service aktivieren lassen.
Last not least ein Bild des Frontends, was den Erfolg und auch die verwendeten Kanaltypen zeigt:
