Seite 1 von 1
optimieren von rules
Verfasst: 6. Apr 2023 20:56
von stutmich
Hallo zusammen,
ich komme von Domoticz und tue mich aktuell schwer die Funktionen von dort zu überführen.
Aufgabe:
Ich habe 4 Jalousien im Wohnzimmer.
Ich möchte das sie unter der Woche um 7:00 hochfahren, und am WE um 8:45.
Ich habe noch einen "Urlaubsschalter", wenn der "an" ist, sollen die Jalousien auch unter der Woche um 8:45 hochfahren.
Meine beiden Skripte sehen aktuell so aus, gefällt mir aber nicht. Wie bekommt man es in openhab effizienter hin?
Code: Alles auswählen
rule "WohnzimmerJalousie auf um 8:45"
when
Time cron "0 45 08 ? * * *"
then
if (VAR_Ferien.state == ON || now.getDayOfWeek.getValue >= 6 ) { // in den Ferien gehen alle Jalousien um 8:45 auf, SAM Son immer
ZW_WZ_Jalousie_Terrasse.sendCommand(UP)
ZW_WZ_Jalousie_Esstisch.sendCommand(UP)
Sonoff_JalousieCouch.sendCommand(UP)
ZW_WZ_Jalousie_Kueche_Blinds_Control.sendCommand(UP)
}
end
rule "WohnzimmerJalousie auf um 7:00 (in der Woche)"
when
Time cron "0 00 7 ? * MON,TUE,WED,THU,FRI *"
then
if (VAR_Ferien.state == OFF) {
ZW_WZ_Jalousie_Terrasse.sendCommand(UP)
ZW_WZ_Jalousie_Esstisch.sendCommand(UP)
Sonoff_JalousieCouch.sendCommand(UP)
ZW_WZ_Jalousie_Kueche_Blinds_Control.sendCommand(UP)
}
end
Danke für eure Tips.
Grüße
Micha
Re: optimieren von rules
Verfasst: 6. Apr 2023 21:29
von udo1toni
Mach eine Gruppe für alle Rollläden, die gemeinsam gesteuert werden sollen:
Code: Alles auswählen
Group gRoll01
Rollershutter ZW_WZ_Jalousie_Terrasse (gRoll01)
Rollershutter ZW_WZ_Jalousie_Esstisch (gRoll01)
Rollershutter ZW_WZ_Jalousie_Kueche_Blinds_Control (gRoll01)
Rollershutter Sonoff_JalousieCouch (gRoll01)
Hier als *.items Definition, geht aber genauso auch über die Main UI (Beschriftung usw. habe ich mal weg gelassen)
Außerdem reicht so oder so eine Rule:
Code: Alles auswählen
rule "WohnzimmerJalousie morgens auf"
when
Time cron "0 0 7 ? * MON-FRI" or // werktags
Time cron "0 45 8 ? * *" // täglich
then
if(now.getHour < 8 && VAR_Ferien.state == ON) // falls Ferien und vor 8 Uhr
return ; // Abbruch
gRoll01.members.forEach[s| // für alle Items in der Gruppe gRoll01
if(s.state != 0) // Falls Zustand nicht 0
s.sendCommand(UP) // öffnen
]
end
Natürlich kannst Du statt der Gruppe auch einzelne Items angeben.
Die Rule kontrolliert allerdings für jeden Rollladen, ob er bereits geöffnet ist. Nur falls das nicht der Fall ist, wird der Laden auch angesteuert. Zu Not kann man auch darauf verzichten, ist aber "ordentlicher" und führt zu weniger unnötigen Zeilen im events.log.
now.getHour liefert die auf einer Digitaluhr angezeigte Stunde (also um 07:59:59 eine 7, um 08:00:00 eine 8) Dieser Vergleich - gemeinsam mit dem Ferien-Schalter - kann also nur bei der frühen Schaltzeit wahr sein. Trifft die Bedingung zu, so wird die Rule einfach abgebrochen, weshalb die Rollläden in den Ferien nicht um 7 Uhr auffahren.
Time cron beherrscht natürlich auch Wertebereiche, hier Montag - Freitag. Außerdem kann die Angabe des Jahres komplett entfallen, genau wie führende Nullen (07 Uhr, 08 Uhr)
Re: optimieren von rules
Verfasst: 10. Apr 2023 19:52
von stutmich
Die Zusammenfassung ist eine sehr gute Idee, hätte ich auch darauf kommen können
Vielen Dank für die ausführliche Anleitung.
Re: optimieren von rules
Verfasst: 19. Apr 2023 14:19
von TorstenE
Habe es zufällig gesehen. Ja so eine Optimierung finde ich ebenfalls klasse.
Mit Gruppen habe ich bisher noch wenig in Rules gearbeitet. Das werde ich jetzt
definitiv umstellen.
Das mit dem Ferien-/Urlaubs-Schalter ist gut. Ich habe in einem anderen Thema
gesehen, dass es auch Schalter für Bewegungsmelder gibt. Also diese können ebenfalls
per Schalter "deatkviert" werden. Das sollte bei solchen Rules immer wieder mit berücksichtigt werden.
Re: optimieren von rules
Verfasst: 23. Okt 2023 23:03
von adazip
Hallo Zusammen,
ich hänge mich hier einfach mal ran, weil meine Frage ebenfalls das Steuern von Rollläden betrifft und hier gut passt.
Ich habe bereits eine Gruppensteuerung. Diese öffnet und schließt eine GR. von RL über einen cron Job.
Jetzt habe ich aber ein Problem: wie kann man es realisieren, dass man z.B. einen bestimmten Rollladen aus der gesamten Steuerung herausnimmt?
Ich habe ein Widget, bei dem man die Zeitsteuerung global einstellen kann, die einzelnen Rollläden haben ebenfalls das gleiche Widget, bloß eben auf das eine Gerät beschränkt. Jedem RL sind dadurch 5 Items zugewiesen.
Die Idee ist nun, dass z.B. 6 RL um 20:00 zugehen, 2 dagegen schon um 18:00 (Kinderzimmer)
Meine Idee war, dass ich in einem loop zu einem RL die entsprechenden weiteren Items ermittle und danach darauf aufbauend entscheide ob die gobale Zeit gilt oder nicht.
Die Items sind nach dem Muster benannt: RL_EG_SUED, RL_EG_SUED_schedule_open, -...clode. time_close, ..open
Das erscheint mir aber recht aufwendig, da ich alle Items durchgehen muss und den String aufeteilen, etc... dann bleibt noch die Frag ewie ich den cron aufbaue, bzw. steuere, zur Laufzeit weiß er ja nicht, ob RL 5 gerade aktiviert ist oder nicht...
Da muss es doch eine einfachere Lösung geben, oder ?
Zusammengefasst suche ich eine einfache Lösung, um eine Gruppe von RL zeitgesteuert zu öffnen und schließen, gleichzeitig aber die Möglichkeit zu haben, einzelne aus der Gruppe über die UI aus dieser Steuerung herauszunehmen.
Danke und viele Grüße
Adalbert
Re: optimieren von rules
Verfasst: 24. Okt 2023 00:31
von udo1toni
Im Zweifel musst du auf irgendeine Weise innerhalb der Rule entscheiden, welche Rollläden nun gesteuert werden sollen und welche nicht.
Deine Beschreibung der Items ist hier nicht wirklich ausreichend, oder zumindest verstehe ich aus Deiner Beschreibung nicht, wie das alles ineinander greift.
Wenn Du einen zuverlässigen Indikator hast, musst Du innerhalb der Gruppe nur entscheiden, ob der Befehl nun ausgeführt wird oder nicht.
Re: optimieren von rules
Verfasst: 24. Okt 2023 10:38
von TorstenE
Stell doch für jeden Rollladen ein zusätzliches Flag-Item zur Verfügung, so eine Art "manueller Status".
In der Rule wertest Du dann aus.
Wenn der Rollladen einen bestimmten Status hat z.B. 2. Bit gesetzt, dann führe folgende Regel nicht aus.
Über die Auswertung von Bits kannst Du praktisch auch mehrere Statuse pro Rollladen gleichzeitig setzen.
Re: optimieren von rules
Verfasst: 25. Okt 2023 00:32
von adazip
Hi,
danke für die Hilfe.
Also ich habe nach langem rumprobieren letztlich folgende Lösung gefunden:
Jeder RL bekommt zstzl. 4 Items: schedule_open/_close, time_open/_close
Die werden über ein Widget gesetzt.
Die Rollensteuerung bekommt noch Metadaten verpasst, individual_time_close/open = on/off
Die verwende ich in der globalen öffnen/schließen-Regel: wenn also eine Rollensteuerung diese metadaten ON hat, wird sie übersprungen, ansonsten wird sie gesteuert
Der jeweilige RL hat 3 Regeln:
- setzen der schedule.. Items
- öffnen Regel, wenn alle dafür Parameter zutreffen
- schließen Regel, wenn alle dafür Perameter zutreffen.
ein einfachere Lösung, also one4all ist mir bisher nicht einfallen. Ich denke man könnte mit den Tags und Metadaten was machen, so dass am Ende alle RL erfasst werden, aber wie gesagt, konkret noch nichts entwickelt.
und wozu das Ganze?
Jetzt kann ich eine zentrale Zeitsteuerung einstellen und einzelne RL aus dieser herausnehmen und individuell einstellen..
Danke nochmals für die Unterstützung.
Viele Grüße
Adalbert