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

Moderator: seppy

Antworten
UrsSeniorCH
Beiträge: 7
Registriert: 21. Aug 2020 14:54
Wohnort: Schweiz

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

Beitrag 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
OpenHAB 3 auf NUC/Ubuntu. CCU2/3 und CUxD, ca. 40 Aktoren/Sensoren.
TaHoma, Netatmo, Weaterapp, Pushover, Hue, MQTT, usw.

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

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

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

UrsSeniorCH
Beiträge: 7
Registriert: 21. Aug 2020 14:54
Wohnort: Schweiz

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

Beitrag 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
OpenHAB 3 auf NUC/Ubuntu. CCU2/3 und CUxD, ca. 40 Aktoren/Sensoren.
TaHoma, Netatmo, Weaterapp, Pushover, Hue, MQTT, usw.

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

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

Beitrag von udo1toni »

Immer gerne :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten