Frage zur Regel: Lampe an, wenn Sonnenuntergang+Anwesend

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
DavGre
Beiträge: 84
Registriert: 11. Mär 2019 15:47
Answers: 0

Frage zur Regel: Lampe an, wenn Sonnenuntergang+Anwesend

Beitrag von DavGre »

Hallo zusammen,

ich komme bei einer Regel nicht weiter. So sieht meine rule aus:

Code: Alles auswählen

rule "Steckdose Flur oben an"
  when
    Channel "astro:sun:home:set#event" triggered START
  then
      if(Anwesenheitskontrolle.state == ON) { 
		sendCommand (S20_flur_oben, ON) 
	}
  end
 
Ich würde gerne folgende Regel realisieren:
  • S20_flur_oben soll 30 Minuten vor Sonnenuntergang und nur wenn der Anwesenheitsstatus = On ist, angehen.
    Das klappt mit der o.g. Regel auch schon wunderbar.
  • S20_flur_oben soll aber auch angehen, wenn es < 30 Minuten vor Sonnenuntergang ist und der Anwesenheitsstatus dann erst auf ON wechselt.
    Wenn ich z.B. im Winter erst um 21 Uhr nach Hause komme und den Anwesenheitsstatus auf ON setze, soll die Lampe natürlich auch noch angehen.
Wie lässt sich das am besten mit in der o.g. Regel realisieren? Ich stehe gerade total auf dem Schlauch.

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

Re: Frage zur Regel: Lampe an, wenn Sonnenuntergang+Anwesend

Beitrag von udo1toni »

Entweder Du definierst eine zweite Rule, oder Du fügst einen weiteren Trigger zu Deiner Rule hinzu. Allerdings musst Du so oder so ein Item haben, in dem die Information gespeichert ist, ob Sonnenuntergang vorbei ist. Das Item muss dann logischerweise spätestens zu Sonnenaufgang wieder OFF sein, wenn es zu Sonnenuntergang nach ON wechselt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

DavGre
Beiträge: 84
Registriert: 11. Mär 2019 15:47
Answers: 0

Re: Frage zur Regel: Lampe an, wenn Sonnenuntergang+Anwesend

Beitrag von DavGre »

Heißt also, dass ich ein Item definieren muss, welches 30 Minuten vor Sonnenuntergang auf ON switched und zum Sonnenaufgang dann auf OFF switched.
Dann könnte ich in der Regel also nicht mehr den Channel "astro:sun:home:set#event" ansprechen, sondern einfach das neu erstellte Item.

Gedankengang so halbwegs korrekt?

Meine rule könnte dann ungefähr so aussehen?

Code: Alles auswählen

Wenn Anwesenheitskontrolle received command On
	then
		if Item Sonnenuntergang is ON {
			send command Steckdose ON
(Nur mal grob niedergeschrieben. Das die Begrifflichkeiten der Regel so nicht korrekt sind ist mir bewusst)

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

Re: Frage zur Regel: Lampe an, wenn Sonnenuntergang+Anwesend

Beitrag von udo1toni »

Genau. Der event Channel ist ein Trigger, hat aber keinen Status. Deshalb kannst Du ihn leider nicht direkt in der Rule verwenden. Eine Möglichkeit ist, ein Item (z.B. Tageszeit) zu schaffen, welches mittels Rules verschiedene Zustände annimmt. Das Item kann z.B. ein String Item sein und dann NACHT, MORGEN, TAG, MITTAG, NACHMITTAG, ABEND als Werte speichern. Die Umschaltung der Werte machst Du mit einer oder mehreren Rules, über Time cron, Astro Events, whatever.

Vorteil dieses Items ist, dass Du es in allen Rules verwenden kannst (kommt ja schon häufiger vor, dass bestimmte Vorgänge tageszeitabhängig sind).

Deine "Schalt Rule" löst dann auf das Item Tageszeit aus und zusätzlich auf das zweite Item (in diesem Fall Anwesenheitskontrolle). Damit löst Die Rule in beiden Situationen aus. In der Rule prüfst Du, ob beide Items den passenden Zustand haben. Die Rule kann sich auch um das Abschalten kümmern, ist ja nur ein anderer Zustand der beiden Items.

Du kannst auch ein Number Item verwenden. Wenn Du den Zustand in der Sitemap darstellen willst, nutzt Du eine MAP. In der Rule kannst Du dann einfach auf Zahlen prüfen, evtl. auch auf Zahlenbereiche (je nachdem, wie man die Definition macht).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

DavGre
Beiträge: 84
Registriert: 11. Mär 2019 15:47
Answers: 0

Re: Frage zur Regel: Lampe an, wenn Sonnenuntergang+Anwesend

Beitrag von DavGre »

Okay. Habe ich soweit verstanden.
Scheitere aber glaube ich daran, den Status des Tageszeit_dummy richtig "auszulesen".
Folgenden Aufbau habe ich geschaffen:

Code: Alles auswählen

String          Tageszeit_dummy     "Tageszeit [MAP(tageszeit.map):%s]"  // Dummy, über den die Tageszeit definiert wird. Zunächst nur Tag u. Nacht
Dazu die entsprechende tagszeit.map

Code: Alles auswählen

1=Tag
2=Nacht
Und eine dummy.rules

Code: Alles auswählen

rule "Tag"
  when 
    Channel "astro:sun:home:rise#start" triggered START 
  then 
    Tageszeit_dummy.postUpdate(1)
  end

  rule "Nacht"
   when
    Channel "astro:sun:home:set#event" triggered START
  then 
    Tageszeit_dummy.postUpdate(2)
  end
Das Tageszeit_dummy Item funktioniert soweit auch. Es verändert, wie gewünscht, seinen Status.
Wie baue ich das denn jetzt in eine funktionierende Regel ein?

Code: Alles auswählen

  rule "Steckdose Flur oben an"
  when
    Item Tageszeit_dummy.state == 2
  then
      if(Anwesenheitskontrolle.state == ON) { 
		sendCommand (S20_flur_oben, ON) 
	}
  end
Diese Regel habe ich geschrieben. Die funktioniert aber nicht.

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

Re: Frage zur Regel: Lampe an, wenn Sonnenuntergang+Anwesend

Beitrag von udo1toni »

Ja nee, nicht so ;)

erstmal das Item. Mit dem Mapping ist es schon mal gut, aber warum verwendest Du dann ein String Item? So geht es richtig:

Code: Alles auswählen

Number Tageszeit_dummy "Tageszeit [MAP(tageszeit.map):%s]"
Das Mapping sorgt dafür, dass aus dem (als String übergebenen) Status des Items ein anderer String gebildet und im Label angezeigt wird. Das Item selbst bleibt davon unberührt und sollte vom Typ Number sein.
Die beiden Rules für die Aktualisierung des dummies sollten so passen.
Die dritte Rule muss aber den allgemeinen Rgeln einer Rule entsprechen:

Code: Alles auswählen

 rule "Steckdose Flur oben an"
when
    Item Tageszeit_dummy changed or
    Item Anwesenheitskontrolle changed
then
    if(Anwesenheitskontrolle.state != ON || !(Tageszeit_dummy.state instanceof Number)) {
        return;
    }
    if((Tageszeit_dummy.state as Number) == 2 && S20_flur_oben.state != ON)
        S20_flur_oben.sendCommand(ON) 
    } else if((Tageszeit_dummy.state as Number) == 1 && S20_flur_oben.state != OFF)
        S20_flur_oben.sendCommand(OFF) 
    }
end
Die Rule triggert, falls sich eines der beteiligten Items ändert.
Falls die Anwesenheitskontrolle nicht ON is oder Tageszeit_dummy keine gültige Zahl enthält, wird die Rule beendet.
Falls Tageszeit_dummy = 2 ist, S20_flur_oben aber nicht ON ist, wird der Befehl ON gesendet.
Falls Tageszeit_dummy = 1 ist, S20_flur_oben aber nicht OFF ist, wird der Befehl OFF gesendet.

Vorteil des Number Items ist, dass man dann auch Bereiche prüfen kann, also z.B.

Code: Alles auswählen

 if((Tageszeit_dummy.state as Number) > 1 && (Tageszeit_dummy.state as Number) <= 5) 
was natürlich verwendet werden kann, um mehrere Tageszeiten abzudecken (man muss sich natürlich vorher Gedanken über die geschickteste Anordnung machen).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

DavGre
Beiträge: 84
Registriert: 11. Mär 2019 15:47
Answers: 0

Re: Frage zur Regel: Lampe an, wenn Sonnenuntergang+Anwesend

Beitrag von DavGre »

Ich melde mich nochmal. Deine Regel hat super geklappt. Inzwischen schalte ich mehrere Lampen damit und bin absolut zufrieden.

Als nächstes möchte ich aber noch einen "Schlafmodus" einbauen. Das habe ich auch mit einem ganz simplen Switch, wie schon bei der Anwesenheitserkennung, gemacht:

Code: Alles auswählen

Switch      Nachtmodus              "Schlafmodus"
Im Prinzip soll das Licht ausgehen, sobald Anwesenheitskontrolle OFF oder Nachtmodus ON sind. Dazu habe ich folgende Regel aufgestellt:

Code: Alles auswählen

  rule "Steckdose Flur oben aus"
  when
    Item Nachtmodus received command ON or 
    Item Anwesenheitskontrolle received command OFF 
  then
    sendCommand(S20_flur_oben, OFF)
  end 
Bis hier klappt alles wunderbar.

Wie kann ich den Switch "Nachtmodus" jetzt noch bei der ON-Regel ergänzen?
Im Prinzip soll die Lampe wieder angehen, sofern der Nachtmodus auf OFF wechselt und der Tageszeit_dummy noch auf 2 steht.

Code: Alles auswählen

 rule "Steckdose Flur oben an"
when
    Item Tageszeit_dummy changed or
    Item Anwesenheitskontrolle changed
then
    if(Anwesenheitskontrolle.state != ON || !(Tageszeit_dummy.state instanceof Number)) {
        return;
    }
    if((Tageszeit_dummy.state as Number) == 2 && S20_flur_oben.state != ON)
        S20_flur_oben.sendCommand(ON) 
    } else if((Tageszeit_dummy.state as Number) == 1 && S20_flur_oben.state != OFF)
        S20_flur_oben.sendCommand(OFF) 
    }
end

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

Re: Frage zur Regel: Lampe an, wenn Sonnenuntergang+Anwesend

Beitrag von udo1toni »

Na ja, eben genauso:

Code: Alles auswählen

then
    if(Nachtmodus == ON || Anwesenheitskontrolle.state != ON || !(Tageszeit_dummy.state instanceof Number)) {
        return;
    }
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten