Berechnung Füllstand Heizöltank

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

sonic
Beiträge: 74
Registriert: 19. Jan 2020 10:39
Answers: 0

Berechnung Füllstand Heizöltank

Beitrag von sonic »

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.
IMG_9953.JPG
Bildschirmfoto 2020-05-15 um 09.56.26.png
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.

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Berechnung Füllstand Heizöltank

Beitrag von udo1toni »

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


openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

sonic
Beiträge: 74
Registriert: 19. Jan 2020 10:39
Answers: 0

Re: Berechnung Füllstand Heizöltank

Beitrag von sonic »

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
---------------------------------
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.

sonic
Beiträge: 74
Registriert: 19. Jan 2020 10:39
Answers: 0

Re: Berechnung Füllstand Heizöltank

Beitrag von sonic »

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

Code: Alles auswählen

Number OelFull
oeltank.rules

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
sitemap

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 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?
---------------------------------
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.

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: Berechnung Füllstand Heizöltank

Beitrag von Darkwin101 »

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

sonic
Beiträge: 74
Registriert: 19. Jan 2020 10:39
Answers: 0

Re: Berechnung Füllstand Heizöltank

Beitrag von sonic »

oh ja stimmt, also eher

Code: Alles auswählen

	var Number a = max-Oeltank_Full_Status.state as Number
        var Number b = a*1000
        numItem.postUpdate(OelFull, b)
bringt leider auch keinen erfolg
---------------------------------
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.

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: Berechnung Füllstand Heizöltank

Beitrag von Darkwin101 »

Code: Alles auswählen

var Number a = max-Oeltank_Full_Status.state as Number
var Number b = a*1000
OelFull.postUpdate(b)
        
Beachte auch das die Rule erst ausgeführt wird wenn sich der Füllstand auch ändert eventuell würde für den ersten Test ein received Update sich anbieten so wird die Regel ausgeführt sobald du einen neuen Status von dem Sensor erhälst

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Berechnung Füllstand Heizöltank

Beitrag von udo1toni »

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:

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
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)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

sonic
Beiträge: 74
Registriert: 19. Jan 2020 10:39
Answers: 0

Re: Berechnung Füllstand Heizöltank

Beitrag von sonic »

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:

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
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:

Code: Alles auswählen

Number OelFull
sitemap:

Code: Alles auswählen

Text item=OelFull label="Heizöltank [%.1f im Tank] " icon=oil
        Text item=OelFull
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:

Code: Alles auswählen

tele/oeltank/SENSOR
mit:

Code: Alles auswählen

JSONPATH:$.SR04.Distance
in der Tasmota Console:

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.

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Berechnung Füllstand Heizöltank

Beitrag von udo1toni »

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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten