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
Rules: funktioniert der Temperatursensor? grösser-kleiner gibt Fehler
Moderator: seppy
-
- Beiträge: 7
- Registriert: 21. Aug 2020 14:54
- Wohnort: Schweiz
Rules: funktioniert der Temperatursensor? grösser-kleiner gibt Fehler
OpenHAB 3 auf NUC/Ubuntu. CCU2/3 und CUxD, ca. 40 Aktoren/Sensoren.
TaHoma, Netatmo, Weaterapp, Pushover, Hue, MQTT, usw.
TaHoma, Netatmo, Weaterapp, Pushover, Hue, MQTT, usw.
- udo1toni
- Beiträge: 13955
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rules: funktioniert der Temperatursensor? grösser-kleiner gibt Fehler
Dein Problem sind fehlende Klammern.
Aber es gibt noch ein wenig mehr, was Du besser machen könntest:
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, aber wie erwähnt ist das nicht fail save.
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 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)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 7
- Registriert: 21. Aug 2020 14:54
- Wohnort: Schweiz
Re: Rules: funktioniert der Temperatursensor? grösser-kleiner gibt Fehler
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
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.
TaHoma, Netatmo, Weaterapp, Pushover, Hue, MQTT, usw.
- udo1toni
- Beiträge: 13955
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rules: funktioniert der Temperatursensor? grösser-kleiner gibt Fehler
Immer gerne
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet