Seite 2 von 2
Re: Berechnung Füllstand Heizöltank
Verfasst: 15. Mai 2020 14:27
von sonic
Das Item
Oeltank_Full_Status ist korrekt verbunden und zeigt auch in der sitemap den korrekten Wert vom Sensor an. (in cm).
das Item
OelFull habe ich in einer .items Datei angelegt als Number Item. Dieses soll nachher den fertig berechneten Wert bekommen um diesen ebenfalls auszugeben.
Bildschirmfoto 2020-05-15 um 14.22.25.png
Re: Berechnung Füllstand Heizöltank
Verfasst: 15. Mai 2020 15:16
von udo1toni
Bist Du sicher, dass die Rule geladen wird? Zum Test kannst Du zusätzlich(!) ein Switch Item als Trigger einbauen.
Sicherheitshalber kannst Du auch noch die Konstanten fest definieren (das sollte eigentlich nicht notwendig sein):
Code: Alles auswählen
// globale Variablen und Konstanten Zu beginn der Datei definieren
val Number aMin = 10 // [cm Abstand zu Sensor wenn Tank voll]
val Number aMax = 175 // [cm Abstand zu Sensor wenn Tank leer]
val Number vMax = 10000 // [Fassungsvermögen in Liter]
rule "Berechnung Öl"
when
mySwitch received command or
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)
OelFull.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)
OelFull.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)
OelFull.postUpdate(NULL)
return;
}
val Number aIst = Oeltank_Full_Status.state as Number
val Number vIst = vMax * (1 - (aIst - aMin) / (aMax - aMin))
logInfo("oelstand","Abstand Minimum: {} cm; Maximum {} cm; Ist {} cm",aMin,aMax,aIst)
logInfo("oelstand","Abstand Strecke gesamt: {} cm; Ist {} cm",aMax-aMin,aIst-aMin)
logInfo("oelstand","Volumen gesamt: {} dm³; Ist {} dm³",vMax,vIst)
OelFull.postUpdate(vIst)
end
Ich hab die Formel noch leicht abgewandelt, sowie noch ein paar Logzeilen dazu gepackt. Wenn man nun das Item mySwitch über die UI schaltet, wird die Rule ausgelöst. Entweder gibt es eine Warnmeldung über den fehlenden (oder außerhalb des erlaubten Bereichs liegenden) Wert, oder es gibt eine hübsche Zusammenfassung aller relevanten Werte. Eins von beiden muss im openhab.log auftauchen.
Re: Berechnung Füllstand Heizöltank
Verfasst: 15. Mai 2020 15:37
von sonic
mit dem mySqitch funktioniert es:
Code: Alles auswählen
2020-05-15 15:32:45.103 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'oeltank.rules' has errors, therefore ignoring it: [8,5]: no viable alternative at input 'mySwitch'
[9,5]: no viable alternative at input 'Oeltank_Full_Status'
2020-05-15 15:34:35.189 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'oeltank.rules'
2020-05-15 15:34:49.884 [INFO ] [ipse.smarthome.model.script.oelstand] - Abstand Minimum: 10 cm; Maximum 175 cm; Ist 20.456 cm
2020-05-15 15:34:49.888 [INFO ] [ipse.smarthome.model.script.oelstand] - Abstand Strecke gesamt: 165 cm; Ist 10.456 cm
2020-05-15 15:34:49.891 [INFO ] [ipse.smarthome.model.script.oelstand] - Volumen gesamt: 10000 dm³; Ist 9366.30303030303030303030303030303030000 dm³
2020-05-15 15:35:11.035 [INFO ] [ipse.smarthome.model.script.oelstand] - Abstand Minimum: 10 cm; Maximum 175 cm; Ist 20.456 cm
2020-05-15 15:35:11.038 [INFO ] [ipse.smarthome.model.script.oelstand] - Abstand Strecke gesamt: 165 cm; Ist 10.456 cm
2020-05-15 15:35:11.040 [INFO ] [ipse.smarthome.model.script.oelstand] - Volumen gesamt: 10000 dm³; Ist 9366.30303030303030303030303030303030000 dm³
habe die rule noch geänert im when bereich zu (also Item dazu geschrieben):
Code: Alles auswählen
when
Item mySwitch received command or
Item Oeltank_Full_Status changed
dannach war auch der Fehler im Log weg und Zack wird es angezeigt.
GANZ GANZ lieben Dank für die Hilfe. Vielleicht hilft es ja dem ein oder anderen auch so etwas umzusetzen!
Re: Berechnung Füllstand Heizöltank
Verfasst: 15. Mai 2020 18:23
von udo1toni
sonic hat geschrieben:Habe die rule noch geänert im when bereich zu (also Item dazu geschrieben):
Code: Alles auswählen
when
Item mySwitch received command or
Item Oeltank_Full_Status changed
dannach war auch der Fehler im Log weg und Zack wird es angezeigt.
Autsch... wie peinlich... [emoji33]
Gesendet von meinem SM-G973F mit Tapatalk