[gelöst] at mit sunrise - Funktion verstehen

Begonnen von Thomas41587, 23 März 2020, 08:42:09

Vorheriges Thema - Nächstes Thema

Thomas41587

Hallo zusammen,
ich nutze ein "at" um bei Sonnenaufgang eine Variable zu setzen. Wenn der Sonnenaufgang zu frü ist, soll dennoch erst um 6 Uhr die Variable gesetzt werden.
Bisher dachte ich, der folgende Code macht genau das:
defmod Sonnenaufgang at *{sunrise(0,"06:00","09:00")} set sonne_aufgegangen ON
Aber seit die Sonne vor 6 Uhr aufgeht, wurde ich eines besseren belehrt: Das at wird nämlich jetzt gar nicht mehr ausgeführt. Man sieht aber, dass es ausgeführt werden sollte: TRIGGERTIME_FMT 2020-03-24 05:59:59.
So ganz verstehen tue ich das ganze jetzt nicht. Kann mir jemand auf die Sprünge helfen und ggf. einen Denksanstoß geben, wie das at bei Sonnenaufgang ausgeführt wird, außer der Sonnenaufgang ist vor 6 Uhr, dann soll es um 6 Uhr ausgeführt werden?

Dracolein

#1
Hier mal ein ähnliches Beispiel aus meiner laufenden Konfig:

define Nachtlicht_2OG_Aus at *{sunrise("REAL",0,"05:30","9:00")} set HUEDevice3 off
Dieses Device schaltet morgens eine Lampe aus, entsprechend dem Sonnenaufgang. Jedoch wird frühestens um 05:30h bzw. spätestens um 09:00 Uhr ausgeschaltet.
define Nachtlicht_2OG_Ein at*{sunset("REAL",0,"19:00","22:00")} set HUEDevice3 on
Hier die abendliche Einschaltung der Lampe in Abhängigkeit des Sonnenuntergangs, frühestens jedoch 19:00 Uhr, spätestens 22:00 Uhr.

Tips:
https://wiki.fhem.de/wiki/SUNRISE_EL
https://fhem.de/commandref_DE.html#SUNRISE_EL
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

Otto123

Zitat von: Thomas41587 am 23 März 2020, 08:42:09
TRIGGERTIME_FMT 2020-03-24 05:59:59.
Was mich etwas wundert, da sollte exakt TRIGGERTIME_FMT 2020-03-24 06:00:00 stehen.

Zumindest passiert das bei mir, wenn ich Deinen Code so wie er ist in die Kommandozeile werfe.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Thomas41587

Ich habe das at mal gelöscht und neu angelegt. Jetzt steht tatsächlich auch TRIGGERTIME_FMT 2020-03-24 06:00:00 da.
Schauen wir mal, was morgen früh (nicht) passiert.

Otto123

#4
Das at läuft selbstständig? Das wird nicht durch andere Aktionen mit defmod verändert?

Noch zur Erklärung
Ansonsten ist dein Code absolut richtig. Gegenüber Dracolein hast Du lediglich den ersten optionalen (nullten) Parameter weggelassen und verwendest damit die interne Voreinstellung: {sunrise("CIVIL")} == {sunrise()}

Der Sonnenaufgang muss doch schon ein paar Tage mit {sunrise("CIVIL")} vor 6:00 Uhr sein? Also bei mir aktuell 5:31 Uhr
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

Nur so eine Nebenbemerkung...

Zitat von: Thomas41587 am 23 März 2020, 08:42:09
set sonne_aufgegangen ON

Ob die Sonne aufgegangen ist, kann man auch einfach mit isday() abfragen, dabei wird die gleiche Syntax verwendet wie bei sunrise(). Man spart sich sowohl den dummy, um den Wert zu speichern, als auch das at, um den dummy zu befüllen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Zrrronggg!

Zitat von: betateilchen am 23 März 2020, 11:52:31
Nur so eine Nebenbemerkung...

Ob die Sonne aufgegangen ist, kann man auch einfach mit isday() abfragen, dabei wird die gleiche Syntax verwendet wie bei sunrise(). Man spart sich sowohl den dummy, um den Wert zu speichern, als auch das at, um den dummy zu befüllen.

Wenn es tatsächlich darum geht, ob die Sonne aufgegangen ist, stimmt das. Aber der Vorteil des Konstrukts vom Threadowner ist, dass er den "Sonnenaufgang" (und untergang) manipulieren kann, isday() bietet z.b. keinen Offset. Daher ist isday() in manchen Situation etwas zu unflexibel.

Ich setze daher mitunter genau solche Konstrukte auch ein.

FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Otto123

Zitatisday() bietet z.b. keinen Offset.
isday bietet nur keinen offset, also der erste Parameter in sekunden wird ignoriert. Der ist bei dem Beispiel hier aber sowieso null.

Alles andere geht:
{isday(0,"13:00","18:00")}liefert jetzt 1{isday(0,"15:00","18:00")}liefert jetzt 0.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

Zitat von: Zrrronggg! am 23 März 2020, 12:27:12
isday() bietet z.b. keinen Offset.

Ein Offset macht ja auch bei einer Abfrage, ob die Sonne aufgegangen ist, überhaupt keinen Sinn.
Etwas anderes ist es bei sunrise/sunset, da ist der Wert als relative Basis zu betrachten, um z.B. eine "halbe Stunde vor Sonnenaufgang" ermitteln zu können.

Zitat von: Zrrronggg! am 23 März 2020, 12:27:12
Daher ist isday() in manchen Situation etwas zu unflexibel.

Nein, isday() ist nicht unflexibel, es tut exakt das, wofür es vorgesehen ist. Nirgends habe ich behauptet, dass sich sunrise()/sunset() grundsätzlich immer durch isday() ersetzen ließe.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Thomas41587

Seit ich das at neu angelegt habe, funktioniert alles wieder wie gewünscht. Weiß auch nicht, woran das lag. Aber zeitlich hat es genau an dem Tag angefangen, als der Sonnenaufgang vor 6 Uhr war.
Die weiteren Funktionen wie isDay() sind mir tatsächlich nicht bewusst gewesen, aber mit der aktuellen Lösung bin ich (wenn sie nicht gerade aus mysteriösen Gründen streikt) sehr zufrieden. Für zukünftige Basteleien in der Richtung werde ich es natürlich im Hinterkopf behalten. Ist immer gut, wenn man Alternativen hat.
Vielen Dank an die Beteiligten für die Hilfe!

Zrrronggg!

Zitat von: betateilchen am 23 März 2020, 14:19:44

Nirgends habe ich behauptet, dass sich sunrise()/sunset() grundsätzlich immer durch isday() ersetzen ließe.

Nirgends habe ich behauptet, dass du das behauptet hast.
Ich habe nur erklärt, warum unter Umständen das Konstrukt des Threadstarters sinnvoll sein kann.

Zitat
Ein Offset macht ja auch bei einer Abfrage, ob die Sonne aufgegangen ist, überhaupt keinen Sinn.

Och mann, du jetzt wieder.

isday() bietet lauf command ref:

isday() - Tag oder Nacht

D.H. isday() ist nicht eine Abfrage, ob die Sonne aufgegangen ist, sondern ob TAG oder NACHT ist.

Und für die meisten Anwendungen (meist  irgendwas mit Licht) ist Tag = Hell, Nacht = dunkel.
Und hell/dunkel korreliert nur so lala mit "Sonnenaufgang", Dämmerungsproblemakik, Toplogie etc.etc.
Daher ist es gelegentlich sinnvoll, einen offset zu haben. isday()  bietet denn nicht, ja, daher die Hilfskonstrukte.


Das ist doch klar oder? Auch du hast doch verstanden, worum es geht, nicht wahr?
Das Thema haben einige, hier gibt's Threads dazu (da wurde unter anderem Vorgeschlagen, das Ergebnis von isday durch falsche Angaben von Längen- und Breitengrad zu verändern, das fände ich aber weniger toll)

Warum musst du das wieder mal mit "macht überhaupt keinen Sinn" abkanzeln?
Warum muss hier wieder jemand (in diesem Fall ich) niedergemacht werden?

Warum bist du eigentlich IMMER auf Strom?
Alles scheint für dich ein Angriff zu sein, alles muss bis ins Kleinste immer richtig gestellt werden. Jeder, der nicht GENAU deiner Meinung ist muss sofort korrigiert werden, jedes Wort wird auf die Goldwaage gelegt.

Das geht schon so weit, das ich wenn ich Threads mit dir drin sehe eigentlich gleich abhaue.
Hier dachte ich: Naja, ich kann's ja nochmal wagen, aber nee, wieder gleich auf dir Fresse.


Ich kapier das nicht und ich bin echt zermürbt langsam von deinem ständigen rumgehacke.

Bin echt gefrustet , ich hau jetzt erstmal ab.



FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL