Tag und Nacht Erkennung via Rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Tag und Nacht Erkennung via Rule

Beitrag von Cyrelian »

Hi,

hier mal eine "Rule" mit der sich relativ einfach über das Astro-Binding feststellen lässt, ob es dämmert, Tag oder Nacht ist. Als Basis diente die Rule von "staehler"

Code: Alles auswählen

rule "Tag und Nacht"
when
    Item Elevation changed or System started
then
      if (Elevation.state > 0) {
        if (IsDay.state==OFF || IsDay.state==Uninitialized || IsDay.state==Undefined) {
            logInfo("AstroRules:Tag und Nacht", "Sonnenstand > 0 Grad - Es ist Tag")
              sendCommand(IsTwilight, OFF)
              sendCommand(IsDay, ON)
              sendCommand(IsNight, OFF)          
        }
      }
	  if (Elevation.state <= 0 && Elevation.state >= -6) {
          if (IsDay.state==ON || IsDay.state==Uninitialized || IsDay.state==Undefined) {
              logInfo("AstroRules:Tag und Nacht", "Sonnenstand ist zwischen 0 und -6 Grad - Es ist Abenddämmerung")
              sendCommand(IsTwilight, ON)
              sendCommand(IsDay, OFF)
              sendCommand(IsNight, ON)
         }            
      }
      if (Elevation.state < -6) {     
        if (IsTwilight.state==ON || IsTwilight.state==Uninitialized || IsTwilight.state==Undefined) {
            logInfo("AstroRules:Tag und Nacht", "Sonnenstand < -6 Grad - Es ist Nacht")
              sendCommand(IsTwilight, OFF) 
              sendCommand(IsDay, OFF)
              sendCommand(IsNight, ON)        
          }
      }
end
Die rule setzt dann folgende Items auf ON oder OFF

Code: Alles auswählen

//	-------------  Tag und Nacht --------------------

Switch IsNight      "Nacht" <clearnight>        (gAstro)
Switch IsDay        "Tag" <clearday>            (gAstro)
Switch IsTwilight   "Dämmerung" <sun_clouds>     (gAstro)
Weiterhin braucht Ihr noch diese Items:

Code: Alles auswählen

// -------------  azimuth and elevation --------------------

Number   Azimuth        "Sonnen Azimut [%.2f °]"  <sun>   (gAstro) {astro="planet=sun, type=position, property=azimuth"}
Number   Elevation      "Sonnenhöhe [%.2f °]"  <sun> (gAstro) {astro="planet=sun, type=position, property=elevation"}
Hoffe das hilft dem einen oder anderen. Verbesserungsvorschläge sind immer gerne gesehen :D

CYA
Kretzsche

Eierheinz
Beiträge: 5
Registriert: 6. Jan 2022 15:17
Answers: 0

Re: Tag und Nacht Erkennung via Rule

Beitrag von Eierheinz »

Mahlzeit!

Ich verstehe nur Bahnhof ich habe mich in diesem Thread vorgestellt : viewtopic.php?p=42054&hilit=blockly#p42054 und knacke unter anderem auch an der Auswertung der Tageszeit.
Wie kann ich diese Rules in Openhab "verarbeiten"?
Ergibt diese Rule dann soetwas wie einen virtuellen Schalter?
Was genau muss ich damit machen?

Gruß Martin

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Tag und Nacht Erkennung via Rule

Beitrag von peter-pan »

Deine Fragen wurden zwischenzeitlich von @udo1toni in deinem Vorstellungs-Thread beantwortet.

Ohne jetzt gross die Syntax der Regel analysiert zu haben, gehe ich mal davon aus, dass es in dem Beispiel darum geht "Tag, Nacht oder Dämmerung" anzuzeigen und ggf. auch bestimmte Aktionen anzustossen.

Aber das ist ein Beispiel aus dem Jahr 2015 und so alt ist auch der Post. Deshalb solltest du evtl. einen neuen Post aufmachen, wenn du Fragen zu bestimmten Themen hast.

Herzlich willkommen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: Tag und Nacht Erkennung via Rule

Beitrag von udo1toni »

Vergiss das obige bitte ganz schnell. Der Thread ist von 2015 und bezieht sich auf openHAB1 (!)

Du brauchst: das Astro Binding.

Unter der Voraussetzung, dass Du in openHAB den Standort konfiguriert hast, bekommst Du automatisch in die Inbox ein Thing astro:sun:local geliefert, welches die Sonnendaten für Deinen Standort enthält.
Nun brauchst Du die von Dir gewünschten "Zeitpunkte" als Event Channel. Gewöhnlich wird man dafür z.B. die bürgerliche Dämmerung für Sonnenauf- und -untergang nutzen.

Weiterhin brauchst Du ein Item, z.B. ein Switch Item Nacht.

Und dann noch zwei Rules, die dieses Switch Item schalten:

Code: Alles auswählen

rule "Nacht aktivieren"
when
    Channel "astro:sun:local:civilDusk#event" triggered START
then
    Nacht.postUpdate(ON)
end

rule "Nacht deaktivieren"
when
    Channel "astro:sun:local:civilDawn#event" triggered START
then
    Nacht.postUpdate(OFF)
end
START ist dabei der Zeitpunkt, zu dem das Ereignis beginnt. da die Sonne kein Punkt ist, sondern (zweidimensional betrachtet) einen kreisförmige Scheibe, gibt es einen Moment, zu dem sie beginnt, die konfigurierte Höhenlinie zu berühren, und ebenso einen Moment, zu dem sei damit aufhört.

Sollten die Zeitpunkte nicht passen, so kannst Du in den entsprechenden Channels einen Offset, sowie unteren und oberen Grenzwert festlegen. Achtung: es handelt sich um die Range Event Channel, nicht um die DateTime Channel!
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
HiG
Beiträge: 136
Registriert: 16. Jun 2021 13:39
Answers: 0

Re: Tag und Nacht Erkennung via Rule

Beitrag von HiG »

Darf ich da auch mal was frägen?

Der Trigger wird ja morgen oder abends gezündet. Das heißt... wenn ich zwischendurch den Service neustarte..ist das "Nacht" wieder NULL/OFF?? Also persitieren?

Eierheinz
Beiträge: 5
Registriert: 6. Jan 2022 15:17
Answers: 0

Re: Tag und Nacht Erkennung via Rule

Beitrag von Eierheinz »

Danke für Eure wetvolle Hilfe vor allem dir udo1toni,

ich muss mir wohl eingestehen das ich einige Defizite aufarbeiten muss.

Ich habe folgendes gemacht:
-Unter "Items" habe ich mir (blaus Pluszeichen) ein neues Item angelegt, es trägt den Namen "Nacht" und ist ein Switch

-Dann habe ich unter dem Reiter Scripts ein neues DSL-Skript angelegt mit dem Namen "Nacht" dorthinein habe ich deine zwei Rules eingefügt und gespeichert

-das Astro-Binding installiert

Von der Idee verstehe ich was poassieren soll, deine Rule soll nun den virtuellen Schalter auf ON oder OFF setzen, aber wie erfolgt die VErknüpfung?
HAbe ich das Switch Item falsch angelegt?

Der virtuelle Schalter bewegt sivh nivht, er müsste ja jetzt auf ON stehen.

Mit sportlichen Grüßen
Martin

Benutzeravatar
HiG
Beiträge: 136
Registriert: 16. Jun 2021 13:39
Answers: 0

Re: Tag und Nacht Erkennung via Rule

Beitrag von HiG »

Eierheinz hat geschrieben: 27. Jan 2022 21:44 er müsste ja jetzt auf ON stehen.
Aber doch eigentlich nur...wenn die Skripte (Korrektheit vorausgesetzt) schon (bei mir um 16:57) da gewesen wären. Der Trigger zündet doch nur genau dann, wenn das Ereignis "Sonnenuntergang" eintritt. Ist die Rule zu dem Zeitpunkt nicht vorhanden/aktiv...dann passiert nüscht #glaub

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

Re: Tag und Nacht Erkennung via Rule

Beitrag von udo1toni »

Eierheinz hat geschrieben: 27. Jan 2022 21:44 -Dann habe ich unter dem Reiter Scripts ein neues DSL-Skript angelegt mit dem Namen "Nacht" dorthinein habe ich deine zwei Rules eingefügt und gespeichert
Das ist der Fehler.
Wenn Du über die UI Rules anlegst, dann kannst Du dort DSL alsSprache verwenden. Dies befieht sichaber ausschließlich auf den then-Teil der Rule. der when-Teil muss zwingend in der UI ausgewählt werden. Damit ist auch klar, dass es nicht reicht, eine Rule anzulegen und dort einfach beide Rules einzufügen, Du musst zwei Rules anlegen und jeweils den passenden Code einfügen.
Da es in diesem Fall ja nur um das Schalten eines Items geht, musst Du nicht zwingend die DSL dafür verwenden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

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

Re: Tag und Nacht Erkennung via Rule

Beitrag von udo1toni »

HiG hat geschrieben: 27. Jan 2022 22:30
Eierheinz hat geschrieben: 27. Jan 2022 21:44 er müsste ja jetzt auf ON stehen.
Aber doch eigentlich nur...wenn die Skripte (Korrektheit vorausgesetzt) schon (bei mir um 16:57) da gewesen wären. Der Trigger zündet doch nur genau dann, wenn das Ereignis "Sonnenuntergang" eintritt. Ist die Rule zu dem Zeitpunkt nicht vorhanden/aktiv...dann passiert nüscht #glaub
Ja, das ist soweit korrekt. openHAB ist ein Serversystem, welches grundsätzlich dauerhaft läuft. Entsprechend sind die Regeln auch darauf ausgelegt, dass openHAB dauerhaft läuft.
Selbstverständlich kann man das Item auch anhand des Höhenwinkels umschalten. Aber das bedeutet dann, dass die entsprechende Rule genau zweimal am Tag notwendigerweise läuft, die übrige Zeit aber nutzlos gestartet wird. Man könnte das Astro Thing so konfigurieren, dass es nur alle 24 Stunden seine Werte neu berechnet, das sollte ausreichen, um die Trigger dennoch pünktlich auszulösen (bei der Berechnung der Sonnenstände wird je Channel ein Scheduler angelegt, der zur korrekten Zeit auslöst).
Alternative, die nach Höhenwinkel geht:

Code: Alles auswählen

rule "Nacht nach Höhenwinkel"
when
    Item Elevation changed
then
    val nWinkel = if(Elevation.state instanceof Number) (Elevation.state as Number).floatValue else 0
    if(nWinkel < -3 && Nacht.state != ON)
        Nacht.postUpdate(ON)
    else if(nWinkel >= -3 && Nacht.state != OFF)
        Nacht.postUpdate(OFF)
end
Zunächst wird der Höhenwinkel aus dem Item Elevation ausgelesen, falls der Wert eine zahl ist, wird er in die lokalen Konstante übernommen, und zwar als Fließkommazahl (ohne Einheiten).
Anschließend wird geprüft, ob der Wert kleiner -3 ist und das Item Nacht evtl. nicht auf ON steht. Treffen beide Bedingungen zu, so wird Nacht auf ON gesetzt. Andernfalls wird geprüft, ob der Wert größer oder gleich -3 ist und das Item Nacht nicht auf OFF steht. Treffen beide Bedingungen zu, so wird Nacht auf OFF gesetzt.

Unter der Voraussetzung, dass das Number Item Elevation mit dem Channel astro:sun:local:elevation verlinkt ist, wird Nacht bei jedem Update des Höhenwinkels berechnet und gegebenenfalls gesetzt oder gelöscht. Diese Variante ist abhängig von der Zykluszeit des astro Bindings, Grenzwerte und Offsets lassen sich einbauen, aber das ist mit Aufwand verbunden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Eierheinz
Beiträge: 5
Registriert: 6. Jan 2022 15:17
Answers: 0

Re: Tag und Nacht Erkennung via Rule

Beitrag von Eierheinz »

Danke udo1toni,

mit deiner fantastischen Erklärung habe ich es geschafft, nun schaltet mein virtueller Schalter zuverlässig.
Jetzt kann ich den Schalter wunderbar in meine Blocklys integrieren.

Danke,Martin

Antworten