Seite 1 von 2

Rolladen in Ausgangsposition(previous state) fahren

Verfasst: 30. Dez 2015 18:01
von Cyrelian
Hallo zusammen,

mit folgender Rule fahre ich meine Rolladen wieder in die Ausgangsposition zurück.

Code: Alles auswählen

import java.util.Map


var Map shutterPreviousState = null


rule "Küche lüften (öffnen)"

when
		Item EGKuecheFenstersensor changed from CLOSED to OPEN
then
		if (EGKuecheRolladenFenster.state == 100){
			logInfo("AbschattungRules:Rolladen Küche lüften", "Küche lüften (öffnen)")
			shutterPreviousState = storeStates(EGKuecheRolladenFenster)
			logInfo("AbschattungRules:Rolladen Küche lüften", "Küche lüften (öffnen)"+ shutterPreviousState)
			sendCommand(EGKuecheRolladenFenster, 80)
		}
end


rule "Küche lüften (schließen)"

when
		Item EGKuecheFenstersensor changed from OPEN to CLOSED
then
		if (EGKuecheRolladenFenster.state != 100){
			logInfo("AbschattungRules:Rolladen Küche lüften", "Küche lüften (schließen)")
			restoreStates(shutterPreviousState)
			shutterPreviousState = null
		}
end
Was mir noch fehlt, währe in der

Code: Alles auswählen

rule "Küche lüften (schließen)"
eine Abfrage auf die

Code: Alles auswählen

shutterPreviousState
, ob hier der vorherige State = 100 ist. Leider ist mir das bisher noch nicht gelungen, da das

Code: Alles auswählen

{EGKuecheRolladenFenster (Type=RollershutterItem, State=100)=100}
der Output der

Code: Alles auswählen

shutterPreviousState
ist und ich nicht weiß wie man das filtert. Alles was ich bisher im Netz dazugefunden habe, war "für mich" zu kompliziert :)

@Seppy, danke für den Tip mit dem "var MAP"

Re: Rolladen in Ausgangsposition(previous state) fahren

Verfasst: 9. Jan 2016 13:43
von Cyrelian
Hi,

hab mittlerweile ne Lösung die sehr gut funktioniert.

Code: Alles auswählen

rule "Küche (öffnen)"

when
		Item EGKuecheFenstersensor changed from CLOSED to OPEN
then
		if (EGKuecheRolladenFenster.state == 100){
			logInfo("RolladenRules:Rolladen Küche", "Fenster (öffnen)")
			shutterPreviousState = storeStates(EGKuecheRolladenFenster)
			//logInfo("RolladenRules:Rolladen Küche", "Fenster (öffnen)"+ shutterPreviousState)
			sendCommand(EGKuecheRolladenFenster, 80)
		}
end


rule "Küche (schließen)"

when
		Item EGKuecheFenstersensor changed from OPEN to CLOSED
then
		if (EGKuecheRolladenFenster.state != 100){
			logInfo("RolladenRules:Rolladen Küche", "Fenster (schließen)")
			restoreStates(shutterPreviousState)
			shutterPreviousState = null
		}
end
vg

Re: Rolladen in Ausgangsposition(previous state) fahren

Verfasst: 11. Jan 2016 19:50
von Cyrelian
Hi,
nun würde ich das gerne noch erweitern um die Abfrage auf den "shutterPreviousState.state"

das scheint aber nicht zu klappen. Designer sagt zwar OK, aber die Rule zieht nicht :(

Code: Alles auswählen

var Map shutterPreviousState = null
Das steht in der "shutterPreviousState "

Code: Alles auswählen

{EGKuecheRolladenFenster (Type=RollershutterItem, State=100)=100}

Code: Alles auswählen

rule "Küche (schließen)"

when
		Item EGKuecheFenstersensor changed from OPEN to CLOSED
then
		if (EGKuecheRolladenFenster.state != 100 && shutterPreviousState.get(EGKuecheRolladenFenster.state) == 100){
			logInfo("RolladenRules:Rolladen Küche", "Fenster (schließen)")
			restoreStates(shutterPreviousState)
			shutterPreviousState = null
		}
end
vg

Re: Rolladen in Ausgangsposition(previous state) fahren

Verfasst: 11. Jan 2016 21:36
von seppy
Ich bin mir nicht sicher, aber wenn dann so

Code: Alles auswählen

shutterPreviousState.get(EGKuecheRolladenFenster).state

Re: Rolladen in Ausgangsposition(previous state) fahren

Verfasst: 12. Jan 2016 10:58
von Cyrelian
Hi,

da meckert der Designer

Code: Alles auswählen

Couldn't resolve reference to JvmIdentifiableElement 'state'.

Re: AW: Rolladen in Ausgangsposition(previous state) fahren

Verfasst: 12. Jan 2016 12:28
von snowy
Also von der Syntax musst du das state weglassen.

Gesendet von meinem A0001 mit Tapatalk 2

Re: Rolladen in Ausgangsposition(previous state) fahren

Verfasst: 12. Jan 2016 15:53
von Cyrelian
würde also so aussehen?

Code: Alles auswählen

shutterPreviousState.get(EGKuecheRolladenFenster)==100
aber woher weiß er das ich den state will? :?:

Re: Rolladen in Ausgangsposition(previous state) fahren

Verfasst: 12. Jan 2016 19:09
von snowy
Sorry ich habe nicht gesehen das es eine Map ist (Ist eine Map eine HashMap -> Java??)

Bist du dir sicher, dass das Objekt shutterPreviousState != null ist?

Code: Alles auswählen

shutterPreviousState.get(EGKuecheRolladenFenster.state)
Ich habe erst mit openHab angefangen, aber ich kann java programmieren. Deshalb muss ich noch sehen wie das alles zusammen spielt.

Eine Map geht ja so, dass du hier z.B (string,int) hast

Code: Alles auswählen

shutterPreviousState.put("EGKuecheRolladenFensterPos1", EGKuecheRolladenFenster.state)
wenn du dann den Wert willst musst du dann

Code: Alles auswählen

if (shutterPreviousState.get("EGKuecheRolladenFensterPos1") == 1000) {
tue was
}

Re: Rolladen in Ausgangsposition(previous state) fahren

Verfasst: 12. Jan 2016 21:59
von Cyrelian
Hi,

also die Rule "Küche öffnen" setzt den shutterPreviousState.

Dann ist sieht der Inhalt so aus. Das habe ich gerade nochmal gecheckt.

Code: Alles auswählen

{EGKuecheRolladenFenster (Type=RollershutterItem, State=100)=100}
Ob die Map = einer HashMap ist, weiß ich leider nicht.

Re: Rolladen in Ausgangsposition(previous state) fahren

Verfasst: 13. Jan 2016 10:03
von Cyrelian
würde das dann so aussehen?

Code: Alles auswählen

if (EGWohnzimmerRolladenTuer.state == 100 && shutterPreviousState.get("State") == 100){