Hallo zusammen,
ich habe 2 Fragen zum AT-Modul:
1) Ich würde gerne eine AT Definition haben, welche Wochentags um 08h und am WE um 09 ausgelöst wird. Ist das möglich?
2) In einer Perl-Routine würde ich gerne abfragen, ob die aktuelle Datum/Zeit zwischen meinem AT-RUNTER und meinem AT-RAUF liegt. Also soll quasi eine Routine abgefangen werden, die nicht laufen soll, wenn AT-RUNTER gelaufen ist und noch nicht AT-RAUF. Könnte natürlich Dummys setzen, aber frage mich, ob es eine andere Möglichkeit gibt.
Viele Grüße
Marc
zu 1.:
Du musst entweder mit der "sunset Funktion arbeiten oder über kleine Umwege, zB.:
define Wochentags at *08:00:00 {\
if ($we) {\
fhem("define Wochenende at +01:00:00{mach was()}");;\
} else {machwas()}\
}
und in 99_Utils.pm
sub
machwas (){
......
}
MfG, MisterEltako.
Danke MisterEltako...
So ähnlich habe ich es bislang schon, nur mit 2 "normalen" AT-Definitionen.
Gibt es denn die Möglichkeit die TRIGGERTIME von einer AT-Definition in perl auszulesen?
VG
Marc
zu 2.:
Bitte so versuchen (ungetestet):
define Triggertime notify Rollladen:(on|off) {\
my $now = ("%%02d,%%02d",$hour,$min);;\
if (Value("Rollladen") eq "off" {\
my $TimeRauf = ReadingsTimestamp("Rollladen", state, 0);;\
}else{my $TimeRauf = $now};;\
}\
Log 3, "TimeRauf ist: $TimeRauf und aktuelle Zeit ist: $now";;\
if ($now lt $TimeRauf) {\
Log 3, ,,Routine wird ausgeführt....";;\
Log 3, ,, Hier muss deine Routine rein......";;\
}else{Log 3, "Noch kein Hochfahrkommando erfolgt Routine wird nicht ausgeführt!!!"}
}
MfG, MisterEltako
So ähnlich hatte ich es auch schon angedacht.
Hätte mir dann ein "define Nachtmodus dummy" erstellt, welcher dann im "AT runter" auf on und im "AT rauf" wieder auf off geht.
Dann hätte ich in der Beschattungssteuerung einfach auf Nachtmodus abfragen können.
Dachte aber, dass ich einfach die Triggertime von dem AT in Perl auslesen könnte, um diese dann mit der aktuellen Zeit abzugleichen.
Also quasi
if((now < runter) && (now > rauf)) {Beschattungssteuerung starten}
Aber wenn es zu aufwendig oder nicht möglich ist diese Werte abzufragen, dann werde ich wohl entweder deine noify oder die dummy Varianter nehmen.
VG und danke für die Antwort
Marc
Kannst du doch:
Musst einfach "ReadingsTimestamp("Rollladen", state, 0)" entsprechend anpassen.
in diesem Beispiel also statt "state" auf notify-Zeiteintragung in deinem Notify einstellen.
Müsttest als mal die Readings und attr deines Notify als Bild posten, sonst ist es schwierig genau zusagen wie der korrekte Name ist.
if((now < runter) aktuelle Zeit kleiner als erfolgte Runterzeit
&& (now > rauf)) und aktuelle Zeit größer als noch nicht erfolgte Raufzeit???
wie willst du denn die noch nicht erfolgte Raufzeit schon vorher wissen????
Deswegen der Code oben. Oder verstehe ich da was falsch????
MfG, MisterEltako
Hmm, genauere Definitionen könnte ich erst heute Abend schicken.
Aber wann wird denn die AT-Zeit berechnet? Um 0h oder wird diese nach Ausführung neu berechnet?
Wenn wir mal alle NOTIF-Definitionen weglassen und nur 2 AT-Definitionen haben, wobei eine mit sunset + 600 und eine mit sunrise +1000 arbeitet, dann würde ich gerne die Uhrzeit in meinem IF abfragen. Sowas wie "if (NOW between RAUF and RUNTER){Beschattungssteuerung aktiv}".
Notifs habe ich dann nur für meine Temperaturfühler.
VG
Marc
Meinst du so was?
define Testung notify Test:on {\
Log 3, "Aktuelle Zeit: ".$now;;\
my $now= sprintf("%%02d:%%02d",$hour,$min);;\
if ((sunset(-600) < $now) && (sunrise(+1000) < $now) && ($now < "24:00")) {\
Log 3, "Beschattung aktiv ...";;\
}elsif ((sunset(-600) < $now) && (sunrise(+1000) > $now) && ($now > "00:00")) {\
Log 3, "Beschattung aktiv ...";;\
}\
else {\
Log 3, "Aktuelle Zeit: ".$hm." außerhalb Sonnenuntergang: ".sunset()." und Sonnenaufgang".sunrise();;\
}\
}
MfG, MisterEltako
Hi,
genau so etwas meine ich bzw. so in der Art.
Will halt die TRIGGERTIME der AT-Definition abfragen, da meine Frau die + und - Werte von Sunset selbstständig ändern möchte. Daher darf die Definition nur an einer Stelle stehen und nicht erneut in einem Perl-Modul.
Werde jetzt noch mal versuchen die TRIGGERTIME irgendwie zu lesen. Wenn das nicht klappt, dann werde ich wohl mittels eines dummy den Nachtmodus setzen.
VG
Marc
Ich verstehe gerade nicht worauf du hinauswillst.
Wieso kann die Definition nicht mehrmals vorkommen. Musst du eben mit Variablen arbeiten.
define Test at +00:00:05 {\
my $Plus = 1000;;\
my $Minus = 600;;\
Log 3, "Sunset:".sunset()."Mit Variable: ".sunset($Plus);;\
Log 3, "Sunrise:".sunrise()."Mit Variable: ".sunrise($Minus);;\
}
MfG, MisterEltako
momentan sieht mein code so aus
define jalousieRunter at *{sunset(-660,"16:00","22:00")} {\
shadowingControl("at","all","1");;\
}
attr jalousieRunter room Jalousiesteuerung
wie könnte ich hier ein variable nutzen? Hier befinde ich mich ja noch in einer fhem.cfg
Zitat von: Init schrieb am Di, 21 Mai 2013 21:08momentan sieht mein code so aus
define jalousieRunter at *{sunset(-660,"16:00","22:00")} {\
shadowingControl("at","all","1");;\
}
attr jalousieRunter room Jalousiesteuerung
wie könnte ich hier ein variable nutzen? Hier befinde ich mich ja noch in einer fhem.cfg
um das mal mit MisterEltakos Syntax zu sagen:
define jalousieRunter at *{sunset($Plus)} {\
shadowingControl("at","all","1");;\
}
attr jalousieRunter room Jalousiesteuerung
lg
stephan
Edith: Sorry, kleine Erklärung: die geschweifen Klammern bedeuten, dass du innerhalb Perl-Syntax benutzt. Da kannst du Variablen genauso benutzen wie überall in Perl ... ;-)
Hi Stephan,
werde das heute abend mal probieren. Hab deinen Nachtrag gerade erst gesehen
VG
Marc
Hi Marc, ich habe gerade festgestellt, dass z.B. der Watchdog damit probleme hat, wenn man ihm mit PERL sagt, wann er auslösen soll.
Arbeitet dein Beispiel?
ansonsten:
define jalousieRunter at *{\
my $Plus="17";;
sunset($Plus)} {\
shadowingControl("at","all","1");;\
}
attr jalousieRunter room Jalousiesteuerung
lg
stephan
Hi Stephan,
bin leider gestern Abend zu nichts mehr gekommen.
Teste es heute Abend, da habe ich Zeit.
Würde auch so etwas funktionieren?
define jalousieDownDelay dummy
attr jalousieDownDelay room Jalousiesteuerung
define jalousieRunter at *{\
my $Delay=Value(jalousieDownDelay);;\
if ($we) {\
$Delay=$Delay-120;;\
}\
sunset($Delay)} {\
shadowingControl("at","all","1");;\
}
attr jalousieRunter room Jalousiesteuerung
Dann könnte meine Frau "jalousieDownDelay" ändern und ich könnte diesen Wert an verschiedenen Stellen nutzen.
VG
Marc
Aber vermutlich wird bei meinem Vorschlag die Auswertung von $we mit einem Tag Versatz stattfinden, da Freitagabend nach dem herunterfahren neu gerechnet wird und da ist ja noch nicht Wochenende. Oder sehe ich das falsch?
nimm
if ($wday>=5)
statt
if ($we)
dann wird Freitag und Samstag jeweils für den nächsten Tag gesetzt.
MfG, MisterEltako