99_myUtils: Ausführung nur bei bestimmter Zeit vor Sonnenuntergang

Begonnen von stobor, 10 September 2023, 13:49:34

Vorheriges Thema - Nächstes Thema

stobor

Hallo,
ich möchte gern einen Steuerbefehl in der 99_myUtils nur ausführen lassen, wenn es bis zum Sonnenuntergang noch mindestens 2h sind. Wie baue ich mir denn da am besten das if-Statement zusammen?

Gedanklich ungefähr so:
if ( (UhrzeitJetzt + 2h) <= sunrise("HORIZON=-0.833") ) {
   fhem "set Arduino_Pin22 on";
   ...


Wie muss denn hier der korrekte Perl Code aussehen?

Danke für eure Hilfe
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

Otto123

#1
Hi,

kann sein das geht viel einfacher, aber ein Weg "zu Fuß":
Eine sub für die Umrechnung von Stunden Minute Sekunde in Sekunden (seit Mitternacht)
sub str2sec {
    my ($h,$m,$s) = split ':',shift;
    return $h*3600+$m*60+$s;
}
Dann liefert Dir dies die aktuelle Zeit in Sekunden seit Mitternacht
{str2sec("$hms")}und diese die Sekunden seit Mitternacht für den Sonnenuntergang an diesem Tag (merke rise > rauf, set > runter) :P
{str2sec(sunset_abs("HORIZON=-0.833"))}
Jetzt kannst Du zu einem Wert 7200 Sekunden (2h) addieren, subtrahieren (oder als Offset bei sunset eingeben) und vergleichen.

Achtung! Das funktioniert nur am gleichen Tag und nicht über die Mitternacht hinweg.
Ich habe nicht darüber nachgedacht was passiert, wenn Du diesen Vergleich die ganze Nacht hindurch ausführst. Irgendwann beisst sich das eventuell mit den 2 Stunden.

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

betateilchen

Zitat von: Otto123 am 10 September 2023, 16:00:26kann sein das geht viel einfacher

sicher...

sub test {
  return if substr(sunset_rel("HORIZON=-0.833"),0,2)<2;
  fhem "set Arduino_Pin22 on";
}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

stobor

Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

betateilchen

Man sollte in solchen Fällen überlegen, wie man die Aufgabe am besten formuliert. Anstatt

Zitatich möchte gern einen Steuerbefehl in der 99_myUtils nur ausführen lassen, wenn es bis zum Sonnenuntergang noch mindestens 2h sind

kann man ja auch sagen

Zitatich möchte gern einen Steuerbefehl in der 99_myUtils nicht ausführen lassen, wenn es bis zum Sonnenuntergang weniger als 2h sind

Dann ergibt sich die Lösung fast von selbst  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

JoWiemann

Off topic

Huh, große Schule. Negative Logik.

,,Möchtest Du nicht nach Hause gehen?"

Klassische Antwort: Nein
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

betateilchen

Zitat von: JoWiemann am 10 September 2023, 18:04:10,,Möchtest Du nicht nach Hause gehen?"

Klassische Antwort: Nein

Frage: "Ist das nicht schön?"
Antwort: "Ja. Das ist nicht schön."

 8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

cs-online

Zitat von: betateilchen am 10 September 2023, 17:51:09Man sollte in solchen Fällen überlegen, wie man die Aufgabe am besten formuliert. Anstatt

Zitatich möchte gern einen Steuerbefehl in der 99_myUtils nur ausführen lassen, wenn es bis zum Sonnenuntergang noch mindestens 2h sind

kann man ja auch sagen

Zitatich möchte gern einen Steuerbefehl in der 99_myUtils nicht ausführen lassen, wenn es bis zum Sonnenuntergang weniger als 2h sind

Dann ergibt sich die Lösung fast von selbst  8)

Das ist immer das schwierigste: Das Problem sauber beschreiben. Die Lösung des selbigen ist dann meist ganz einfach :-)
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr