Regel Temp-Vergleich Fehler

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Nico72
Beiträge: 18
Registriert: 29. Dez 2020 09:50
Answers: 0

Regel Temp-Vergleich Fehler

Beitrag 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?
von udo1toni » 14. Feb 2021 13:32
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.
Gehe zur vollständigen Antwort

heiko74
Beiträge: 14
Registriert: 5. Apr 2019 21:38
Answers: 0

Re: Regel Temp-Vergleich Fehler

Beitrag 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.

Nico72
Beiträge: 18
Registriert: 29. Dez 2020 09:50
Answers: 0

Re: Regel Temp-Vergleich Fehler

Beitrag 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?

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

Re: Regel Temp-Vergleich Fehler

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

Nico72
Beiträge: 18
Registriert: 29. Dez 2020 09:50
Answers: 0

Re: Regel Temp-Vergleich Fehler

Beitrag 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 :)

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: Regel Temp-Vergleich Fehler

Beitrag von Darkwin101 »

1. umgekehrt :)
2. Bei einer Anweisung sind diese nicht notwendig bei mehreren sind sie notwendig

Nico72
Beiträge: 18
Registriert: 29. Dez 2020 09:50
Answers: 0

Re: Regel Temp-Vergleich Fehler

Beitrag 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.

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

Re: Regel Temp-Vergleich Fehler

Beitrag von udo1toni »

val steht für VALue -> Wert (ein fixer)
var steht für VARiable -> veränderlich. ;)
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten