Ökofen Monitoring
Diese Seite befasst sich mit einer zentralen Pelletheizung des Herstellers Ökofen. Besonderes Augenmerk lege ich auf das Monitoring wichtiger Betriebsdaten der Heizanlage.
Diese Dokumentation ist begleitend zum Sourcecode des Softwareprojekts.

Ökofen Pellematic
Wichtige Komponenten der Ökofen Pellematic Condens Heizanlage sind:
- Pelletkessel
- Pelletsilo
- Pufferspeicher
- Pumpen für Warmwasser und Heizung
- Externer Temperaturfühler
Die Bedienung und Einstellung der Heizanlage geschieht entweder über das Touch-Bedienteil am Gerät oder die Ökofen App. Bestimmte Einstellungen sind nur über das Bedienteil am Gerät möglich, wobei für Bedienteil und App oft die sog. Codeebene nötig ist, um besonders "geschützte" Einstellungen vornehmen zu können (wie z.B. die Leistungsstufe des Kessels oder den Offset für den externen Temperaturfühler).
Software Version
Die hier vorgestellten Scripte und Parameter basieren auf der Praxis mit der Pellematic Software (Bedienteil) "Touch V4.02a_P".
Wichtige Einstellungen und Kennwerte
- Leistungsstufe des Pellematic Condens Z12 Zero Flame Kessels (über das Bedienteil auf Codeebene einzustellen: 12 [kWh] -> Wichtig für die Berechnungen zum Verbrauch
- Raumtemperatur Heizen: z.B. 21°C
- Heizkurve: z.B. Heizkurve/Kennlinienneigung 1,2 ; Fußpunkt 30°C ; Heizgrenze Heizen: 18°C ; Heizgrenze Absenken: 10°C ; Vorhaltezeit: 90min
Temperaturen und Brennwert
Folgende Tabelle zeigt expemplarisch Vorlauftemperaturen abhängig vom Sollwert der Raumtemperatur und der Außentemperatur (Quelle: Gemini):
| Außentemperatur | Vorlauf bei 20 °C Soll | Vorlauf bei 21 °C Soll | Vorlauf bei 22 °C Soll (ca.) |
| +10 °C (milder Herbst/Frühling) | ca. 33 °C | ca. 34,2 °C | ca. 35,4 °C |
| 0 °C (Gefrierpunkt) | ca. 45 °C | ca. 46,2 °C | ca. 47,4 °C |
| -10 °C (knackiger Frost) | ca. 57 °C | ca. 58,2 °C | ca. 59,4 °C |
Anmerkungen dazu (Quelle: Gemini):
- Jedes zusätzliche Grad Raum-Soll erhöht die Vorlauftemperatur bei Kennlinien-Neigung von 1,2 um 2,2 °C (1+1,2)
- Für einen Pellematic Condens bedeutet eine höhere Vorlauftemperatur auch eine höhere Rücklauftemperatur. Bleibt der Rücklauf unter ca. 45–50 °C, nutzt der Kessel die Abgaskondensation (Brennwerteffekt) noch voll aus. Bei -10 °C Außen und 22 °C Raumtemperatur-Soll gerät der Kessel langsam an den oberen Rand des optimalen Brennwertfensters (da die Rücklauftemperatur irgendwann zu hoch ist).
In meinem Beispiel bei 8°C Außentemperatur stieg der Vorlauftemperatur-Sollwert von 40,3°C auf 42,5°C, nachdem ich den Sollwert von "Raumtemperatur Heizen" von 21°C auf 22°C erhöht hatte.
Monitoring zur Datenanalyse
Konzept
Beim Monitoring geht es darum, aus aktuellen Kennzahlen der Heizanlage, die man periodisch über eine Schnittstelle bezieht, historische Daten als Zeitreihen zu speichern. So kann man den zeitlichen Verlauf der Kennzahlen einsehen und darauf basierend Berechnungen vornehmen. Optimierungen an der Anlage können vorgenommen und deren Auswirkungen überprüft werden.
Inspiriert wurde ich durch das Projekt "Ökofen Spy", welches ich verfeinert und an meine Bedürfnisse angepasst habe. Außerdem verwende ich aktuell nicht Grafana zur Visualisierung und Berechnung von Kennwerten, sondern nutze die Möglichkeiten der eh verwendeten InfluxDB v2 Datenbank, die im Gegensatz zu Version 1, die in "Ökofen Spy" verwendet wird, ein Dashboard mitbringt.
Das Monitoring basiert auf:
- Linux Mini-PC/Server mit openSUSE Tumbleweed
- InfluxDB v2 (Zeitreihendatenbank)
- JSON Schnittstelle der Ökofen Heizanlage
- Script zum Datensammeln aus Ökofen Spy, angepasst an InfluxDB v2 und mit Fehlerkorrektur für JSON-Syntax der V4.02 Software von Ökofen
- Cronjob zum Ausführen der Datensammlung (z.B. alle 4 min)
- Dashboard mit Grafiken und Berechnungen mit InfluxDB v2
JSON Schnittstelle
Allgemeines
Die Ökofen Heizanlage hat eine eingebaute JSON-Schnittstelle, mit der man wichtige Kenndaten der Heizanlage auslesen kann, z.B. die aktuelle Vorlauftemperatur, die Temperatur des Außenfühlers oder auch die aktuelle Leistung des Brenners.
Einrichtung
Diese Schnittstelle muss am Touch-Bedienteil eingeschaltet werden. Die Einstellung findet sich unter den "IP-/Netzwerk-Einstellungen" ganz unten. Einzugeben sind:
| Parameter | Wert | Anmerkung |
|---|---|---|
| JSON Modus | Ein | |
| JSON Passwort | Irgendeine Zeichenfolge | Passwort ist ein Teil der URL. Der Standardwert sollte verändert werden. |
| JSON Port | 4321 |
Spezifikation
Leider hat Ökofen die Spezifikation der Schnittstelle nicht für die Öffentlichkeit dokumentiert (ein Trauerspiel!), daher ist Reverse Enginieering nötig, um die zurückgegebene Werte und deren Einheiten zu verstehen. Einige Entwickler und Bastler haben bereits Vorarbeit geleistet, u.a. hier dokumentiert.
- https://github.com/thannaske/oekofen-json-documentation
- https://nc-x.com/oekofen-spy
- https://forum.iobroker.net/assets/uploads/files/1635351967656-oekoenscropt.txt
Eine allgemeine Kurzerklärung der Schnittstelle bekommt man nach Aufruf der Basis-URL, z.B.
http://192.168.1.24:4321/
Aufruf
Die Schnittstelle wird wie folgt aufgerufen:
http://192.168.1.24:4321/JSONPASSWORD/all
Weitere Endpunkte, die das Ergebnis auf einzelne Abschnitte eingrenzen, findet man in der o.g. Kurzbeschreibung. Auch einzelne Werte können abgerufen werden. Beispiele:
http://192.168.1.24:4321/JSONPASSWORD/hk1 http://192.168.1.24:4321/JSONPASSWORD/hk1.L_flowtemp_act
Setzen von Werten
Folgendes Beispiel zeigt, wie man die "Raumtemperatur Heizen" auf 22°C setzt:
http://192.168.1.24:4321/JSONPASSWORD/hk1_temp_heat=220
Beispielergebnis
Der /all Endpunkt bringt beispielsweise folgendes Resultat (Inhalt zum Ausklappen):
{
"system":{
"L_ambient":112,
"L_errors":0,
"L_usb_stick":1,
"L_existing_boiler":0
},
"weather":{
"L_temp":110,
"L_clouds":100,
"L_forecast_temp":90,
"L_forecast_clouds":56,
"L_forecast_today":0,
"L_starttime":900,
"L_endtime":1630,
"L_source":"https://www.openweathermap.org",
"L_location":"Dortmund|Germany|2935517",
"cloud_limit":55,
"hysteresys":-40,
"offtemp":-100,
"lead":120,
"refresh":0,
"oekomode":0
},
"forecast":{
"L_w_0":"Mi, 21 Okt 16:47|11|100|16 km/h|04d|804|C|08:01|18:24",
"L_w_1":"Mi, 21 Okt 17:00|11|100|16 km/h|04d|804|C",
"L_w_2":"Mi, 21 Okt 20:00|10|100|18 km/h|10n|500|C",
"L_w_3":"Mi, 21 Okt 23:00|9|99|20 km/h|04n|804|C",
"L_w_4":"Do, 22 Okt 02:00|6|75|20 km/h|04n|803|C",
"L_w_5":"Do, 22 Okt 05:00|5|2|19 km/h|01n|800|C",
"L_w_6":"Do, 22 Okt 08:00|5|52|20 km/h|04n|803|C",
"L_w_7":"Do, 22 Okt 11:00|8|43|26 km/h|03d|802|C",
"L_w_8":"Do, 22 Okt 14:00|10|99|29 km/h|04d|804|C",
"L_w_9":"Do, 22 Okt 17:00|9|13|19 km/h|10d|500|C",
"L_w_10":"Do, 22 Okt 20:00|8|38|15 km/h|03n|802|C",
"L_w_11":"Do, 22 Okt 23:00|7|37|13 km/h|03n|802|C",
"L_w_12":"Fr, 23 Okt 02:00|7|99|14 km/h|04n|804|C",
"L_w_13":"Fr, 23 Okt 05:00|8|100|18 km/h|04n|804|C",
"L_w_14":"Fr, 23 Okt 08:00|8|100|21 km/h|10n|500|C",
"L_w_15":"Fr, 23 Okt 11:00|8|99|25 km/h|10d|501|C",
"L_w_16":"Fr, 23 Okt 14:00|9|100|25 km/h|10d|500|C",
"L_w_17":"Fr, 23 Okt 17:00|11|94|26 km/h|10d|500|C",
"L_w_18":"Fr, 23 Okt 20:00|9|100|29 km/h|10n|500|C",
"L_w_19":"Fr, 23 Okt 23:00|9|100|34 km/h|10n|501|C",
"L_w_20":"Sa, 24 Okt 02:00|7|100|32 km/h|10n|501|C",
"L_w_21":"Sa, 24 Okt 05:00|6|100|27 km/h|10n|501|C",
"L_w_22":"Sa, 24 Okt 08:00|6|100|25 km/h|10n|500|C",
"L_w_23":"Sa, 24 Okt 11:00|6|84|21 km/h|10d|500|C",
"L_w_24":"Sa, 24 Okt 14:00|9|63|24 km/h|04d|803|C"
},
"hk1":{
"L_roomtemp_act":0,
"L_roomtemp_set":210,
"L_flowtemp_act":368,
"L_flowtemp_set":367,
"L_comfort":0,
"L_state":32,
"L_statetext:"Heizbetrieb aktiv",
"L_pump":1,
"remote_override":0,
"mode_auto":1,
"time_prg":0,
"temp_setback":160,
"temp_heat":210,
"temp_vacation":180,
"name":"Heizung",
"oekomode":0
},
"pu1":{
"L_tpo_act":392,
"L_tpo_set":417,
"L_tpm_act":377,
"L_tpm_set":417,
"L_pump_release":400,
"L_pump":0,
"L_state":320,
"L_statetext:"Quellentemp unterhalb Pumpenfreigabetemp|Anforderung Ein",
"mintemp_off":80,
"mintemp_on":80,
"ext_mintemp_off":80,
"ext_mintemp_on":80
},
"ww1":{
"L_temp_set":300,
"L_ontemp_act":390,
"L_offtemp_act":392,
"L_pump":0,
"L_state":8200,
"L_statetext:"Zeit außerhalb Zeitprogramm|Anforderung Aus",
"time_prg":0,
"sensor_on":0,
"sensor_off":1,
"mode_auto":1,
"mode_dhw":1,
"heat_once":0,
"temp_min_set":350,
"temp_max_set":550,
"name":"Warmwasser",
"smartstart":0,
"use_boiler_heat":0,
"oekomode":0
},
"circ1":{
"L_pump":1,
"L_ret_temp":379,
"L_release_temp":390,
"time_prg":0,
"mode":1,
"pump_release":150,
"return_set":450,
"name":"Zirkulation Badezimmer"
},
"pe1":{
"L_temp_act":397,
"L_temp_set":447,
"L_ext_temp":-32768,
"L_frt_temp_act":5452,
"L_frt_temp_set":5584,
"L_frt_temp_end":5720,
"L_br":0,
"L_ak":0,
"L_not":1,
"L_stb":1,
"L_modulation":100,
"L_runtimeburner":3396,
"L_resttimeburner":8000,
"L_currentairflow":0,
"L_lowpressure":1530,
"L_lowpressure_set":1520,
"L_fluegas":61,
"L_uw_speed":56,
"L_state":16,
"L_statetext:"Leistungsbrand",
"L_type":6,
"L_starts":3759,
"L_runtime":5642,
"L_avg_runtime":90,
"L_uw_release":350,
"L_uw":56,
"L_storage_fill":6000,
"L_storage_min":400,
"L_storage_max":6000,
"L_storage_popper":31,
"storage_fill_today":32765,
"storage_fill_yesterday":32765,
"mode":1
},
"error":{
}
}
InfluxDB
InfluxDB ist eine Open-Source Datenbank speziell für Zeitreihen und wird für das Speichern der ausgelesenen Daten verwendet. Ich nutze InfluxDB v2 aktuell auch zum Berechnen und Visualisieren der Kennzahlen und Statistiken.
Installation
Folgende Pakete sind zu installieren (hier unter openSUSE Tumbleweed Stand Oktober 2026):
a) InfluxDB
zypper in influxdb2 systemctl enable influxdb systemctl start influxdb
Erfolg testen:
systemctl status influxdb
b) InfluxDB Client für Python (Script)
zypper in python313-influxdb-client
Erfolg testen:
python3 -c "import influxdb_client; print('Erfolgreich installiert')"
c) Influx Client für die Kommandozeile
Der CLI Client ist nötig für bestimmte Operationen (Benutzer, Organisation, etc.), die in der Web UI nicht implementiert sind.
Aktuelle Client Download-Links siehe Install and use the influx CLI.
wget https://dl.influxdata.com/influxdb/releases/influxdb2-client-2.8.0-linux-amd64.tar.gz tar zxvf influxdb2-client-2.8.0-linux-amd64.tar.gz cp ./influx /usr/local/bin/
Erfolg testen:
influx version
Erster Benutzer
Nach frischer Installation ist unter http://localhost:8086 bzw. http://<IP>:8086 der erste Benutzer, eine Organisation und ein sog. Bucket anzulegen. Dieser Benutzer hat vollen Zugriff auf das Bucket und die Organisation (und sogar auf die gesamte DB) entsprechend dem erzeugten root-Token, das man sich im Passwortmanager seiner Wahl notieren sollte.
Beispiel:
- Benutzer: admin
- Organisation: Privat
- Bucket: oekofen
Shell
Um auf Kommandozeile den Client influx nutzen zu können, ist einmalig eine Konfiguration zu erstellen:
influx config create --config-name default --host-url http://localhost:8086 --org Privat --token TOKEN --active
Als TOKEN wird der Token verwendet, der beim Anlegen des ersten Benutzers "admin" erstellt wurde (mit den vollen Rechten!).
Die Konfiguration inkl. Token wird in folgender Datei geschrieben:
~/.influxdbv2/configs
Erfolg testen:
influx user list
- Es darf dabei kein Fehler wie Error: failed to list users: 401 Unauthorized: unauthorized access erscheinen.
Benutzer für das Script
- Benutzer "oekofen" für das Script anlegen
influx user create -n oekofen -p PASSWORD -o Privat

- Token für Benutzer "oekofen" erstellen (nur Rechte am Bucket vergeben!) über http://localhost:8086 als Benutzer "admin" angemeldet:
Load Data -> API Tokens GENERATE API TOKEN -> Custom API Token Buckets: oekofen (read/write)
Der erstellte Token wird später im Script hinterlegt.
Organisationen
Falls irgendwann nötig, kann man Organisationen listen, löschen (geht nur über die id) und deren Mitglieder einsehen wie folgt:
influx org list influx org members list influx org delete --id 123456789
Bucket anpassen

Das oben erstellte Bucket kann z.B. auf "2 Jahre" Vorhaltezeit gestellt werden (Default ist unendlich):
Load Data -> Buckets SETTINGS OLDER THAN -> Custom duration -> 2 Jahre (730 days)
Backup
Das folgende Script backup-influxdbv2.sh macht ein Backup der gesamten InfluxDB v2:
#!/bin/bash
#
# Dieses Script dient zum Backup einer InfluxDB v2.
# Der Pfad zum Ort des Backups und der Token müssen angepasst werden. Das Verzeichnis sollte dann in das reguläre Backup aufgenommen werden.
#
# Erstellt von Ralf Krüdewagen
# Das root Token des ersten Benutzers bei Ersteinrichtung
TOKEN=xxxxx==
# influx Client Binary
INFLUX=/usr/local/bin/influx
# Backup Path, wird erzeugt falls noch nicht vorhanden
BACKUP_ROOT_PATH=/data/backup/influxdb
mkdir -p $BACKUP_ROOT_PATH -m 750
# Aktuelles Datum und Uhrzeit für das Backup Dir
DATE=`date '+%Y%m%d_%H%M'`
# InfluxDB Backup Kommando
# -t ist das root Token des ersten Benutzers bei Ersteinrichtung
$INFLUX backup $BACKUP_ROOT_PATH/$DATE -t $TOKEN
Der folgende Cronjob (/etc/crontab) sorgt für regelmäßige Backups jeden Tag um 23:59 Uhr:
59 23 * * * root /root/bin/backup-influxdbv2.sh 1>/var/tmp/backup-influxdbv2.log 2>/var/tmp/backup-influxdbv2.log
Offizielle Doku siehe Back up data und zum influx backup-Kommando.
Datensammlung
Basis "Ökofen Spy"
Das Script oekofen2influxv2.py zum Einlesen der Daten über die JSON-Schnittstelle und Speichern der Daten in einer InfluxDB basiert auf dem Script oekofen2influx.py des Projekts Ökofen-Spy[1], welches ich angepasst habe (s.u.).
Meine Anpassungen
Meine Änderungen an dem Script umfassen:
- Anpassung an InfluxDB v2 (statt v1)
- Behandlung eines Fehlers in der JSON-Antwort der Pellematic (alle Parameter mit "L_statetext"). Hinweis: Dieser Fehler ist nicht in allen Softwareständen von Ökofen enthalten.
- Konvertierung der Parameter "L_lowpressure" um Faktor 0.01 (Umrechnung in EH bzw. Pa)
Einrichten
- Installation
Zur Installation des Rohdaten-Sammelscripts kann man es direkt aus dem Repository auschecken, z.B. so:
git clone https://gitlab.com/formwandler/oekofen-monitoring.git
Dann kopiert man das Script am besten an einen Ort außerhalb des git-Arbeitsverzeichnisses:
cp oekofen-monitoring/bin/oekofen2influxv2.py /usr/local/bin/
- Cronjob
Das Script muss regelmäßig starten (z.B. alle 4 Minuten), daher richtet man am besten einen systemweiten Cronjob ein wie folgt:
*/4 * * * * nobody /usr/bin/python3 /usr/local/bin/oekofen2influxv2.py 1>>/var/tmp/oekofen-spy.log 2>>/var/tmp/oekofen-spy.log
- Erfolg testen
Prüfen der in der InfluxDB gespeicherten Felder über folgendes Flux-Script (Data Explorer) mit "Table" als Visualisierung:
import "influxdata/influxdb/schema" schema.fieldKeys(bucket: "oekofen", predicate: (r) => r._measurement == "oekofen")
Prüfen von Werten, z.B. im Feld "hk1_L_flowtemp_act"
from(bucket: "oekofen") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "oekofen") |> filter(fn: (r) => r["_field"] == "hk1_L_flowtemp_act") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> yield(name: "mean")
Visualisierung und Berechnungen
Berechnungen
Annahmen und Anmerkungen (Quelle: meist Gemini):
- Zeiten
- Merksatz für Flux-Zeitfenster: Tage (1d), Monate (1mo) und Jahre (1y) richten sich mit dem timezone-Modul automatisch am Kalender aus. Nur Wochen (1w) benötigen wegen des Epochen-Donnerstags den Offset offset: -3d, um auf Montag zu springen.
- Pelletverbrauch
- Für die Berechnung des Pelletverbrauchs wird zugrunde gelegt, dass Pellets einen Heizwert von 4,9 kWh/kg haben. Daraus ergibt sich bei einer Nenn-Kesselleistung von 12 kWh ein Pelletverbrauch von 12 kW / 4,9 kWh/kg = 2,45 kg pro Stunde bei 100% Kesselleistung (Modulation).
- Der Schwellenwert für die Modulation des Kessels > 10.0 dient als Filter gegen Falschverbrauch, damit wirklich nur dann Pellets berechnet werden, wenn der Brenner im echten Leistungsbrand steht (und nicht im Nachlauf o.ä.).
- Temperaturen:
- Brennwerteffekt nur bei Vorlauf unter 55°C. Da für den Rücklauf kein Sensor verfügbar ist, wird die Rücklauftemperatur geschätzt wie folgt:
Rücklauftemperatur = Vorlauftemperatur - 10°C
Flux Scripte
In InfluxDB v2 wird die Scriptsprache Flux[1] verwendet, um Berechnungen vorzunehmen und Daten für die Visualisierung vorzubereiten. Die umfangreichen Rechenvorschriften für jeden Graph sind im Code des jeweiligen Dashboards (s.u.) hinterlegt.
Folgende Tabelle erläutert einige Besonderheiten bei den Flux-Scripten:
| Kennzahl | Aggregation / Intervall | Flux-Besonderheit | Visualisierung |
| Verbrauch | Tag / Woche / Monat / Jahr | offset: -3d bei 1w (Mo–So) | Graph (Stepped) / Table / Single Stat |
| Brennerlaufzeit | Stunden pro Tag / Woche / Monat | _value * (4.0 / 60.0) | Graph (Stepped) / Single Stat |
| Brennerstarts | Gesamt & Avg pro Tag | difference() + count() / mean() | Single Stat |
| Starts pro Tag | Täglicher Verlauf | difference() + aggregateWindow(1d) | Graph (Interpolation: Stepped) |
| Laufzeit pro Start | Tägliche Durchschnittsdauer | Typ-Konvertierung float() vor join() | Graph (Stepped) |
In den Scripten sind einige feste Werte enthalten, die je nach Setup angepasst werden müssen:
- Für Zeitberechnungen wird der Faktor "4.0" verwendet, da die Rohdaten alle 4 min eingesammelt werden (und damit für 4 min "gültig" sind). Sollte der Cronjob zum Sammeln der Rohdaten ein anderes Intervall vorsehen, dann muss der Faktor angepasst werden.
- In Berechnungen zum Pelletverbrauch ist die Nennleistung des Kessels/Brenners von "12.0" fest eingestellt. Hier muss bei abweichender Nennleistung angepasst werden.
Dashboards
Folgende Screenshots zeigen die Kennzahlen und Graphen der Lösung:
-
Teil 1
-
Teil 2
-
Teil 3
-
Teil 4
-
Teil 5
-
Teil 6
-
Teil 7
Die folgende Tabelle zeigt, welche Kennzahlen und Graphen in verschiedenen Dashboards zu sehen sind:
| Kennzahlen | Einheit | Graph-Typ | Datenfelder | Bemerkung |
|---|---|---|---|---|
| Außentemperatur aktuell | °C | Gauge | system_L_ambient | |
| Vorlauftemperatur aktuell | °C | Gauge | hk1_L_flowtemp_act | |
| Warmwassertemperatur aktuell | °C | Gauge | ww1_L_ontemp_act | |
| Kesseltemperatur aktuell | °C | Gauge | pe1_L_temp_act | |
| Leistung Brenner aktuell | % | Gauge | pe1_L_modulation | Kann werte zwischen 0 und 100 annehmen (moduliert) |
| Brennerstarts pro Tag im Zeitfenster (Durchschnitt) | [1] | Gauge | pe1_L_modulation | Zählt und mittelt Starts, sobald pe1_L_modulation > 0.
Zu viele Starts am Tag sind auffällig. |
| Brennerstarts pro Tag | [1] | Graph (step) | pe1_L_modulation | Zählt Starts, sobald pe1_L_modulation > 0.
Zu viele Starts am Tag sind auffällig. |
| Brennerstarts im Zeitfenster | [1] | Single Stat | pe1_L_modulation | Zählt Starts, sobald pe1_L_modulation > 0. |
| Durchschnittliche Laufzeit des Brenners pro Start in der Zeit [min] | min | Gauge | pe1_L_modulation | Zählt Laufzeit, sobald pe1_L_modulation > 0.
Laufzeit sollte möglichst >60 min sein. |
| Durchschnittliche Laufzeit des Brenners pro Start und Tag [min] | min | Graph (step) | pe1_L_modulation | Zählt Laufzeit, sobald pe1_L_modulation > 0.
Laufzeit sollte möglichst >60 min sein. |
| Mittlere Unterdruck-Abweichung im Leistungsbrand im Zeitfenster [%] | % | Gauge | pe1_L_lowpressure
pe1_L_lowpressure_set pe1_L_modulation |
Diese Kennzahl berechnet die prozentuale Abweichung des gemessenen Unterdrucks vom Sollwert während der aktiven Modulation (pe1_L_modulation > 10.0). Bei großen Abweichungen ist eine Wartung zu empfehlen, bevor die Heizung ausfällt. |
| Solltemperatur Brenner aktuell (Brenner an bei >8°C) | °C | Single Stat | pe1_L_temp_set | Eine alternative Anzeige für "Brenner an" (wenn Soll >8°C) |
| Laufzeit pro Tag | h | Graph + Single Stat | pe1_L_modulation | Zählt Laufzeit, sobald pe1_L_modulation > 0. |
| Laufzeit pro Woche | h | Graph + Single Stat | pe1_L_modulation | Zählt Laufzeit, sobald pe1_L_modulation > 0. |
| Laufzeit pro Monat | h | Graph + Single Stat | pe1_L_modulation | Zählt Laufzeit, sobald pe1_L_modulation > 0. |
| Laufzeit im Zeitfenster | h | Single Stat | pe1_L_modulation | Zählt Laufzeit, sobald pe1_L_modulation > 0. |
| Pellets Tagesverbrauch - Heute [kg] | kg | Gauge | pe1_L_modulation | Diese Kennzahl berechnet den Pelletverbrauch während der aktiven Modulation (pe1_L_modulation > 10.0) anhand Nennleistung, Pellet-Heizwert und Zeit. |
| Pellets Tagesverbrauch [kg] | kg | Graph + Single Stat | pe1_L_modulation | s.o. |
| Pellets Wochenverbrauch [kg] | kg | Graph + Single Stat | pe1_L_modulation | s.o. |
| Pellets Monatsverbrauch [kg] | kg | Graph + Single Stat | pe1_L_modulation | s.o. |
| Pellets Jahresverbrauch - dieses Jahr [kg] | kg | Gauge | pe1_L_modulation | s.o. |
| Pellets Gesamtverbrauch [kg] | kg | Single Stat | pe1_L_modulation | s.o. |
| Brennwert-Anteil im Zeitfenster [%] | % | Gauge | k1_L_flowtemp_act
pe1_L_modulation |
Annahme: Wenn die Vorlauftemperatur < 55°C ist, wird eine Rücklauftemperatur < 45°C angenommen. Für diese Zeiten läuft der Brenner im Brennwert-Modus. |
| Kesselleistung Modulation | % | Graph | pe1_L_modulation | Zeigt an, wann der Kessel brennt und mit welcher Leistung von 0-100%. |
| Temperatur Kessel Ist/Soll | °C | Graph | pe1_L_temp_act
pe1_L_temp_set |
|
| Temperatur Feuerraum | °C | Graph | pe1_L_frt_temp_act | |
| Vorlauftemperatur Ist / Soll | °C | Graph | hk1_L_flowtemp_act
hk1_L_flowtemp_set |
|
| Nutzbare Ausbrandzeit [Stunden/Tag] | h | Graph (step) | pe1_L_frt_temp_act
pe1_L_modulation |
Zeigt an, wie durchschnittlich lang eine Ausbrand-Restwärme anhält. |
| Umwälzpumpe Modulation Heizkreis | % | Graph | pe1_L_uw_speed | Zeigt an, wann und wie stark die Umwälzpumpe läuft von 0-100%. Sollte mit der Brenner-Modulation korrelieren. |
| Unterdruck Ist/Soll | Pa | Graph | pe1_L_lowpressure
pe1_L_lowpressure_set |
Der Istwert sollte im Brandfall fast identisch dem Sollwert sein. Bei großen Abweichungen ist eine Wartung zu empfehlen, bevor die Heizung ausfällt. |
| Temperatur Außen/Wetter/Soll | °C | Graph | system_L_ambient
weather_L_temp hk1_temp_heat |
Zeigt Temperatur vom Außenfühler und von der Wettervorhersage an. Differenz sollte klein sein. Die Heizungssolltemperatur wird eingestellt und bestimmt mit der Kennlinie zusammen das Temperaturverhalten. |
| Tägliche Durchschnitts-Außentemperatur | °C | Graph (step) | system_L_ambient | Mittelwert pro Tag |
| Temperatur Pufferspeicher Oben/Unten Ist/Soll | °C | Graph | pu1_L_tpo_act
pu1_L_tpo_set pu1_L_tpm_act pu1_L_tpm_set |
|
| Thermische Spreizung / Ladezustand im Puffer (ΔT in °C) | °C | Graph | pu1_L_tpo_act
pu1_L_tpm_act |
Diese Kennzahl berechnet die Differenz zwischen Puffer-Oben und Puffer-Mitte (Ist). Eine hohe Spreizung (>15-20K) signalisiert eine hervorragende Schichtung (oben heißes Nutzwasser, unten/mitte abgekühltes Rücklaufwasser). Bei zu kleiner Differenz wird i.d.R. der Brenner starten. |
| Warmwasser Temperatur Ist/Soll | °C | Graph | ww1_L_ontemp_act
ww1_L_offtemp_act ww1_L_temp_set |
Diese Abfrage stellt die reale Warmwassertemperatur der Solltemperatur bzw. Einschalt-Schwelle gegenüber. Die Solltemperatur ist i.d.R. zeitgesteuert. |
| Zirkulationsdauer Warmwasser [Stunden/Tag] | h | Graph (step) | circ1_L_pump | Zeigt die mittlere Laufzeit der Zirkulationspumpe für Warmwasser an. Diese wird i.d.R. zeitgesteuert eingeschaltet. Je kleiner die Dauer, desto weniger Energie wird verschwendet für "dumm" zirkulierendes Warmwasser. |
| Zirkulation Warmwasser Status | [1] | Graph (step) | circ1_L_pump | Zeigt an, wann die Zirkulationspumpe für Warmwasser lief. Diese wird i.d.R. zeitgesteuert eingeschaltet. |
Im Sourcecode der Dashboard-Exporte finden sich die genauen Berechnungen, Kommentare und Schwellwerte für Farben vor allem bei Gauge-Anzeigen.
Monitoring zur Alarmierung
Konzept
Um bei wichtigen Änderungen oder bei Fehlern der Heizanlage zuverlässig alarmiert zu werden, werden einige Basis-Monitore mit dem Tool Uptime Kuma implementiert. Dazu sind Web-Checks eingerichtet, die bei negativem Resultat Benachrichtigungen über die die eingerichteten Kanäle verschickt (z.B. über E-Mail, Nextcloud Talk, Matrix, etc.).
Checks in Uptime Kuma
Die folgende Tabelle zeigt die eingerichteten HTTP-Checks:
| Name | Check-Art | URL-Endpoint | Suche nach Antwort / Schlüsselwort | Bemerkung |
|---|---|---|---|---|
| Ökofen No Errors | HTTP JSON-Abfrage | /system | system.L_errors == 1 | Prüft, ob es aktuell Fehlermeldungen gibt.
Hinweis: Im errors {} Objekt kann man dann die Fehlermeldung sehen. |
| Ökofen Heizbetrieb Auto | HTTP JSON-Abfrage | /hk1.mode_auto | mode_auto == 1 | Prüft ob Heizbetrieb auf "Auto" steht. |
| Ökofen Warmwasser Auto | HTTP JSON-Abfrage | /ww1.mode_auto | mode_auto == 1 | Prüft ob Warmwasser auf "Auto" steht. |
| Ökofen Pellematic Auto | HTTP JSON-Abfrage | /pe1.mode | mode == 1 | Prüft ob der Brenner auf "Auto" steht. |
| Ökofen Heizbetrieb aktiv | HTTP - Schlüsselwort | /hk1 | "betrieb aktiv" | Prüft ob der Heizbetrieb oder Absenkbetrieb aktiv ist (umzustellen bei Sommermodus). |

Offen / ToDo
- Installation der InfluxDB in einem Docker Container statt auf dem Host
- Eigene Domain mit TLS Zertifikat und Reverse Proxy für die FluxDB Web UI
- Einrichten von Logrotating für das Sammel-Script
Softwareprojekt
Den Code für die Scripts und InfluxDB-Visualisierungen inkl. Berechnungen findet man unter
https://gitlab.com/formwandler/oekofen-monitoring
Disclaimer
Anwender sollten das Vorgehen verstehen und mit Sorgfalt implementieren, vor allem da die undokumentierte JSON-Schnittstelle von Ökofen auch das Setzen von Parametern erlaubt (ohne eine dem Stand der Technik entsprechende Authentifizierung und Autorisierung).
Einen Großteil der Visualisierungen in InfluxDB habe ich mit dem KI-Sparringspartner Google Gemini Modell "Flash 3.6" erstellt.Einzelnachweise
- ↑ Das Original-Script steht unter der MIT License, Copyright (c) 2021 Peter Fuerle. Siehe auch Code auf GitLab
Weblinks
- https://nc-x.com/oekofen-spy
- https://gitlab.com/p3605/oekofen-spy
- https://nc-x.com/oekofen-vorbereitung-techniker-einsatz
- https://github.com/FUEL4EP/oekoFEN_Spy_for_oekoFEN_Smart_XS_pellets_heating
- https://forum.iobroker.net/topic/47939/nodered-%C3%B6kofen-pelletronic-touch-json
- https://forum.iobroker.net/topic/817/%C3%B6kofen-pelletronic-touch-auslesen/25?_=1792340195257