Heizölstand in Home Assistant

Hallo Zusammen,

ich möchte gern den Heizölstand in Home Assistant bekommen.
wie setze ich das am besten um?
Gibt ja zahlreiche Sensoren am Markt. Oilfox habe ich hier schon öfter gelesen, der scheint ja gut integrierbar zu sein.

Gibt es hier weitere Hinweise, was zu beachten ist/ Empfehlungen?

Da ich hier erstmal offen bin, ist mir eine problemlose Einbindung in HA mal oberste Prio (neben dem Preis der natürlich auch nicht extrem hoch sein sollte ;)).

Danke schon einmal!

Mit einem TL-136 und dieser Schaltung!

Bei mir im Einsatz aber mit Wasser

Puh sieht spannend aus, ich war jetzt aber eher bei einer Schlüsselfertigen Lösung - zumal ich das aufgrund nicht richtiger Funktionalität der analog Uhr aktuell recht zügig brauche

Ich habe das mit einem Shelly PM am Brenner realisiert. Der Brenner hat einen definierten Verbrauch an Heizöl pro Stunde Laufzeit, abhängig von der verwendeten Einspritzdüse, die ich kenne. Mit der Laufzeit des Brenners, die ich über ein Template mit dem Verbrauch der Düse berechne, kenne ich den Verbrauch pro Tag. Mit Start der Messung bei einem vollen Tank habe ich so einen relativ genauen Wert für den Füllstand im Tank. Die Kosten für diese Lösung sind der Preis für den Shelly PM und ein wenig Zeit für den Yaml Code des Template, den ich gerne auf Anfrage zur Verfügung stellen würde.

Auch das ist wirklich eine coole Idee - echt, darauf muss man erstmal kommen!

Aber mir ist es sprichwörtlich zu heiß an der Heizung direkt rumzubasteln. Würde da schon den Sensor im Tank favorisieren.

Habe mich jetzt auch noch ein wenig informiert, der Oilfox scheint da genau richtig zu sein.

Servus Jugi57,
die Idee finde ich gut.
Welche Erfahrungen hast Du bzgl. Genauigkeit? Also wenn Du über den Strom indirekt die Brenner-An-Zeit erfasst, wie genau lässt sich da der Verbrauch zurückrechnen? Wie bist Du an den genauen Verbrauch der Einspritzdüse rangekommen?

Da die meisten Brenner eine Ölvorwärmung haben, muss man den Strom, bei dem der Zähler läuft, recht genau einstellen. Aber das sollte bei den meisten Brennern machbar sein.
Solange das Gebläse bzw. die Ölpumpe läuft, wird auch Öl verbraucht.

Der Durchfluss steht auf der Düse (in gph, also gallons per hour), gilt aber nur für einen bestimmten Öldruck. Wenn der nicht genau eingestellt ist, weicht der tatsächliche Verbrauch von dem, was auf der Düse steht, ab.

Ich halte es für weniger gefährlich, einen Shelly in die Zuleitung zum Brenner zu klemmen, als am Öltank herumzufummeln.
Zwar wird da nichts anfangen, zu brennen, aber wenn der Tank oder die Leitungen beschädigt werden und Öl ausläuft, kann das je nach Ölmenge und ausmaß verdammt teuer werden.

Ich habe meine Füllstandmessung am Tank mit einem vorhandenen Füllstandanzeiger mit Schwimmer, einem AS5600 Magnetwinkelgeber, einem ESP8266, ein paar 3D-gedruckten Teilen und ESPHome realisiert.
Den Magneten habe ich auf die Mitte der Anzeigenadel geklebt und den AS5600 mit einer gedruckten Halterung auf die Anzeige geklemmt.
Die Übermittlung des Füllstandes erfolgt einmal pro Stunde.
Täglich würde auch reichen, aber so bekomme ich bei Verbindungsproblemen, Stromausfall oder anderen Unwägbarkeiten spätestens nach einer Stunde einen neuen Wert.

1 „Gefällt mir“

Die Genauigkeit habe ich über mehrere Monate und Anpassung des Verbrauchswerts pro Stunde Laufzeit auf etwa 1% pro Jahr einstellen können. Bei einem Verbrauch von 2.500 Litern weicht das Ergebnis am Ende eines Jahres um maximal 20-30 Liter ab. Das reicht mir für eine Verbrauchsanalyse und die Information zum voraussichtlichen Bedarf bei der Neubestellung von Öl völlig aus. Aktuell sehe ich z.B., dass meine Heizung zur Erwärmung des Brauchwassers pro Tag etwa 0,7l Öl verbraucht.
Den Düsenwert habe ich in der Dokumentation meines Brenners gefunden.

ja, das klingt definitiv ausreichend genau. Danke für die Informationen!!

Hey Jugi57,

könntest du mir den Code zur Verfügung stellen?
Ich scheitere gerade dran den Verbrauch berechnen zu können.

Hallo Maik, hier mein derzeit verwendeter YAML Code für die Erkennung und Berechnung der Brennerlaufzeit:

################################################################################
# HEIZUNG Neue Yaml 01.01.2025 - korrigiert am 09.02.2025 um 19:52 Uhr##########
################################################################################

# Sensor Brenner einschalten für weitere Berechnungen
  - platform: template
    sensors:
      brenner_status:
        unique_id: brenner_status
        friendly_name: Brenner Status
        value_template: >-
            {% if float(states("sensor.shellyheizung_power"), 0) == 0 %}
              AUS
            {% elif float(states("sensor.shellyheizung_power"), 0) <= 50 %}
              Pumpenbetrieb
            {% elif float(states("sensor.shellyheizung_power"),0) >= 100 %}
              AN
            {% else %}
              Pumpenbetrieb
            {% endif %}
# Berechnung der Anzahl Brennersstarts #########################################
  - platform: history_stats
    name: brennerstarts
    entity_id: sensor.brenner_status
    state: AN
    type: count
    start: "{{ now().replace(hour=0, minute=0, second=0) }}"
    end: '{{ now() }}'               

# Berechnung der Brennerlaufzeit ###############################################
# wenn Brenner "aktiv" dann ist eine Berechnung der Öldurchflussmenge möglich ##
################################################################################
  - platform: template
    sensors:
      brenneraktiv:
        unique_id: brenneraktiv
        friendly_name: Brenneraktiv
        value_template: "{{ states('sensor.brenner_status') }}"
        
# Brennerstarts pro Tag ########################################################
  - platform: history_stats
    name: brennerstarts
    unique_id: brennerstarts
    entity_id: sensor.brenner_status
    state: AN
    type: count
    start: "{{ now().replace(hour=0, minute=0, second=0) }}"
    end: "{{ now() }}"

# Brennerlaufzeit pro Tag ######################################################
  - platform: history_stats
    name: brennerlaufzeit_tag
    unique_id: brennerlaufzeit_tag
    entity_id: sensor.brenner_status
    state: AN
    type: time
    start: "{{ now().replace(hour=0, minute=0, second=0) }}"
    end: "{{ now() }}"

Um damit den Ölverbrauch zu berechnen, füge folgende Template Sensoren ein:

# Monatsverbrauch ##############################################################
  - platform: template
    sensors:
      oelmonatsverbrauch:
        unique_id: oelmonatsverbrauch
        friendly_name: Ölmonatsverbrauch
        unit_of_measurement: "l"
        value_template: >-
          {{ (130) + states('sensor.brennerlaufzeiterfassung_monat') | float(0) | round (0) + (0) }}

# Tagesverbrauch ##############################################################   
  - platform: template
    sensors:
      oeltagesverbrauch:
        unique_id: oeltagesverbrauch
        friendly_name: Ölverbrauch
        unit_of_measurement: l
        value_template: "{{ (float(states('sensor.brennerlaufzeiterfassung'), 0)*1.85) | round (2) }}"

In diesen Templates sind die sensoren “brennerlaufzeiterfassung” und “brennerlaufzeiterfassung_monat” drin, die ich über die Helferfunktion und dort mit einem Verbrauchshelfer erstellt habe, der sich jeweils nach der damit verbundenen Zeit zurücksetzt. Der stellt mir den für die Verbrauchsberechnung erforderlichen Zeitwerte zur Verfügung die ich mit dem Paramter der Durchflussmenge an Öl in Liter Verbrauch umrechne. Klingt kompliziert, ist aber in dieser Form nötig, da Template Sensoren über eine YAML beim Neustart fast immer falsche Werte liefern und mir die ganze Berechnung zerschießt.
Am besten ist es, wenn Du meinen Code unter “Entwicklerwerkzeuge” und “Template” ins Feld “Template-Editor” reinkopierst und deine Sensoren einträgst. Dann kannst Du ohne Neustarts gleich sehen, welche Werte rauskommen. Die Helfer musst Du natürlich vorher erstellen, die brauchst Du in der Simulation. Melde Dich, wenn Du weitere Fragen hast. Falls nötig, kannst Du mir Deine bisher erstellen YAML´s mal schicken und ich schau mal drüber.

Hallo, könntest Du mir noch bitte sagen wie das mit dem Jahresverbrauch geht ?Tagesverbrauch und Monat funktioniert mit meinen Werten und Deinen angegebenen Templates

Erstelle dir über “Einstellungen” - “Geräte und Dienste” - “Helfer” einen Verbrauchszählerhelfer gemäß nachstehendem Beispiel - für den Entitätsnamen “Demo” musst du “Oeljahresverbrauch” einsetzen.


Der Eingangssensor ist der Sensor für den “Oeltagesverbrauch”.

Danke für die vielen Updates. Dann werde ich es wohl auch über die Brennerlaufzeit versuchen… Muss mir das alles nochmal in Ruhe anschauen

Danke für Deine Unterstützung

Was mir immer wieder sehr geholfen hat, ist die Template Simulation unter den Entwicklerwerkzeugen. Da kann man die Template Ergebnisse gut testen, ohne dass man sich die Sensorergebnisse zerschießt.