mj1234 hat geschrieben: ↑21. Mär 2022 20:52
Mache ich einen Denkfehler?
Ja
Grundsätzlich liefert Astro viele verschiedene Daten, die Zeitpunkte eines Ereignisses z.B. über einen DateTime Channel. Dieser Channel wird einmal täglich einen neuen Wert erhalten (mutmaßlich kurz nach Mitternacht) und ansonsten allenfalls erneuert (Update), aber mit identischem Wert. Alle angegebenen Zeitpunkt, so sie sich auf täglich wiederkehrende Ereignisse beziehen, beziehen sich immer auf das aktuelle Datum, also z.B. Sonnenaufgang ist der vergangene von heute, nicht der kommende von morgen.
Diese Channel sind nur interessant, um den Zeitpunkt anzuzeigen ("Wann ist heute Sonnenuntergang?").
Die Range Event Channel hingegen senden einen Impuls, wenn der entsprechende Zeitpunkt erreicht ist. Da jedes Event einen Beginn und ein Ende hat, werden jeweils zwei Impulse gesendet, eben einmal START und einmal END. Dabei beziehen sich diese Zeitpunkte auf den Beginn bzw. das Ende des Transits der Sonne. Also z.B. bürgerliche Dämmerung: definiert als Transit der -6° Höhenlinie. Da die Sonne einen Durchmesser hat, gibt es den Zeitpunkt, bei dem sie beginnt, die Höhenlinie zu berühren, und einen Zeitpunkt, bei dem diese Berührung endet. Das Ereignis gibt es zweimal, einmal für Wechsel Tag->Nacht (Dusk), einmal für Wechsel Nacht->Tag (Dawn). Da wir hier aber ausschließlich von Impulsen (also Events) sprechen, hätte ein gekoppeltes Switch Item immer den Zustand OFF, es bekäme nur kurz den Impuls ON, hätte aber weiter den Zustand OFF. Man könnte dann diesen Impuls entweder mit received update oder received command auswerten, changed hingegen könnte man nicht nutzen. Um hier von vornherein diese Besonderheit zu kennzeichnen, kann man diese Channel erst gar nicht verlinken, sondern muss stattdessen direkt den Channel als Trigger verwenden.
peter-pan hat das ja schon in seinem Beispiel gezeigt. Das geht ohne Einschränkungen auch über die UI Rules.
Weiter kann man in jedem der Channel getrennt Unter- und Obergrenze sowie ein Offset definieren. So kann man z.B. die Rollläden bei Sonnenaufgang fahren lassen, aber frühestens um 6 Uhr, spätestens um 8:30 Uhr, und vielleicht doch lieber schon 10 Minuten vor Sonnenaufgang. ergibt dann earliest=6:00, latest=8:30,offset=-10.
Diese Werte kann man
pro Channel einstellen und muss das auch tun. Stellt man also z.B. für den Event Range Channel Sonnenuntergang ein Offset ein, so wird exakt dieser Trigger entsprechend verfrüht (oder verspätet) auftauchen (Channel astro:sun:local:set triggered START), die Anzeige der Uhrzeit des Sonnenuntergangs wird aber nicht beeinflusst. Eventuell möchte man ja dennoch den "echten" Zeitpunkt angezeigt bekommen, auch wenn man den Trigger verschoben nutzt.
Da Astro vier verschiedene Zeitpunkte anbietet (Sonnenauf-/-untergang, Bürgerliche/Nautische/Astronomische Dämmerung mit Dusk/Dawn) kann man hervorragend sonnenstandsabhängig steuern. Sollte das dann immer noch nicht ausreichen

kann man auch Azimut und Elevation direkt auswerten (die aber über Items).
Alle Werte werden abhängig von der gewählten Refreshrate neu berechnet, was sich aber nur bei wenigen Channels, wie z.B. Azimut und Elevation, direkt auswirkt, die meisten anderen Werte ändern sich nur einmal täglich (Schattenlängenverhältnis, Strahlungsintensität, Zeit bis zur nächsten Jahreszeit sowie die Sonnenphase ändern sich vermutlich ebenfalls bei jeder neuen Berechnung oder zumindest mehrfach täglich).