| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung |
| hardware:channels:heating_control:gastherme_buderus [2025/12/07 21:41] – trabant | hardware:channels:heating_control:gastherme_buderus [2025/12/09 10:59] (aktuell) – [Anbindung an den Volkszähler] trabant |
|---|
| ===== Gastherme Buderus/Bosch/Junkers mit Heatronic 3===== | ===== 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. | 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. |
| |
| |
| 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. | 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. | 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. | 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. |
| 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. | 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. |
| |
| 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. | ====Anbindung an den Volkszähler==== |
| |
| Mit dem folgenden Skript können dann die Daten in einem festgesetzten Abstand (voreingestellt sind 10s) abgefragt und via [[software:middleware:einrichtung|Middleware]] an die [[software:middleware:datenbank|Volkszähler-DB]] übermittelt werden: | 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 [[software:middleware:einrichtung|Middleware]] an die [[software:middleware:datenbank|Volkszähler-DB]] übermittelt werden: |
| | |
| <code python ht3logger.py> | <code python ht3logger.py> |
| #!/usr/bin/python3 | #!/usr/bin/python3 |
| | |
| import sqlite3 | import sqlite3 |
| from requests import post | from requests import post |
| from time import ctime,sleep | from time import ctime,sleep |
| | |
| | print("Starting up ht3logger V2.1 on "+ctime()) |
| | |
| | tabellen = {'heizgeraet','warmwasser'} |
| |
| print("Starting up ht3logger V1 on "+ctime()) | heizgeraet = { |
| | 'T_aussen' : '80089ae0-fa81-11e9-bdc6-b99d5fa0fe8b', |
| channel_list = { | 'T_vorlauf_soll' : 'af1863e0-fa81-11e9-8d30-337b7499db8e', |
| 'T_aussen' : '80089ae0-fa81-11e9-bdc6-b99d5fa0fe8b', | 'T_vorlauf_ist' : 'cbf99f10-fa81-11e9-9709-d55e7ad0883e', |
| 'T_vorlauf_soll' : 'af1863e0-fa81-11e9-8d30-337b7499db8e', | 'T_mischer' : '521a0ca0-fa8d-11e9-970f-752aababd342', |
| 'T_vorlauf_ist' : 'cbf99f10-fa81-11e9-9709-d55e7ad0883e', | 'V_heizungs_pumpe' : 'a5958bf0-fa8f-11e9-bf34-4f7c2163b201', |
| 'T_mischer' : '521a0ca0-fa8d-11e9-970f-752aababd342', | 'V_brenner_flamme' : '5ec31d30-fa90-11e9-98b7-3b9f4a33ba29', |
| 'V_heizungs_pumpe' : 'a5958bf0-fa8f-11e9-bf34-4f7c2163b201', | 'V_leistung' : '81f3ed90-7f7b-11ed-90c6-b747fd43b61f', |
| 'V_brenner_flamme' : '5ec31d30-fa90-11e9-98b7-3b9f4a33ba29', | 'C_brenner_gesamt' : '9bbd1c20-a8ee-11e5-82ab-079b3d8ffc8e' |
| '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: | while True: |
| try: | for table in tabellen: |
| db = sqlite3.connect('file:/home/pi/HT3/sw/var/databases/HT3_db.sqlite?mode=ro', uri=True) | try: |
| db.row_factory = sqlite3.Row | db = sqlite3.connect('file:/home/pi/HT3/sw/var/databases/HT3_db.sqlite?mode=ro', uri=True) |
| cursor = db.execute('SELECT * FROM heizgeraet ORDER BY utc DESC LIMIT 1') | db.row_factory = sqlite3.Row |
| except: | cursor = db.execute('SELECT * FROM '+table+' ORDER BY utc DESC LIMIT 1') |
| print("Error accessing SQLite database.") | except: |
| raise SystemExit(2) | print("Error accessing Sqlite database.") |
| for dbvalue in cursor: | raise SystemExit(2) |
| timestamp = int(dbvalue['UTC'] * 1000) | for dbvalue in cursor: |
| for key,uuid in channel_list.items(): | timestamp = int(dbvalue['UTC'] * 1000) |
| try: | for key,uuid in eval(table).items(): |
| #print(key, timestamp, uuid, dbvalue[key]) | try: |
| post('http://localhost/middleware/data.json', data='uuid':uuid,'ts':timestamp,'value':dbvalue[key]}) | #print(key, timestamp, uuid, dbvalue[key]) |
| except: | post('http://localhost/middleware/data.json', data={'uuid':uuid,'ts':timestamp,'value':dbvalue[key]}) |
| print("Couldn't post to VZ Middleware.") | except: |
| db.close() | print("Couldn't post to VZ Middleware.") |
| sleep(10) | db.close() |
| | sleep(10) |
| | |
| </code> | </code> |
| | Das Skript benötigt das Modul ''requests''. Sollte es nicht schon vorhanden sein, lässt es sich mittels ''apt-get install python3-requests'' nachinstallieren. |
| |
| <note important>Die ''channel_list'' im Skript muss 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 [[software:middleware:einrichtung|Kanals]] im VZ übereinstimmen.</note> | <note important>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 [[software:middleware:einrichtung|Kanals]] im VZ übereinstimmen.</note> |
| |
| 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. | ==== Daten ==== |
| |
| <note tip>In der SQLite Datenbank gibt es neben der Tabelle ''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.</note> | 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: | 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: |
| </note> | </note> |
| Dann sollte sich der Dienst per ''systemctl enable ht3logger.service'' und ''systemctl start ht3logger.service'' aktivieren lassen. | Dann sollte sich der Dienst per ''systemctl enable ht3logger.service'' und ''systemctl start ht3logger.service'' aktivieren lassen. |
| | |
| | ==== Weiteres ==== |
| |
| <note tip>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.</note> | <note tip>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.</note> |