Berechnung Füllstand Heizöltank
-
- Beiträge: 74
- Registriert: 19. Jan 2020 10:39
Berechnung Füllstand Heizöltank
Guten morgen ihr lieben,
zur Berechnung der Füllmenge in meinem Heizöltank benötige ich bitte etwas Hilfe bei der Umsetzung.
Zum Setting:
Ich nutze eine NodeMCU mit Tasmota 8.2 (sensors). Verbunden ist die NodeMCU mit einem Ultraschallsensor HC-SR04.
Diese Kombination läuft tadellos. Verbaut ist beides einfach in einer Abzweigdose. Unten 2 Löcher für den Sensor reingebohrt. Gleiche Löcher einfach in den Öltank gebohrt, Abzweigdose eingesetzt und zur Sicherheit alles nochmal mit Silikon abgedichtet. Funktioniert prima.
Die Daten werden via MQTT an mein Openhab gesendet und ich stelle diese dann auf der Sitemap dar.
Wie gesagt, das funktioniert auch soweit ganz Prima. Ich sehe also den Abstand in CM vom Sensor bis zur Oberfläche vom Öl.
Diese Darstellung ist natürlich nicht sonderlich schön und mir kam die Idee entweder die verbleibenden Liter zu berechnen, ODER einfach die % die sich noch im Tank befinden.
Von folgenden Daten können wir ausgehen:
Fassungsvermögen Öltank: 10000 Liter
Abstand Sensor zu Öloberfläche wenn der Tank komplett voll ist: 10cm
Abstand Sensor wenn der Tank komplett leer ist: 175cm
Es kommt bei der ganzen Geschichte auch nicht auf ein paar Liter an, Ziel soll es lediglich sein einen Überblick zu bekommen.
Hat vielleicht jemand von euch eine Idee wie man dies realisieren könnte?
besten Dank schonmal und liebe Grüße
Bernhard
zur Berechnung der Füllmenge in meinem Heizöltank benötige ich bitte etwas Hilfe bei der Umsetzung.
Zum Setting:
Ich nutze eine NodeMCU mit Tasmota 8.2 (sensors). Verbunden ist die NodeMCU mit einem Ultraschallsensor HC-SR04.
Diese Kombination läuft tadellos. Verbaut ist beides einfach in einer Abzweigdose. Unten 2 Löcher für den Sensor reingebohrt. Gleiche Löcher einfach in den Öltank gebohrt, Abzweigdose eingesetzt und zur Sicherheit alles nochmal mit Silikon abgedichtet. Funktioniert prima.
Die Daten werden via MQTT an mein Openhab gesendet und ich stelle diese dann auf der Sitemap dar.
Wie gesagt, das funktioniert auch soweit ganz Prima. Ich sehe also den Abstand in CM vom Sensor bis zur Oberfläche vom Öl.
Diese Darstellung ist natürlich nicht sonderlich schön und mir kam die Idee entweder die verbleibenden Liter zu berechnen, ODER einfach die % die sich noch im Tank befinden.
Von folgenden Daten können wir ausgehen:
Fassungsvermögen Öltank: 10000 Liter
Abstand Sensor zu Öloberfläche wenn der Tank komplett voll ist: 10cm
Abstand Sensor wenn der Tank komplett leer ist: 175cm
Es kommt bei der ganzen Geschichte auch nicht auf ein paar Liter an, Ziel soll es lediglich sein einen Überblick zu bekommen.
Hat vielleicht jemand von euch eine Idee wie man dies realisieren könnte?
besten Dank schonmal und liebe Grüße
Bernhard
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
---------------------------------
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Berechnung Füllstand Heizöltank
Na ja, mathematisch ist das keine große Herausforderung...
Füllstand in % = 100 - (Messung - 10)/(175 - 10)*100
Die Frage ist eher, wo Du die Berechnung vornimmst, in einer openHAB Rule oder in einer Tasmota Rule.
Letzteres hätte den Vorteil, dass Du den Wert auch unabhängig von openHAB direkt ablesen kannst.
Gesendet von meinem SM-G973F mit Tapatalk
Füllstand in % = 100 - (Messung - 10)/(175 - 10)*100
Die Frage ist eher, wo Du die Berechnung vornimmst, in einer openHAB Rule oder in einer Tasmota Rule.
Letzteres hätte den Vorteil, dass Du den Wert auch unabhängig von openHAB direkt ablesen kannst.
Gesendet von meinem SM-G973F mit Tapatalk
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 74
- Registriert: 19. Jan 2020 10:39
Re: Berechnung Füllstand Heizöltank
vielen Dank für die Gleichung.
Als Tasmota Rule ist natürlich die schönere Art, da hast Du recht.
Ich werde es mal versuchen und bei Erfolg auch das Ergebniss posten
Als Tasmota Rule ist natürlich die schönere Art, da hast Du recht.
Ich werde es mal versuchen und bei Erfolg auch das Ergebniss posten
---------------------------------
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
-
- Beiträge: 74
- Registriert: 19. Jan 2020 10:39
Re: Berechnung Füllstand Heizöltank
Ich habe doch eine Möglichkeit gefunden die Liter zu berechnen und versuche das in OpenHab erstmal zu testen.
Ich gehe folgendermaßen vor:
oeltank.items
oeltank.rules
sitemap
Das erste item (alt) wird korrekt angezeigt, also die cm Abstand vom Sensor.
das zweite item (OelFull) zeigt leider nichts an.
Ist vielleicht doch die rules falsch?
Ich gehe folgendermaßen vor:
oeltank.items
Code: Alles auswählen
Number OelFull
Code: Alles auswählen
rule "Berechnung Öl"
when
Oeltank_Full_Status changed
val min = 10 // [cm abstand zu sensor wenn tank voll]
val max = 175 // [cm abstand zu sensor wenn tank leer]
val vol = 10000 // [fassungsvermögen in liter]
//Oeltank_Full_Status ist das number item mit dem abstand in cm vom sensor
then
var Number a = max-Oeltank_Full_Status
var Number b = a*1000
numItem.postUpdate(OelFull)
end
Code: Alles auswählen
Text item=Oeltank_Full_Status label="Heizöltank [%.1f cm von oben zum Öl] " icon=oil
Text item=OelFull label="Heizöltank [%.1f Liter Heizöl im Tank] " icon=oil
das zweite item (OelFull) zeigt leider nichts an.
Ist vielleicht doch die rules falsch?
---------------------------------
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
-
- Beiträge: 424
- Registriert: 6. Mär 2019 11:19
Re: Berechnung Füllstand Heizöltank
Du beschreibst in deiner rule die Variable OelFull gar nicht mit irgendeinem Wert wie soll dann etwas angezeigt werden
Zudem sollte es bei a = max-Oeltank_Full_Status.state as Number heissen wenn der Status noch die Einheit enthält eher a = max-(Oeltank_Full_Status.state as Number).floatValue
Zudem sollte es bei a = max-Oeltank_Full_Status.state as Number heissen wenn der Status noch die Einheit enthält eher a = max-(Oeltank_Full_Status.state as Number).floatValue
-
- Beiträge: 74
- Registriert: 19. Jan 2020 10:39
Re: Berechnung Füllstand Heizöltank
oh ja stimmt, also eher
bringt leider auch keinen erfolg
Code: Alles auswählen
var Number a = max-Oeltank_Full_Status.state as Number
var Number b = a*1000
numItem.postUpdate(OelFull, b)
---------------------------------
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
-
- Beiträge: 424
- Registriert: 6. Mär 2019 11:19
Re: Berechnung Füllstand Heizöltank
Code: Alles auswählen
var Number a = max-Oeltank_Full_Status.state as Number
var Number b = a*1000
OelFull.postUpdate(b)
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Berechnung Füllstand Heizöltank
Das liegt daran, dass die ganze Rule keinen gültigen Code darstellt.

Ob man nun Liter oder Prozent haben möchte, spielt natürlich keine Rolle, 100% entsprechen ja einfach 10.000 Litern, man muss also nur mit dem passenden Faktor multiplizieren.
Wenn es per openHAB Rule passieren soll, sieht das Ganze so aus:
Die Formel sollte nachvollziehbar sein.
Bei Maximalfüllung wird der Ausdruck über dem Bruch 0, da Status == aMin. Bei leerem Tank ist der Status aMax. aMax - aMin ist die maxiamle Strecke. Bei maximal geleerten Tank ist der Bruch also == 1, bei minimal geleertem Tank ist der Bruch == 0, dazwischen ist der Bruch zwischen 0 und 1, und zwar proportional zum Füllstand. Multipliziert mit vMax bekommen wir die entnommene Menge in Litern, die wir vom Maximalinhalt abziehen müssen, um den Rest zu erhalten.
Die ersten drei Abfragen schützen vor Sensorfehlern und setzen die Anzeige auf NULL (das ergibt bei einem Number Item dann einen Strich)

Ob man nun Liter oder Prozent haben möchte, spielt natürlich keine Rolle, 100% entsprechen ja einfach 10.000 Litern, man muss also nur mit dem passenden Faktor multiplizieren.
Wenn es per openHAB Rule passieren soll, sieht das Ganze so aus:
Code: Alles auswählen
// globale Variablen und Konstanten Zu beginn der Datei definieren
val aMin = 10 // [cm Abstand zu Sensor wenn Tank voll]
val aMax = 175 // [cm Abstand zu Sensor wenn Tank leer]
val vMax = 10000 // [Fassungsvermögen in Liter]
rule "Berechnung Öl"
when
Oeltank_Full_Status changed
then
if(!(Oeltank_Full_Status.state instanceof Number)) { // falls Status keine gültige Zahl
logWarn("oelstand","Öltanksensor liefert keinen Messwert! ({})",Oeltank_Full_Status.state)
numItem.postUpdate(NULL)
return;
}
if((Oeltank_Full_Status.state as Number) < aMin) { // falls Status kleiner aMin
logWarn("oelstand","Öltanksensor liefert zu kleinen Messwert! ({} cm)",Oeltank_Full_Status.state)
numItem.postUpdate(NULL)
return;
}
if((Oeltank_Full_Status.state as Number) > aMax) { // falls Status größer aMax
logWarn("oelstand","Öltanksensor liefert zu großen Messwert! ({} cm)",Oeltank_Full_Status.state)
numItem.postUpdate(NULL)
return;
}
var Number vTeil = vMax-((Oeltank_Full_Status.state as Number) - aMin)/(aMax-aMin)*vMax
numItem.postUpdate(vTeil)
end
Bei Maximalfüllung wird der Ausdruck über dem Bruch 0, da Status == aMin. Bei leerem Tank ist der Status aMax. aMax - aMin ist die maxiamle Strecke. Bei maximal geleerten Tank ist der Bruch also == 1, bei minimal geleertem Tank ist der Bruch == 0, dazwischen ist der Bruch zwischen 0 und 1, und zwar proportional zum Füllstand. Multipliziert mit vMax bekommen wir die entnommene Menge in Litern, die wir vom Maximalinhalt abziehen müssen, um den Rest zu erhalten.
Die ersten drei Abfragen schützen vor Sensorfehlern und setzen die Anzeige auf NULL (das ergibt bei einem Number Item dann einen Strich)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 74
- Registriert: 19. Jan 2020 10:39
Re: Berechnung Füllstand Heizöltank
Vielen Dank, ja die Formel ist nachvollziehbar. Ich muss mich noch etwas an die OH Syntax gewöhnen, sorry dafür.
Leider funktioniert es so aber auch nicht. Zum Debug habe ich die von dir freundlicherweise eingebundenen Abfragen zu Sensorfehlern noch raus gelassen um sicher zu gehen das die Rechung funktioniert. Diese scheint aber nicht zu klappen.
rules:
Ich habe auch statt dem when .... Oeltank_Full_Status changed mal einen Lichtschalter eingebaut, damit der "then" bereich auf jedenfall greift. Aber auch hier kein Erfolg leider.
items:
sitemap:
Es gibt in den Logs keinen Error.
Frage: Kann es sein, dass eventuell mit Oeltank_Full_Status nicht gerechnet werden kann? Dieses Item ist via PaperUI angelegt als Number Item und empfängt vom mqtt folgendes:
mit:
in der Tasmota Console:
Leider funktioniert es so aber auch nicht. Zum Debug habe ich die von dir freundlicherweise eingebundenen Abfragen zu Sensorfehlern noch raus gelassen um sicher zu gehen das die Rechung funktioniert. Diese scheint aber nicht zu klappen.
rules:
Code: Alles auswählen
// globale Variablen und Konstanten Zu beginn der Datei definieren
val aMin = 10 // [cm Abstand zu Sensor wenn Tank voll]
val aMax = 175 // [cm Abstand zu Sensor wenn Tank leer]
val vMax = 10000 // [Fassungsvermögen in Liter]
rule "Berechnung Öl"
when
Oeltank_Full_Status changed
then
var Number vTeil = vMax-((Oeltank_Full_Status.state as Number) - aMin)/(aMax-aMin)*vMax
OelFull.postUpdate(vTeil)
end
items:
Code: Alles auswählen
Number OelFull
Code: Alles auswählen
Text item=OelFull label="Heizöltank [%.1f im Tank] " icon=oil
Text item=OelFull
Frage: Kann es sein, dass eventuell mit Oeltank_Full_Status nicht gerechnet werden kann? Dieses Item ist via PaperUI angelegt als Number Item und empfängt vom mqtt folgendes:
Code: Alles auswählen
tele/oeltank/SENSOR
Code: Alles auswählen
JSONPATH:$.SR04.Distance
Code: Alles auswählen
MQT: tele/oeltank/SENSOR = {"Time":"2020-05-15T12:54:11","SR04":{"Distance":19.982}}
---------------------------------
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
OpenHAB 3 auf Dell ThinClient unter Debian Bullseye und ConBee II
RaspberryPi 4b 2GB in Din Rail Gehäuse mit PiVCCU3
Allerlei Sonoff, Shelly, NodeMCU, Sensoren, Aqara Krams und und und.
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Berechnung Füllstand Heizöltank
Moment... Wie heißen denn die Items nun wirklich?
Sind Thing und Channel korrekt angelegt? Ist das Item mit dem Channel verknüpft?
Die von mir eingebauten If() Statements solltest Du übrigens nicht weg lassen, denn sie geben im Zweifel Fehlermeldungen aus, wenn es irgendwo klemmt.
Sind Thing und Channel korrekt angelegt? Ist das Item mit dem Channel verknüpft?
Die von mir eingebauten If() Statements solltest Du übrigens nicht weg lassen, denn sie geben im Zweifel Fehlermeldungen aus, wenn es irgendwo klemmt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet