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