1. Einleitung
Ziel ist es über die Leistungsaufnahme:
im ersten Teil
- Heizung schaltbar machen (Urlaub aus?)
- die Betriebsstunden
- den Öl-Verbrauch jährlich
- den Öl-Verbrauch monatlich
- den Öl-Verbrauch tagesaktuell
- getrennt nach Gesamtverbrauch und Warmwasserbereitung
- Den aktuellen Füllstand im Tank in cm
- Den aktuelle Fehlmenge im Tank in Litern
im 2. Teil
- mittels Prognose Datum z.B. 15.02.2026 (in d. Zukunft)
- einen Prognose Füllstand
- eine Prognose Liefermenge
darzustellen
leicht mögliche Features (in Eigenregie):
- ggf. Brennerstarts zählen
- Rest Öl-Menge in Liter (interessant? in cm bereits o.a.)
- prozentuale Aufteilung d. Verbrauchs nach Heizbedarf und Warmwasserbereitung
Emofehlung:
Meine eigenartigen Bennenungen
sollten für die Anfangsphase erstmal 1:1 übernommen werden (ggf. inkl. Rechtschreibfehler), da ich mich auch im Teil 2 auf die Bezeichungen (insbesondere im Jinja2-Abschnitt) beziehe. Wenn es mal funktioniert, könnt ihr die Bennenungen immer noch nach euren Wünschen anpassen. Ggf. verleiert ihr dann etwas an Statistiken, die man aber gerade am Anfang nicht sehr vermissen wird.
1.1 Funktionsweise
Die Leistungsaufnahme wird bestimmten Funktionsabschnitten der Heizung (Brennerstart, Warmwasserbereitung o. Aufheizen zur Heizkörpererwärmung, Brennerabschaltung) zugeordnet und deren Zeitdauer gemessen.
Dies sollte grundsätzlich mit allen Ölheizzungen in ähnlicher Weise machbar sein.
Teile könnten auch für andere Heizungen (Gas o. möglw. Wärmepumpen) interessant sein, wenn man die Leistungsaufnahme bestimmten Abläufen zuordnen kann. Alle o.a. Werte lassen sich messen o. errechnen und darstellen und die Heizung ggf. auch für eine Zeit abschalten (prüfe Pufferung der Einstellwerte bzw. Einschaltzustand ect.).
1.2 Situation
In meinem Fall eine Viessmann Trimatik 7450 285-B von 1996 (Microprozessor-Steuerung). Da ich bereits 2011 einen Rechner, Digitalmultimeter, Platine zur Messstellenumschaltung zur Aufnahme von ATS, KTS, STS (Außen., Kessel-, Speicher-Temperatursensor) und des Brennerzustands installiert habe, waren mir die Abläufe und Sonderfunktionen (z.B. Taktung in der Nacht oder Festsetzen der Pumpen durch Schaltphasen verhindern) der Heizung bestens bekannt.
Dabei ist der falsche/ungeschickte Aufbau (ATS wird auf d. Westseite im Herbst angeleuchtet => Nordseite + Brummspannung bringt d. Messung d. ATS durcheinander => Abschirmung) aufgefallen.
Wird der Öltank auf gefüllt, so sollte der Tankwart die Heizung für ca. 1h ausschalten. Die Pufferung der Einstellwerte erfolgt über einen Langzeitbatterie (LS14500) durch die Heizung selbst.
1.3 Das Bauteil
Die Leistungsaufnahme der Heizung kann über einen Tuya Einbau-Energiemesser (1-phasig) bestimmt werden.
Ich habe eine WIFI-Unterputz-Version eingesetzt, finde aber z.Z. (Weder in Ebay, noch bei Temu) nicht exakt die gleiche Version. Deshalb nur ein Bild meiner Bauart - Achtung - es gibt viele ähnliche, aber doch unterschiedliche Einbauschalter. Vielleicht stellen Shellys (Shelly PM Mini Gen. 3 ???) eine gute Alternative für die Leistungsmessung dar?
Essenziell ist die Energiemonitor-Funktion (Leistungsmessung), da es die gleiche Bauform auch nur als Schalter gibt.
Den Leistungsmesser habe ich unmittelbar “elektrisch vor” dem Heizung-Notschalter (Schaltzustand am Notschalter sichtbar), “mechanisch hinter” dem Schalter in der Dose installiert. Dies sollte natürlich nur vom Fachmann, bei abgeschaltetem Strom, vorgenommen werden.
Nach dem Hinzufügen des Energiemesser in Smarlife (o. Tuya-App) und HA lässt sich die Leistung grafisch über der Zeit darstellen.
grün = Anlauf Brenner bei kalter Nacht, rot = Ende der Warmwasser-Erwärmung (Ladepumpe)
1.4 Leistungszuordnung zu o.a. Diagramm:
- 35 Watt Hzg-Pumpe (alte Pumpe, Austausch gegen magnetit-resistente Wilo HEP geplant)
- --------------> 47 Watt Schaltschwelle (+/-12W Schutzabstand)
- 59 Watt WW-Ladepumpe
- --------------> 71 Watt Schaltschwelle (+/-12W Schutzabstand)
- 83 Watt Brenner an
Dazu habe ich zunächst 3 Zähler angelegt:
- V14_Öl_seit_Ein_10s_Takt *) (messen der Brennerlaufzeitdauer)
- V14_Öl_Verbrauch_WW_10s_Takt *) (aufaddieren seit … für Warmwasser)
- V14_Öl_Verbrauch_Ges_10s_Takt *) (aufaddieren seit … für gesamten Verbrauch)
*) habe ich dem Bereich “SoftCrtl” und nicht der “Heizung” zugeordnet.
1.5 Automatisierung erstellen:
A14_Erkennung_Brenner_eon
Über die Leistungsaufnahme wird das Einschalten des Brenners erkannt und der Zähler
- V14_Öl_seit_Ein_10s_Takt
gestartet und alle 10s um 1 erhöht.
Wird am Nachlauf der WW-Ladepumpe die Trinkwassererwärmung erkannt, dann wird aufaddiert:
V14_Öl_Verbrauch_WW_10s_Takt = V14_Öl_Verbrauch_WW_10s_Takt + V14_Öl_seit_Ein_10s_Takt
V14_Öl_Verbrauch_Ges_10s_Takt = V14_Öl_Verbrauch_Ges_10s_Takt + V14_Öl_seit_Ein_10s_Takt
anderenfalls (WW-Ladepumpe läuft nicht) nur
V14_Öl_Verbrauch_Ges_10s_Takt = V14_Öl_Verbrauch_Ges_10s_Takt + V14_Öl_seit_Ein_10s_Takt
und dann in beiden Fällen den Zähler zurücksetzen
V14_Öl_seit_Ein_10s_Takt = 0
YAML-Darstellung
alias: A14_Erkennung_Brenner_eon
description: ""
triggers:
- trigger: time_pattern
seconds: /10
conditions: []
actions:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.wbp_1g_leistung
below: 71
sequence:
- if:
- condition: numeric_state
entity_id: counter.v14_ol_seit_ein_10s_takt
above: 0
then:
- action: counter.set_value
metadata: {}
data:
value: >-
{{
(float(states('counter.v14_ol_verbrauch_ges_10s_takt'))+float(states('counter.v14_ol_seit_ein_10s_takt')))
| int }}
target:
entity_id: counter.v14_ol_verbrauch_ges_10s_takt
- if:
- condition: numeric_state
entity_id: sensor.wbp_1g_leistung
above: 47
then:
- action: counter.set_value
metadata: {}
data:
value: >-
{{
(float(states('counter.v14_ol_verbrauch_ww_10s_takt'))+float(states('counter.v14_ol_seit_ein_10s_takt')))
| int }}
target:
entity_id: counter.v14_ol_verbrauch_ww_10s_takt
- action: counter.reset
metadata: {}
data: {}
enabled: true
target:
entity_id: counter.v14_ol_seit_ein_10s_takt
- conditions:
- condition: numeric_state
entity_id: sensor.wbp_1g_leistung
above: 85
sequence:
- action: counter.increment
metadata: {}
data: {}
target:
entity_id:
- counter.v14_ol_seit_ein_10s_takt
mode: single
Das dürfte dann so aussehen:
2.1 Helfer: Zahlenwert-Eingabe
Zur Umrechnung werden 2 Werte Tank: (“1cm in Liter” und Verbrauch: “Liter/h”) gebraucht.
Wieviel Liter im Tank erzeugen eine Änderung des Füllstands von 1cm?
Angaben am Tank 4800 Liter bei 150cm Höhe = 32 Liter/cm. Tatsächlich liegt der Wert bei mir darunter. Inklusive Bauchbildung, liegt der im Mittel bei 31.5 Liter / cm
Wieviel Liter Öl verbraucht die Heizung pro Stunde?
Als Abschätzung kann die Düse herangezogen werden. Eine “0.50”-er Düse verbraucht etwa 0.5 USgal/h bei 7 bar = 0.5 USgal/h * 3.785 = ca. 1,89 Liter/h
Bei mir hat sich der Wert über Jahre bei 1.67 Liter/h eingependelt.
Tipp: Vor der Tankbefüllung die Höhe mit einem Zollstock/Meterstab und nach der Befüllung, wenn die Temperatur einigermaßen angeglichen ist (Wärmeausdehnung!), auf den Millimeter genau messen und notieren.
Nun 2 Helfer “Zahlenwert-Eingabe” anlegen
V14_Tank cm_in_Liter *) mit 0.1 Schritten, Bereich = Heizung, Wert = 31.5
V14_Ölverbr. Liter / h *) mit 0.01 Schritten, Bereich = Heizung, Wert = 1.67
*) habe ich dem Bereich “SoftCrtl” und nicht der “Heizung” zugeordnet.
2.2 Helfer: Template-Sensoren
Ich habe die folgenden Template-Sensoren angelegt:
Der Divisor von 360 resultiert aus
60s*60Minuten/10s-Takt
und muss bei ggf. anderer Taktrate angepaßt werde.
V14_Betriebstunden_Ges
{{ (float(states(‘counter.v14_ol_verbrauch_ges_10s_takt’))/360) | round(1) }}
V14_Betriebstunden_WW
{{ (float(states(‘counter.v14_ol_verbrauch_ww_10s_takt’))/360) | round(1) }}
V14_Öl_Verbrauch_in_Liter *)
{{ (float(states(‘counter.v14_ol_verbrauch_ges_10s_takt’))/360 * float(states(‘input_number.v14_olverbr_liter_h’))) | round(2) }}
V14_Öl_Verbrauch_WW_in_Liter *)
{{ (float(states(‘counter.v14_ol_verbrauch_ww_10s_takt’))/360 * float(states(‘input_number.v14_olverbr_liter_h’))) | round(2) }}
V14_Öl Füllstand aktuell (123.16cm ermittelter Füllstand am 13.12.2025, 4 Tage Party-Modus)
{% set b = 360* float(states(‘input_number.v14_tank_cm_in_liter’)) / float(states(‘input_number.v14_olverbr_liter_h’)) %}
{{ (123.16-float(states(‘counter.v14_ol_verbrauch_ges_10s_takt’))/b) | round(1) }}
V14_Öl_Fehlmenge aktuell (145cm reguläre Füllhöhe bei Tank voll)
{{ ((145-float(states(‘sensor.v14_ol_fullstand_aktuell’)))*float(states(‘input_number.v14_tank_cm_in_liter’))) | round(0) }}
*) habe ich dem Bereich “SoftCrtl” und nicht der “Heizung” zugeordnet.
2.2 Helfer: Verbrauchssensoren
V14_Öl /Jahr Gesamt Eingangssensor: V14_Öl_Verbrauch_in_Liter
V14_Öl /Monat Gesamt Eingangssensor: V14_Öl_Verbrauch_in_Liter
V14_Öl /Tag Gesamt Eingangssensor: V14_Öl_Verbrauch_in_Liter
V14_Öl /Jahr WW Eingangssensor: V14_Öl_Verbrauch_WW_in_Liter
V14_Öl /Tag WW Eingangssensor: V14_Öl_Verbrauch_WW_in_Liter
V14_Öl /Monat WW Eingangssensor: V14_Öl_Verbrauch_WW_in_Liter
Weiter geht es im “Teil 2” mit der Prognose (Öl-Bestellung zu einem bestimmten Datum).
R. Hsm




