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
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)}
Schau dir mal die Funktion time_str2num in der commandref (unter Perl specials) an.
PS: Code bitte immer in Codetags angeben.
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
Die Variante von Ellert oben funktioniert nicht?
Edit: Bitte noch [Gelöst] vor das Subject des ersten Posts.
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
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
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)}