Seite 1 von 2

Jalousieverschattung

Verfasst: 3. Jan 2022 08:47
von SaschaQ
Hallo zusammen,

bei mir werden um 21:45 (Winterzeit) und 22.45 (Sommerzeit) die Jalousien auf 100 % gefahren.

Vorher wird bei einem bestimmten Dämmerungswert die Jalousie auf 50% gefahren.

Ich möchte nun verhindern, falls ich die Jalousie vor eintreten des Dämmerungswerts auf 100 % gesetzt habe, dass diese wieder zurück auf 50 % fährt.

Jemand eine Idee wie ich das realisieren kann?

Meine Verschattungsrule sieht wie folgt aus: ( Hier ist auch noch eine Lüftungsstufe in Abhängigkeit zu den Magnetkontakten implementiert)

rule "Jalousie Abendverschattung inkl Lüftungsstufe"

when

Time cron "0 45 22 24-30 APR ?" or // vom 24. - 30. April
Time cron "0 45 22 * MAY-AUG ?" or // vom 1. Mai bis 31. August
Time cron "0 45 22 1-15 SEP ?" or // vom 1. bis 15. September
Time cron "0 45 21 16-30 SEP ?" or // vom 16. bis 30. September
Time cron "0 45 21 * JAN-MAR,OCT-DEC ?" or // vom 1. Oktober bis 31. März
Time cron "0 45 21 1-23 APR ?" // vom 1. bis 23. April

then

if(sp_jalousie_automatik_alexa.state == OFF)

{
eg_wohnzimmer_rechts_rol.sendCommand(100)
gEGOGRolladen.members.forEach[r|
val cKontakt = gEGOGMagnetkontakte.members.filter[c|c.name.split("_").get(1) == r.name.split("_").get(1)].head
r.sendCommand(
if(cKontakt.state == CLOSED) 100 else 80
)
]

}
end

Re: Jalousieverschattung

Verfasst: 3. Jan 2022 11:12
von int5749
Hi,

Du könntest beim erreichen des Dämmerugswertes auf 100% prüfen? bzw. würde ich ehere auf 50% prüfen um zu vermeiden, dass ein Rollo von 90% aufgefahren würde.

Code: Alles auswählen

gEGOGRolladen.allMembers.filter(f|(f.state as DecimalType).intValue!<=50).forEach[ s|
	s.sendCommand(50)
]

Re: Jalousieverschattung

Verfasst: 5. Jan 2022 08:07
von SaschaQ
Danke Dir

Verstehe ich nicht ganz.

Wie muss ich das bei mir einbauen und was meinst du mit auf50% bzw. 90 % prüfen?

Re: Jalousieverschattung

Verfasst: 5. Jan 2022 11:54
von int5749
SaschaQ hat geschrieben: 5. Jan 2022 08:07 Danke Dir

Verstehe ich nicht ganz.

Wie muss ich das bei mir einbauen und was meinst du mit auf50% bzw. 90 % prüfen?
Diese Prüfung erfolgt in dem von mir bereitgestellten Sniplet ;-)

Code: Alles auswählen

f.state as DecimalType).intValue!<=50
Jeder Rollladen, der kleiner oder gleich 50 ist wird gefahren.

Re: Jalousieverschattung

Verfasst: 17. Jan 2022 14:52
von SaschaQ
Hi int5749,

ich habe die Rule wie folgt aufgebaut:

Code: Alles auswählen


rule "Jalousieverschattung 50% DG 100% bei Dämmerung an"
when
	
	Item ws_daemmerung changed to OPEN
 
then

if(sp_jalousie_automatik_alexa.state == OFF) {

gEGOGRolladen_all.allMembers.filter(f|(f.state as DecimalType).intValue!<=50).forEach[ s|
	s.sendCommand(50)
]

dg_schlafzimmerlinks_rol.sendCommand(100)
dg_schlafzimmerrechts_rol.sendCommand(100)
dg_badezimmer2_rol.sendCommand(100)
dg_arbeitszimmersascha_rol.sendCommand(100)

}

Ich bekomme folgende Fehlermeldungen:

Code: Alles auswählen


2022-01-17 14:48:10.606 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'Jalousie.rules' has errors, therefore ignoring it: [266,72]: missing ')' at '!'

[266,74]: no viable alternative at input '='

[266,75]: mismatched input '50' expecting '>'

[266,77]: mismatched input ')' expecting '}'

[275,1]: mismatched input '}' expecting 'end'
Hast du eine Idee?

Re: Jalousieverschattung

Verfasst: 17. Jan 2022 15:23
von udo1toni
Du hast da !<= stehen, das ist falsch. ! bedeutet not (nicht). <= bedeutet kleiner oder gleich. Entweder meinst Du tatsächlich "nicht kleiner oder gleich, das wäre dann "größer als", also >, oder Du meinst "kleiner oder gleich" (also ! weg machen) oder Du meinst "ungleich", dann wäre das < überzählig.
In der Folge sucht der Parser nach einer schließenden Klammer, welche aber erst später kommt, deshalb die seltsame Meldung.

By the way: es fehlt das Schlüsselwort "end" zum Schluss. Außerdem wäre es besser, nicht mit DecimalType zu arbeiten, wo Du doch eigentlich Number als Typ brauchst. Und wenn Du den Wert als Number auswertest, denke daran, ein Item kann auch einen ungültigen Wert enthalten, dann ist es nicht als Number oder DecimalType darstellbar, es kommt dann bei Deinem Code zu einer NullPointer Exception, das solltest Du also abfangen:

Code: Alles auswählen

        gEGOGRolladen_all.allMembers.filter[i|i.state instanceof Number].filter[f|(f.state as Number) < 50].forEach[ s |
.filter() geht, aber eigentlich ist es .filter[]. Shutter, die schon auf 50 stehen, benötigen keinen Befehl, auf 50 zu fahren.

Re: Jalousieverschattung

Verfasst: 17. Jan 2022 17:07
von SaschaQ
Hallo udo1toni,

Ziel soll es aber sein, dass wenn die Jalousie von mir Manuell auf 100 gefahren wurden und die Dämmerung dann auf an springt, die Jalousie nicht wieder auf 50 gesetzt werden.

Bei mir nämlich zuerst bei Eintritt der Dämmerung auf 50 gesetzt und wenn ich dann vorher aber schon auf 100 gesetzt habe, dann fährt die Dämmerung an die Jalousie wieder auf 50 und das möchte ich vermeiden.

Ich meine dass deine Code Zeile das nicht so macht oder?

Kann ich die ansonsten so in meine Rule einbauen?

Re: Jalousieverschattung

Verfasst: 17. Jan 2022 18:48
von udo1toni
Doch, selbstverständlich. Wenn Du auf einen Wert über 50 (oder gleich 50) fährst, wird der Laden nicht angefasst. Wie gesagt, !<= ist Quatsch und als Statement nicht existent. Deshalb wird die Rule auch nicht ausgeführt.

Re: Jalousieverschattung

Verfasst: 17. Jan 2022 20:35
von int5749
udo1toni hat geschrieben: 17. Jan 2022 18:48 Wie gesagt, !<= ist Quatsch und als Statement nicht existent. Deshalb wird die Rule auch nicht ausgeführt.
Ich sollte mich darauf beschränken Fragen zu stellen, anstatt zu beantworten. Zum Glück passt immer jemand auf :?

Re: Jalousieverschattung

Verfasst: 17. Jan 2022 22:26
von udo1toni
:) das könnte ich genauso zurück geben :) Wobei ich zugegebenermaßen nur selten Fragen habe. Aber Fehler mache ich auch...