Seite 1 von 1
Regel Temp-Vergleich Fehler
Verfasst: 13. Feb 2021 19:27
von Nico72
huhu,
ich bins mal wieder

hab vieles im englischen un dim Forum hier gefunden aber ich bekomme es iwie nicht hin.
Ich habe folgende Regel
Code: Alles auswählen
rule "Heizung Finn"
when
FinnHZ_Temperature received update
then
val nIstemp = FinnHZ_Temperature.state
val nSolltemp = FinnHZ_Solltemperature.state
if (nIstemp < nSolltemp) {
Heating_Finn_KZ.sendCommand(ON)
}
else {
Heating_Finn_KZ.sendCommand(OFF)
}
end
Das log spuckt mir dann immer folgende Fehlermeldung aus
Code: Alles auswählen
Configuration model 'heizung_finn.rules' has errors, therefore ignoring it: [4,1]: no viable alternative at input 'FinnHZ_Temperature'
Wenn da wer mir weiterhelfen könnte, was mache ich falsch?
Re: Regel Temp-Vergleich Fehler
Verfasst: 13. Feb 2021 20:00
von heiko74
Hallo,
es muß am Anfang der Rule lauten:
Code: Alles auswählen
...
when
Item FinnHZ_Temperature received update
then
...
Das Wort "Item" fehlt.
Re: Regel Temp-Vergleich Fehler
Verfasst: 14. Feb 2021 07:36
von Nico72
Danke dir für den Hinweis und die schnelle Antwort.
Danke auch an alle bisher die mir so schnell helfend antworten, ich bin halt noch sehr neu in der Materie.
die funktionierende Rule sieht so aus...
Code: Alles auswählen
rule "Heizung Finn"
when
Item FinnHZ_Temperature changed
then
val nIstemp = FinnHZ_Temperature.state
val nSolltemp = FinnKZ_Solltemperatur.state
if (nIstemp < nSolltemp) {
Heating_Finn_KZ.sendCommand(ON)
}
else {
Heating_Finn_KZ.sendCommand(OFF)
}
end
Kann man das noch besser schreiben in Bezug auf Geschwindigkeit Logik etc.
Wenn ich da für jeden Heizkörper eine Rule schreibe, bzw beim Badlicht habe ich bisher 5 Rules im Einsatz, wird da das System nicht irgendwann ausgebremst?
Re: Regel Temp-Vergleich Fehler
Verfasst: 14. Feb 2021 13:32
von udo1toni
Ja, sicher.
Code: Alles auswählen
rule "Heizung Finn"
when
Item FinnHZ_Temperature changed
then
var swHeat = OFF
if ((FinnHZ_Temperature.state as Number) < (FinnKZ_Solltemperatur.state as Number))
swHeat = ON
if(Heating_Finn_KZ.state != swHeat)
Heating_Finn_KZ.sendCommand(swHeat)
end
Unterschied 1: die Konstantenzuordnung ist im Prinzip schon ok, aber da die Konstanten nur einmal gebraucht werden, ist das eher überflüssig. Im Zwifel könnte man auf das Casting nach Number verzichten, so wird aber für den Leser klar, dass der Status als Zahl betrachtet werden soll.
Unterschied 2 (und das ist der eigentliche...): Die Variable swHeat bekommt einen default Wert OFF zugewiesen. ist die Temperatur niedriger als das Soll, wird swHeat auf ON geändert. Anschließend wird der Befehl ans Item nur unter der Bedingung verschickt, dass Sollzustand und Istzustand voneinander abweichen. Bei Deiner Rule zieht jede Änderung der Temperatur immer einen Befehl nach sich, auch wenn dieser schon gesendet wurde.
Ob die Rule mehr oder weniger Taktzyklen braucht, ist vermutlich zu vernachlässigen, aber der Steuerbus wird entlastet, denn der Status wird nur intern in openHAB gelesen, während der Steuerbefehl auf den Bus geht.
Re: Regel Temp-Vergleich Fehler
Verfasst: 14. Feb 2021 17:29
von Nico72
Ich danke Dir Udo, werd ich gleich mal einbauen.
Ein Paar Verständnissfragen hab ich noch.
1. "val" sind Variablen und "var" Konstanten ?
2. wie in Deinem Beispiel zu sehen benutzt du keine "{ }" bei den If-Anweisungen sind die nicht notwendig?
Ich hab ein paar gesicherte Kenntnisse in PHP-Programmierung daher ist die Sprache hier ein wenig verwirrend was den Syntax angeht

Re: Regel Temp-Vergleich Fehler
Verfasst: 14. Feb 2021 18:07
von Darkwin101
1. umgekehrt

2. Bei einer Anweisung sind diese nicht notwendig bei mehreren sind sie notwendig
Re: Regel Temp-Vergleich Fehler
Verfasst: 14. Feb 2021 19:02
von Nico72
Supi, danke für die Antworten. Oki also umgekehrt:) dann hatte ich das vorgestern falsch verstanden als ich da was im Netz gefunden hatte.
Re: Regel Temp-Vergleich Fehler
Verfasst: 14. Feb 2021 23:55
von udo1toni
val steht für VALue -> Wert (ein fixer)
var steht für VARiable -> veränderlich.
