Seite 1 von 1

Rules: funktioniert der Temperatursensor? grösser-kleiner gibt Fehler

Verfasst: 14. Sep 2020 15:09
von UrsSeniorCH
User: kein Profi
Hardware: NUC
Betriebssystem Ubuntu 20.04
openHAB: 2.5.8
Sensor: HmIP-STHO via RaspberryMatic 3.51.6.20200621

Ich habe diverse Temperatur-Sensoren im Einsatz. Falls der Sensor "South" nicht richtig funktioniert so will ich die Group-Temperatur-Outside übernehmen.
Problem: Sobald ich in der Rules ein "<=" oder "=<" oder "<" bzw. "kleiner als" einsetze, so wird ein Fehler gemeldet.
Was mache ich falsch?

Items:
Group:Number:Temperature:AVG gTemperature_Outside "Temperature - Outside [%.1f %unit%]" <temperature>
Number:Temperature Temperature_Outside_South "Temperature - Outside South [%.1f %unit%]" <temperature>

Rules mit Error-Meldung:
if (
(TempHumSens1_Outs_S_Temperature.state != NULL) &&
(TempHumSens1_Outs_S_Temperature.state as Number > 54|"°C") &&
(TempHumSens1_Outs_S_Temperature.state as Number < -19|"°C")
) {
Temperature_Outside_South.postUpdate(TempHumSens1_Outs_S_Temperature.state)
}
else { Temperature_Outside_South.postUpdate(gTemperature_Outside.state) }

Rules ohne Error-Meldung:
if (
(TempHumSens1_Outs_S_Temperature.state != NULL) &&
(TempHumSens1_Outs_S_Temperature.state as Number > 54|"°C")
) {
Temperature_Outside_South.postUpdate(TempHumSens1_Outs_S_Temperature.state)
}
else { Temperature_Outside_South.postUpdate(gTemperature_Outside.state) }

auch wenn ich den Bereich ">25" und "<10" verwende bleibt der Fehler...

openhab.log:
2020-09-14 14:58:32.366 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'Shading.rules' has errors, therefore ignoring it: [390,57]: no viable alternative at input '-'

Visual Studio Code, Darstellung Probleme:
{
"resource": "/etc/openhab2/rules/Shading.rules",
"owner": "_generated_diagnostic_collection_name_#0",
"code": "org.eclipse.xtext.xbase.validation.IssueCodes.incompatible_types",
"severity": 8,
"message": "Type mismatch: cannot convert from BigDecimal to boolean",
"startLineNumber": 390,
"startColumn": 6,
"endLineNumber": 390,
"endColumn": 66
}
{
"resource": "/etc/openhab2/rules/Shading.rules",
"owner": "_generated_diagnostic_collection_name_#0",
"code": "org.eclipse.xtext.diagnostics.Diagnostic.Syntax",
"severity": 8,
"message": "no viable alternative at input '-'",
"startLineNumber": 390,
"startColumn": 57,
"endLineNumber": 390,
"endColumn": 58
}

Danke für jeglichen Hinweis; Urs

Re: Rules: funktioniert der Temperatursensor? grösser-kleiner gibt Fehler

Verfasst: 14. Sep 2020 19:38
von udo1toni
Dein Problem sind fehlende Klammern.
Aber es gibt noch ein wenig mehr, was Du besser machen könntest:

Code: Alles auswählen

    var Number nTemp = if(gTemperature_Outside.state instanceof Number) (gTemperature_Outside.state as Number).floatValue else 20
    if(TempHumSens1_Outs_S_Temperature.state instanceof Number) {
        if((TempHumSens1_Outs_S_Temperature.state as Number).floatValue <= 54 && TempHumSens1_Outs_S_Temperature.state as Number).floatValue >= -19)
            nTemp = (TempHumSens1_Outs_S_Temperature.state as Number).floatValue
    }
    Temperature_Outside_South.postUpdate(nTemp | "°C")
Die erste Zeile definiert den Default Wert, falls etwas schief geht. Auch gTemperature_Outside.state muss nicht unbedingt eine gültige Zahl enthalten, weshalb ich hier einen Wert von 20 als "Not Wert" verwende.
Die zweite Zeile prüft, ob das eigentliche Item TempHumSens1_Outs_S_Temperature einen Status vom Typ Number enthält (NULL ist nur ein möglicher ungültiger Wert). Nur falls das der Fall ist, wird der Status auf konkrete Zahlen überprüft (es kommt sonst im Fehlerfall unweigerlich zu einer NullPointer Exception). Werden die Grenzwerte eingehalten, wird die oben definierte Variable mit einem neuen Wert beschrieben, eben dem Zahlenwert, der sich aus dem Status ergibt.
Zum Abschluss wird die Variable an das Item gesendet, und zwar einheitenbehaftet.

Die fehlenden Klammern sind die um den Ausdruck "Item.state as Number", wodurch das < Vorrang vor dem as bekommt. korrekt wäre also

Code: Alles auswählen

if((Item.state as Number) < irgendwas)
, aber wie erwähnt ist das nicht fail save.

Re: Rules: funktioniert der Temperatursensor? grösser-kleiner gibt Fehler

Verfasst: 24. Sep 2020 22:07
von UrsSeniorCH
Perfekt! Nachdem ich dein Vorschlag direkt übernommen habe, funktioniert nun alles perfekt.
Ebenso konnte ich dein Vorschlag in diversen Rules übernehmen bzw. hinein interpretieren.
Vielen Dank für deine wertvolle Unterstützung. Gruss, Urs

Re: Rules: funktioniert der Temperatursensor? grösser-kleiner gibt Fehler

Verfasst: 25. Sep 2020 08:04
von udo1toni
Immer gerne :)