optimieren von rules

Allgemeine Fragen zum Thema "Smart Home" und Entscheidungshilfen

Moderator: seppy

Antworten
stutmich
Beiträge: 14
Registriert: 4. Mär 2023 17:43
Answers: 0

optimieren von rules

Beitrag 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

Benutzeravatar
udo1toni
Beiträge: 13988
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: optimieren von rules

Beitrag 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)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

stutmich
Beiträge: 14
Registriert: 4. Mär 2023 17:43
Answers: 0

Re: optimieren von rules

Beitrag 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.

Benutzeravatar
TorstenE
Beiträge: 237
Registriert: 12. Jan 2022 18:29
Answers: 4
Wohnort: Niederstaufen

Re: optimieren von rules

Beitrag 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.
openHAB 4.0.4 auf einem Pi 4 mit openHABian

adazip
Beiträge: 8
Registriert: 21. Jan 2022 15:07
Answers: 0

Re: optimieren von rules

Beitrag 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

Benutzeravatar
udo1toni
Beiträge: 13988
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: optimieren von rules

Beitrag 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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
TorstenE
Beiträge: 237
Registriert: 12. Jan 2022 18:29
Answers: 4
Wohnort: Niederstaufen

Re: optimieren von rules

Beitrag 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.
openHAB 4.0.4 auf einem Pi 4 mit openHABian

adazip
Beiträge: 8
Registriert: 21. Jan 2022 15:07
Answers: 0

Re: optimieren von rules

Beitrag 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

Antworten