Autor Thema: [gelöst] at mit sunrise - Funktion verstehen  (Gelesen 289 mal)

Offline Thomas41587

  • Jr. Member
  • **
  • Beiträge: 88
[gelöst] at mit sunrise - Funktion verstehen
« am: 23 März 2020, 08:42:09 »
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 ONAber 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?
« Letzte Änderung: 25 März 2020, 08:13:15 von Thomas41587 »

Offline Dracolein

  • Full Member
  • ***
  • Beiträge: 211
Antw:at mit sunrise - Funktion verstehen
« Antwort #1 am: 23 März 2020, 08:46:37 »
Hier mal ein ähnliches Beispiel aus meiner laufenden Konfig:

define Nachtlicht_2OG_Aus at *{sunrise("REAL",0,"05:30","9:00")} set HUEDevice3 offDieses 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 onHier 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
« Letzte Änderung: 23 März 2020, 08:49:56 von Dracolein »
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;

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 15015
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:at mit sunrise - Funktion verstehen
« Antwort #2 am: 23 März 2020, 10:48:20 »
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
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Thomas41587

  • Jr. Member
  • **
  • Beiträge: 88
Antw:at mit sunrise - Funktion verstehen
« Antwort #3 am: 23 März 2020, 10:57:52 »
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.

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 15015
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:at mit sunrise - Funktion verstehen
« Antwort #4 am: 23 März 2020, 11:29:55 »
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
« Letzte Änderung: 23 März 2020, 11:36:52 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16164
  • s/fhem\.cfg/configDB/g
Antw:at mit sunrise - Funktion verstehen
« Antwort #5 am: 23 März 2020, 11:52:31 »
Nur so eine Nebenbemerkung...

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.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
Zustimmung Zustimmung x 1 Liste anzeigen

Offline Zrrronggg!

  • Hero Member
  • *****
  • Beiträge: 2294
    • www.fresse.de
Antw:at mit sunrise - Funktion verstehen
« Antwort #6 am: 23 März 2020, 12:27:12 »
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

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 15015
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:at mit sunrise - Funktion verstehen
« Antwort #7 am: 23 März 2020, 13:24:49 »
Zitat
isday() 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
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16164
  • s/fhem\.cfg/configDB/g
Antw:at mit sunrise - Funktion verstehen
« Antwort #8 am: 23 März 2020, 14:19:44 »
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.

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.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.

Offline Thomas41587

  • Jr. Member
  • **
  • Beiträge: 88
Antw:at mit sunrise - Funktion verstehen
« Antwort #9 am: 25 März 2020, 08:12:59 »
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!

Offline Zrrronggg!

  • Hero Member
  • *****
  • Beiträge: 2294
    • www.fresse.de
Antw:at mit sunrise - Funktion verstehen
« Antwort #10 am: 26 März 2020, 00:56:02 »

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