FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Kalendermodule => Thema gestartet von: NoMercy am 13 Januar 2017, 10:24:41

Titel: WeekDaytimer und SetParam???
Beitrag von: NoMercy am 13 Januar 2017, 10:24:41
Hallo Zusammen,

ich habe eine Frage zum Weekdaytimer und dem Einsatz von SetParam gem. CommandRef.

Ich nutzte einige Weekday-Timer für die Steuerung von Lampen für eine Anwesenheitssimulation. Hierbei "enable" ich die entsprechenden Weekday-Timer wenn ich den Homestatus auf "Abwesend" setze und "disable" die WeekdayTimer, wenn ich den Homestatus auf "Anwesend" setze. Das funktioniert soweit auch ganz gut.

Mein Problem ist eigentlich recht einfach, aber schwer zu beschreiben.... Aber ich versuche es mal mit einem Beispiel:
- Wenn ich nicht zu Hause wäre würde ein WeekDayTimer ein Deckenlicht im Büro um 06:30 morgens anschalten und um 08:30 wieder ausschalten. Das funzt auch
- Wenn ich zu Hause bin (WeekDayTimer disabled) schaltet die Lampe um 6:30 nicht an (gut so). Wenn ich das Haus jetzt um 7:30 verlasse (WeekDayTimer wird enabled) bleibt die Lampe aus, da der Einschaltvorgang ja stattgefunden hat, als der Timer disabled war
- Ich möchte aber, dass beim enablen des Timers die Lampe den Schaltzustand hat, die sie gehabt hätte, wenn der Timer gelaufen wäre....

Wenn ich die CommandRef richtig verstanden habe, müsste ich dies genau mit {WeekdayTimer_SetParam("WD-Device")} erreichen können, oder?

Ich habe mir also folgenden Code gebastelt der nicht funzt:

define DI_WDT_OG_Buero_LichtDecke_Schalter DOIF ([WDT_OG_Buero_LichtDecke_Schalter:disabled] eq "0") \
({WeekdayTimer_SetParam("WDT_OG_Buero_LichtDecke_Schalter")})
attr DI_WDT_OG_Buero_LichtDecke_Schalter do always
attr DI_WDT_OG_Buero_LichtDecke_Schalter room Buero,Zeitprogramme

wobei hier "WDT_OG_Buero_LichtDecke_Schalter" der definierte WeekDayTimer mit den Steuerzeiten für die Lampe ist.

Fehlermeldung des DOIF ist: {WeekdayTimer_SetParam("WDT_OG_Buero_LichtDecke_Schalter")}: Undefined subroutine &main::WeekdayTimer_SetParam called at (eval 327516) line 1.

Irgendwas habe ich noch nicht verstanden...  :'(

Hat jemand eine Idee, wie ich mein Problem gelöst bekomme bzw. was ich falsch mache?

Danke und Gruß
Titel: Antw:WeekDaytimer und SetParam???
Beitrag von: Dietmar63 am 13 Januar 2017, 13:14:45
WeekdayTimer_SetParm("WD-Device")}[/
Ich hoffe, ich habe mich in der Doku nicht verschreiben.-

Eventuell benlötigst du noch  switchInThePast
Titel: Antw:WeekDaytimer und SetParam???
Beitrag von: NoMercy am 13 Januar 2017, 13:59:10
Nein. Du hast Dich nicht verschrieben... Ich kann nur nicht richtig lesen  :-[

Mit "Parm" statt "Param" gibt es keine Fehlermeldung mehr. Und danke für den Tip mit switchInThePast. Jetzt funzt es  :) 
Titel: Antw:WeekDaytimer und SetParam???
Beitrag von: Homalix99 am 26 Dezember 2017, 19:07:36
Hallo,
ich nutze den WDT seit langem zur Steuerung meiner Rolladen über die Sunset()/suntrise() Funktionen. Nun habe ich Lichtsensoren installiert und möchte die Rollos u. a. auch lichtabhängig steuern.
Zum Beispiel Rolloschließung: Dazu setze ich morgens die WDT mit der spätest möglichen Schließzeit (hier Zivile Dämmerung). Ab Sonnenuntergang überwacht nun eine SUB die Helligkeit und wenn diese einen bestimmten Wert unterschritten hat, wird in einem Dummy diese Zeit + 1 Minute hinzuaddiert, gesetzt. Die WDT sollen nun eine Funktion aufrufen um diese Zeit für die Schließung zu erhalten.
Mit WeekdayTimer_SetParm, so dachte ich, wird der WDT aktualisiert. Diese geschieht aber nur, wenn ich bei den WDT z. B. ein Attibut ändere. Die WDT sollen aber mit WeekdayTimer_SetParm die neuen Werte einlesen und verwenden. Ich habe auch mit dem Attribut SwitchInThePast = 1 gesetzt, versucht, aber es funktioniert so leider nicht.
WDT-Def.
Rollo_1.OG_Ost_l {Rollo_down()}|down !$we|{Rollo_up_WT()}|up $we|{Rollo_up_WE()}|up {
fhem("set Rollo_AZ_l %");
fhem("set Rollo_AZ_m %");
fhem("set Rollo_AZ_r %");
}

SUB: Rollo Down:
sub Rollo_down(){ # wird von den WDT fuer die Auto-Rollosteuerung aufgerufen
my $closetime = Value("Schliesszeit");
return($closetime);
}

DUMMY Schliesszeit
# enthält die Uhrzeit im Format hh:mm:ss

notify zum setzen des WeekdayTimer_SetParm:
(Oeffnungszeit_.*|Schliesszeit):state:.* {
WeekdayTimer_SetParm("AutoJalousie_AZ");
}

Soll das Update der WDT so funktionieren, oder besser gesagt, wie bekomme ich das hin?
Danke im voraus.
VG
Alex