Du siehst ja, dass man mit dieser Art Rule schnell an die Grenzen des sinnvoll möglichen kommt. Die gewünschte Funktion in einer Text Rule (die Form ist die für *.rules Dateien):
Code: Alles auswählen
rule "Rollos Südseite runter im Herbst zwischen 10 Uhr und 13:45 Uhr" // Sinnvoller wäre ein kürzerer Name und ein Kommentar
when //------------------------------------------------------------------------------> Ab hier werden die Trigger gelistet
Item tasLuxTerrasse_Lux changed // changed ist ausreichend, received update ginge ebenfalls
then //------------------------------------------------------------------------------> hier beginnt der Code-Block
if(now.getDayOfWeek.getValue > 5) // Falls Samstag oder Sonntag
return; // Abbruch
if(LokaleSonnendaten_Jahreszeit.state.toString != "AUTUMN") // Falls nicht Herbst
return; // Abbruch
if(tasLuxTerrasse_Lux.state < 1800) // Falls dunkler als 1800
return; // Abbruch
if(now.get(MINUTE_OF_DAY) < 600 || now.get(MINUTE_OF_DAY) > 13*60+45) // falls vor 10 Uhr oder nach 13:45 Uhr
return; // Abbruch
// Ab hier sollten die Läden geschlossen werden.
if(Rollowohnzimmerlinks_Rollensteuerung0offen100geschlossen.state != 80) // Falls Stand nicht 80
Rollowohnzimmerlinks_Rollensteuerung0offen100geschlossen.sendCommand(80)
if(Rollowohnzimmer2vlinks_Rollensteuerung0offen100geschlossen.state != 80) // Falls Stand nicht 80
Rollowohnzimmer2vlinks_Rollensteuerung0offen100geschlossen.sendCommand(80)
if(Rollowohnzimmer2vrechts_Rollensteuerung0offen100geschlossen.state != 80) // Falls Stand nicht 80
Rollowohnzimmer2vrechts_Rollensteuerung0offen100geschlossen.sendCommand(80)
if(Rollowohnzimmerrechts_Rollensteuerung0offen100geschlossen.state != 80) // Falls Stand nicht 80
Rollowohnzimmerrechts_Rollensteuerung0offen100geschlossen.sendCommand(80)
end //-------------------------------------------------------------------------------> hier endet der Code-Block
Die Rule prüft zunächst die Abbruchbedingungen ("But only if"). In den "alten" Rules Dateien gab es diesen Bedingungsblock nie, die Abfrage ist also Teil des auszuführenden Codes.
Der einfachste Weg ist hier, die Rule abzubrechen, falls eine Bedingung nicht passt. Entsprechend muss die Logik hier andersrum definiert sein.
Es werden also nacheinander der Wochentag, die Jahreszeit, die Helligkeit und die Uhrzeit geprüft. Dabei kann man die Bedingungen auch beliebig verketten, aber so wie aufgeführt kann man den Code auch leicht nachvollziehen.
Sind alle Bedingungen erfolgreich "nicht erfüllt", so müssen die Läden auf Beschattung gefahren werden, allerdings nur, wenn das nicht bereits geschehen ist.
Diese letzte Bedingung muss pro Laden einzeln geprüft werden.
Deine Itemnamen sind übrigens nicht so besonders toll, angefangen von Doppelungen (Lux...Lux, Rollo...Rollen...) über unsinnige Informationen (...Rollensteuerung0offen100geschlossen) die auch noch irrsinnig lang ist und keinerlei Mehrwert bietet - Rollläden sind in openHAB immer(!) zu x % geschlossen. Solltest Du Rollläden haben, die mit 100% komplett geöffnet sind, so solltest Du die entsprechende Steuerung dahin gehend ändern, dass 0 % die maximale Öffnung und 100 % die maximale Verdunkelung repräsentieren.
Du kannst hoffentlich erkennen, dass die Rule quasi 1:1 Deine Rule abbildet, nur mit dem Unterschied, dass jeder Aktor einzeln auf seinen aktuellen Stand geprüft wird - eine Funktion, die so über die UI Rule (ohne Code) nicht möglich ist - mindestens müsstest Du für jedes Rollo eine eigene Rule anlegen...
Die Rule ist (mit dem passenden Editor) auch nicht weniger komfortabel zusammenzustellen als über die UI.
Es gäbe auch noch Verbesserungspotenzial, z.B. könnte man alle Rollläden in einer Gruppe zusammenfassen und sie über die Grupppe gemeinsam steuern:
Code: Alles auswählen
gRollosWohnzimmer.members.forEach[r|
if(r.state != 80)
r.sendCommand(80)
]
Die Gruppe gRollosWohnzimmer wird durchlaufen, für jedes Item dieser Gruppe wird die Befehlsfolge ausgeführt, welche in den eckigen Klammern steht. Dabei steht r für das konkrete Item. So ist es egal, falls Du auf die Idee kommen solltest, noch ein zusätzliches Fenster mit zusätzlichem Rollo einzubauen. Es reicht dann, das Item der Gruppe hinzuzufügen.