Seite 1 von 1
Szenen einrichten, Item in mehreren Szenen
Verfasst: 5. Nov 2022 14:54
von TorstenE
Hallo Mitstreiter,
wie eine Rule eingerichtet wird ist mir klar:
Code: Alles auswählen
rule "Szene Morgen ein"
when
// Szene aktivieren
Item sMorgen received command ON
then
// schalte irgend welche Licht-Items ein
end
Also über ein Szene-Item, welches als Switch konfiguriert ist, die Szene aktivieren bzw. deaktivieren.
(egal, mal welcher Trigger dieses Szene-Item noch alles schaltet ausser der manuelle Switch)
Nur wie stellt Ihr das an, wenn Items in mehreren Szenen enthalten sind. Wird dann von einer
Szene in die andere gewechselt (1. Szene ausschalten, 2. Szene einschalten), dann blinken
z.B. die Lichter, welche in beiden Szenen enthalten sind. Das ist natürlich ein
unschöner Effekt.
Vielleicht gibt es eine generelle Vorgehensweise für Szenen ?
Danke
Torsten
Re: Szenen einrichten, Item in mehreren Szenen
Verfasst: 5. Nov 2022 17:33
von udo1toni
Das Beispiel ist etwas mager

weil ausgerechnet der Teil fehlt, der in der Rule aktiv arbeitet (also die sendCommands...)
Aber nehmen wir mal ein Beispiel einer statischen Szenensteuerung:
Code: Alles auswählen
rule "Szenen Schaltung"
when
Item Szene changed
then
if(!(newState instanceof Number) {
logWarn("scene","Szenensteuerung: {} ist keine gültige Szene! ABBRUCH!",newState)
return;
}
logInfo("scene","Szenensteuerung: es wurde Szene {} gewählt.",newState)
// aktueller Wert als Default
var swLicht1 = myLicht1.state // myLicht11-4 sind Switch Items
var swLicht2 = myLicht2.state
var swLicht3 = myLicht3.state
var swLicht4 = myLicht4.state
var dimLicht5 = myLicht5.state // myLicht 5-8 sind Dimmer Items
var dimLicht6 = myLicht6.state
var dimLicht7 = myLicht7.state
var dimLicht8 = myLicht8.state
switch((newState as Number).intValue) {
case 0 : { swLicht1 = OFF swLicht2 = OFF swLicht3 = OFF swLicht4 = OFF dimLicht5 = 0 dimLicht6 = 0 dimLicht7 = 0 dimLicht8 = 0 }
case 1 : { swLicht1 = ON swLicht2 = ON swLicht3 = OFF swLicht4 = OFF dimLicht5 = 30 dimLicht6 = 50 dimLicht7 = 70 dimLicht8 = 90 }
case 2 : { swLicht1 = OFF swLicht2 = ON swLicht3 = ON swLicht4 = OFF dimLicht5 = 15 dimLicht6 = 37 dimLicht7 = 42 dimLicht8 = 55 }
case 3 : { swLicht1 = OFF swLicht2 = OFF swLicht3 = ON swLicht4 = ON dimLicht5 = 11 dimLicht6 = 55 dimLicht7 = 12 dimLicht8 = 19 }
case 5 : { swLicht1 = OFF swLicht2 = ON dimLicht6 = 17 dimLicht8 = 47 }
}
if(myLicht1.state != swLicht1)
myLicht1.sendCommand(swLicht1.toString)
if(myLicht2.state != swLicht2)
myLicht2.sendCommand(swLicht2.toString)
if(myLicht3.state != swLicht3)
myLicht3.sendCommand(swLicht3.toString)
if(myLicht4.state != swLicht4)
myLicht4.sendCommand(swLicht4.toString)
if(myLicht5.state != dimLicht5)
myLicht5.sendCommand(dimLicht5)
if(myLicht6.state != dimLicht6)
myLicht6.sendCommand(dimLicht6)
if(myLicht7.state != dimLicht7)
myLicht7.sendCommand(dimLicht7)
if(myLicht8.state != dimLicht8)
myLicht8.sendCommand(dimLicht8)
end
Der Knackpunkt ist: zunächst werden die Sollwerte in Variablen festgelegt. Anschließend wird für jedes Item geprüft, ob der aktuelle Status mit dem Sollwert übereinstimmt. Nur bei einer Abweichung wird auch ein Befehl gesendet.
Damit auch Szenen "addierend" verwendet werden können (also die Szenennummer 5 steuert nur vier statt acht Items, die übrigen sollen einfach den aktuellen Status behalten), wird zu Beginn der aktuelle Status in die lokalen Variablen geladen.
Da es sich bei swLicht1 - 4 um OnOffType handelt, wird openHAB rummosern, weil es keinen Status als Befehl verwenden möchte (als ob das bei Zahlen anders wäre...) Deshalb der Kunstgriff mit dem .toString

Und ja, es gibt keine Szene 4. Szenen müssen nicht zwangsläufig durchgehend nummeriert sein
Natürlich ist das oben hässlicher Spaghetticode, geht hübscher mit Gruppen und HashMaps.
Re: Szenen einrichten, Item in mehreren Szenen
Verfasst: 5. Nov 2022 17:59
von TorstenE
Hallo Udo,
danke für das Beispiel. Der Tipp mit den Variablen löst meine Frage vollkommen.
Also gibt es eigentlich immer nur 1 "Haupt"-Szene die praktisch aktiv/gültig ist.
Bei Szene 5 interessieren somit nur 2 Items, der Rest wäre egal - ebenfalls verstanden.
Aber jetzt die Frage: Jetzt konkurrieren Szene 2 und Szene 5 bei dem "swLicht1". D.h. wenn Du Szene 5 nach Szene 2 aktivierst, kannst Du die Szene 5 eigenständig nicht mehr zurück nehmen. - Wo wird so etwas verwendet ?
Schönen Abend
Torsten
Re: Szenen einrichten, Item in mehreren Szenen
Verfasst: 5. Nov 2022 19:37
von udo1toni
Man kann ohnehin keine Szenen "zurücknehmen".
Eine Szene kann per Definition auch nicht "aktiv" sein und somit auch nicht "deaktiviert" werden.
Eine Szene wird ausgelöst und damit nehmen alle beteiligten Items einen in der Szene definierten Status an.
Re: Szenen einrichten, Item in mehreren Szenen
Verfasst: 5. Nov 2022 20:15
von TorstenE
Ok, das ist praktisch die "Grund-Idee". Die Items nehmen bei einer Szene einen Status ein - fertig.
Verstanden - zurück gibt es nicht, somit logisch.
Danke Udo.