Seite 1 von 1

Müssen Variablen deklariert werden

Verfasst: 2. Feb 2018 19:56
von Skully
Ich habe noch ein Frage die mich brennend interessiert:

Müssen Vaiablen in der .rules vorher deklariert werden. Ich kenne das so aus C++, dass Variablen am Anfang der Seite deklariert werden müssen. Ich habe beides schon getestet, mit vorher deklarieren und ohne. Und beides scheint irgendwie zu funktionieren. (Glaube ich zumindest :D )

Wenn ich Variablen mit:

Code: Alles auswählen

rule "Init virtual Items"

when
    System started
then

var Zahl_1                //oder
var Zahl_2 = 1          //oder
var double Zahl_3    

[...code...]
end
deklariere kommt bei mir ein Fehler. Oder müssen die Variablen in der .item deklariert werden? Oder funktioniert das nur mit .state?

Code: Alles auswählen

var Zahl_1.state 

Re: Müssen Variablen deklariert werden

Verfasst: 2. Feb 2018 21:55
von hr3
Variablen müssen deklariert werden. https://docs.openhab.org/configuration/rules-dsl.html

Code: Alles auswählen

var Zahl_1 
ist ungültig, da weder ein Type noch Value angegeben wurde.

Re: Müssen Variablen deklariert werden

Verfasst: 2. Feb 2018 22:19
von Skully
Meine Regeln funktionieren aber auch ohne deklaration. Das finde ich ja das komische.
The Variable Declarations section can be used to declare variables that should be accessible to all rules in this file. You can declare variables with or without initial values and modifiable or read-only.
Das hört sich für mich an wie wenn ich keinen Wert deklarieren müsste. Was meinst du mit "Type"?

Re: Müssen Variablen deklariert werden

Verfasst: 2. Feb 2018 22:35
von hr3
Mit Type meine ich z.B. double, wie du es in deinem dritten Beispiel verwendet hast.
Dann poste doch bitte mal dein Beispiel ohne Deklaration.

Re: Müssen Variablen deklariert werden

Verfasst: 3. Feb 2018 02:41
von Skully

Code: Alles auswählen

rule "Cron_Heizungs_Automatisierung"
when
	Time cron "5 0/5 * * * ?" //At second :05, every 5 minutes starting at minute :00, of every hour
then

var hour = now.getHourOfDay
var min = now.getMinuteOfHour
var wd = now.getDayOfWeek

	
// Wochentags (Mo - Fr) **Bad**
if (Badautomatik_Hz_ein_aus.state == 1 && wd <= 5){

		
		//6:00 Uhr Aufheizperiode Bad EIN
 
		if ((hour.state == 6 && min.state <= 5) && (TemperaturBad.state < 23)) { //23?C Maximal Temperatur dnach abregelung
		Heizung_Switch_Ba.sendCommand(ON)

		Bad.postUpdate(Badtemperatur_Soll_Setpoint)
	        Badtemperatur_Soll_Setpoint.postUpdate(23)
		}

		//7:00 Uhr Aufheizperiode Bad AUS

		if (hour.state == 7 && min.state <= 5) {
		Heizung_Switch_Ba.sendCommand(OFF)

		Badtemperatur_Soll_Setpoint.postUpdate(Bad)
		}		
}



// Wochentags (Mo - Fr) **Wohnzimmer**
if (Wonautomatik_Hz_ein_aus.state == 1 && wd <= 5){


		//15:30 Uhr Aufheizperiode Wohnzimmer EIN 
		if ((hour.state == 15 && min.state <= 30) && (TemperaturWon.state < 23)) { //23?C Maximal Temperatur
		Heizung_Switch_Won1.sendCommand(ON)
            	Heizung_Switch_Won2.sendCommand(ON)

		won.postUpdate(Wontemperatur_Soll_Setpoint)
		Wontemperatur_Soll_Setpoint.postUpdate(23)
		}

		//16:00 Uhr Aufheizperiode Wohnzimmer AUS
		if (hour.state == 16 && min.state <= 5) {
		Heizung_Switch_Won1.sendCommand(OFF)
            	Heizung_Switch_Won2.sendCommand(OFF)
		Wontemperatur_Soll_Setpoint.postUpdate(Won) //*************
		}
}
end

Hier zum Beispiel die Variable Won oder Bad. Sie taucht nur hier auf und dient zum Zwischenpeichern des aktuellen eingestellten Reglerwertes.
Ich habe sie so nicht vorher deklariert.

Re: Müssen Variablen deklariert werden

Verfasst: 3. Feb 2018 08:07
von hr3
Entweder handelt es sich um ein Item oder die Anweisung wird nicht ausgeführt.