Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:channels:heating_control:gastherme_buderus

Gastherme mit Heatronic 3

Hier geht es um die Anbindung 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 etliche Jahre länger unter dem Namen EMS.

Hardware

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.

Hometop Software

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 in eine SQLite Datenbank schreiben. Für das Logging in den Volkszähler bietet sich die zweite Methode an. In der Konfigurationsdatei HT3/sw/config/HT3_db_cfg.xml setzt man dazu in der Sektion <sql-db> den Parameter <enable> auf on und die automatische Löschung von alten Daten (<autoerase_olddata>) auf einen Tag (1). Darunter kann unter <rrdtool-db> die Erstellung der RRD Daten ausgeschaltet werden (off, wer die RRD Daten gerne haben möchte, kann diese auch parallel erstellen lassen).

Diese Anpassungen sollten am Besten vor dem ersten Lauf des Programmes create_databases.py vergenommen werden. Sind die Datenbanken im Rahmen des Installationsprozesses von hometop-HT3 bereits erstellt worden, und es gibt keine SQLite Datei unter HT3/sw/var/databases/HT3_db.sqlite, dann lässt man create_databases.py noch einmal laufen.

Anbindung an den Volkszähler

Für die Anbindung an den Volkszähler ist es wichtig, dass die Hometop-Dienste ht_proxy.py und ht_collgate.py laufen und die SQLite Datenbank HT3_db.sqlite auch aktualisiert wird.

Mit dem folgenden Skript können dann die Daten in einem festgesetzten Abstand (voreingestellt sind 10s) abgefragt und via Middleware an die Volkszähler-DB übermittelt werden:

ht3logger.py
#!/usr/bin/python3
 
import sqlite3
from requests import post
from time import ctime,sleep
 
print("Starting up ht3logger V2.1 on "+ctime())
 
tabellen = {'heizgeraet','warmwasser'}
 
heizgeraet = {
    'T_aussen'         : '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'
}
 
warmwasser = {
    't_soll'           : 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
    't_ist'            : 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
    't_speicher'       : 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
}
 
while True:
    for table in tabellen:
        try:
            db = sqlite3.connect('file:/home/pi/HT3/sw/var/databases/HT3_db.sqlite?mode=ro', uri=True)
            db.row_factory = sqlite3.Row
            cursor = db.execute('SELECT * FROM '+table+' 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 eval(table).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)
 

Das Skript benötigt das Modul requests. Sollte es nicht schon vorhanden sein, lässt es sich mittels apt-get install python3-requests nachinstallieren.

Die zu importierenden Tabellen sowie die Kanallisten müssen im Skript manuell 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.

Daten

Die genannten Werte sind Beispiele. Ein Blick in die SQLite DB lohnt, um herauszufinden, welche Daten man selbst gerne hätte. In diesem Beispiel einer Kombitherme findet man unter T_mischer im Übrigen die DL-Warmwassertemperatur.

In der SQLite Datenbank gibt es neben der Tabelle heizgeraet noch weitere, für den Fall dass separate Heizkreise, Solarthermie oder ein Warmwasserspeicher existieren. Das Skript lässt sich entsprechend anpassen, beispielhaft ist hier neben heizgeraet noch warmwasser aufgeführt.

Systemdienst

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=ht_proxy.service ht_collgate.service middleware.service
 
[Service]
ExecStart=/home/pi/bin/ht3logger.py
ExecReload=
StandardOutput=syslog
Restart=always
 
[Install]
WantedBy=multi-user.target
Bitte beachten dass der Pfad im ExecStart Statement auch dem tatsächlichen Pfad des Programmes entspricht.

Dann sollte sich der Dienst per systemctl enable ht3logger.service und systemctl start ht3logger.service aktivieren lassen.

Weiteres

Der ht_collgate Dienst benötigt nach dem Start etwa zwei Minuten, bevor die SQLite-Datenbank auch aktualisiert wird. Während dieser Zeit kommen noch keine Daten im Volkszähler an.

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 „Betriebsstundenzä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.
hardware/channels/heating_control/gastherme_buderus.txt · Zuletzt geändert: von trabant