FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: gestein am 03 Juni 2017, 08:50:19

Titel: [Gelöst] Sekunden von Sonnenuntergang bis fixe Uhrzeit ausrechnen?
Beitrag von: gestein am 03 Juni 2017, 08:50:19
Hallo,

bei meiner Terrassenbeleuchtung kommt es leider immer wieder vor, dass diese entweder nicht an oder ausgeht.
Aufgrund des WAF musste ich die Funkmodule und die Aktoren so anbringen, dass der Empfang nicht ganz ideal ist.
Besonders wenn die Fenster geschlossen sind und/oder es regnet, wird nicht verlässlich geschaltet.
Es passiert also, dass manchmal die LEDs die ganze Nacht durchleuchten.
Das nicht einschaltet wird, ist nicht so schlimm, aber das nicht ausgeschalten wird, geht nicht.

Als Aktoren habe ich die HM-LC-SW4-DR.
Da diese echtes "on-for-timer" können, wäre es gut das zu nutzen um zumindest verlässlich wieder abzuschalten.

Momentan habe ich 2 "at": einen um bei Sonnenuntergang einzuschalten und einen um um 23:30 auszuschalten.
Meine Idee wäre nun nur einen at-Befehl zu nehmen und dort für die Zeit zwischen Sonnenuntergang und 23:30 einzuschalten.
Aber dafür muss ich die Sekunden zwischen Sonnenuntergang und 23:30 ausrechnen.

Meine Defines dafür sieht momentan so aus:
define TW.ObstbaeumeAn at *{sunset(-1800,"16:00","21:00")} set TW.Stimmungslicht_Sw_01 on
define TW.ObstbaeumeAus at *23:30 set TW.Stimmungslicht_Sw_01 off

Könnte mir bitte jemand dabei helfen?
Wie kann ich die Sekunden zwischen Sonnenuntergang und 23:30 ausrechnen und dann zum Schalten nutzen?

Das Define würde dann ja irgendwie so ausschauen:
define TW.ObstbaeumeAn at *{X="23:30" - sunset(-1800,"16:00","21:00")} set TW.Stimmungslicht_Sw_01 on-for-timer X

Oder geht das nicht?

Danke im Voraus
liebe Grüße
Gerhard
Titel: Antw:Sekunden von Sonnenuntergang bis fixe Uhrzeit ausrechnen?
Beitrag von: Ellert am 03 Juni 2017, 09:04:26
Du müsstest die Stunden un Minuten in Sekunden umrechnen und dann von einander abziehen. Die Angabe "HH:MM" ist eine Zeichenkette, mit der man nicht rechnen kann.

"23:30" in Sekunden umrechnen geht so 23*3600+30*60
und mit sunset müsste so funktionieren sunset =~/(\d\d):(\d\d):\d\d/

also

{(sunset_abs =~/(\d\d):(\d\d):\d\d/;;23*3600+30*60-$1*3600-$2*60)}
Titel: Antw:Sekunden von Sonnenuntergang bis fixe Uhrzeit ausrechnen?
Beitrag von: KernSani am 03 Juni 2017, 09:07:01
Schau dir mal die Funktion time_str2num in der commandref (unter Perl specials) an.
PS: Code bitte immer in Codetags angeben.
Titel: Antw:Sekunden von Sonnenuntergang bis fixe Uhrzeit ausrechnen?
Beitrag von: gestein am 03 Juni 2017, 20:03:40
Hallo,

danke für die Hinweise.

Ich hätte dann mal folgendes rausgefunden:

{ my $ss=sunset(0,"16:00","23:00");; my $b=time_str2num("$year-$month-$mday $ss");; my $delta= time_str2num("$year-$month-$mday 23:30:00")-$b;; fhem "set TW.Stimmungslicht_Sw_01 on-for-timer $delta"}


Kürzer oder einfacher habe ich es nicht geschafft - scheint aber zu funktionieren.

lg, Gerhard
Titel: Sekunden von Sonnenuntergang bis fixe Uhrzeit ausrechnen?
Beitrag von: KernSani am 03 Juni 2017, 20:16:51
Die Variante von Ellert oben funktioniert nicht?

Edit: Bitte noch [Gelöst] vor das Subject des ersten Posts.
Titel: Antw:Sekunden von Sonnenuntergang bis fixe Uhrzeit ausrechnen?
Beitrag von: gestein am 03 Juni 2017, 20:43:45
Hallo,

Hatte ich erst leider nicht, da ich mich damit überhaupt nicht auskenne
Aber die obige Zeile ergibt folgendes:

syntax error at (eval 300631) line 1, at EOF
syntax error at (eval 300631) line 1, near "60)"


lg, Gerhard
Titel: Antw:[Gelöst] Sekunden von Sonnenuntergang bis fixe Uhrzeit ausrechnen?
Beitrag von: gestein am 04 Juni 2017, 17:54:58
Da ich das Macro mit einem "at" steuere, geht es auch folgendes (etwas kürzer und leichter lesbar):


define TW.ObstbaeumeAn at *{sunset(-1800,"16:00","22:00")} { my $EndTime="23:30:00";; my $delta=time_str2num("$year-$month-$mday $EndTime") - time_str2num(TimeNow());; fhem "set TW.Stimmungslicht_Sw_01 on-for-timer $delta"}


lg, Gerhard
Titel: Antw:Sekunden von Sonnenuntergang bis fixe Uhrzeit ausrechnen?
Beitrag von: Ellert am 04 Juni 2017, 19:22:22
Zitat von: gestein am 03 Juni 2017, 20:43:45
Hallo,

Hatte ich erst leider nicht, da ich mich damit überhaupt nicht auskenne
Aber die obige Zeile ergibt folgendes:

syntax error at (eval 300631) line 1, at EOF
syntax error at (eval 300631) line 1, near "60)"


lg, Gerhard
Die Berechnung muss geklammert werden, nicht der ganze Ausdruck, also sollt dies auch klappen

define TW.ObstbaeumeAn at *{sunset(-1800,"16:00","22:00")} "set TW.Stimmungslicht_Sw_01 on-for-timer {sunset_abs(-1800,"16:00","22:00") =~/(\d\d):(\d\d):\d\d/;;(23*3600+30*60-$1*3600-$2*60)}