FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Init am 19 Mai 2013, 16:44:44

Titel: Fragen zu AT
Beitrag von: Init am 19 Mai 2013, 16:44:44
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

Titel: Aw: Fragen zu AT
Beitrag von: MisterEltako am 19 Mai 2013, 19:32:23
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.
Titel: Aw: Fragen zu AT
Beitrag von: Init am 20 Mai 2013, 11:51:59
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
Titel: Aw: Fragen zu AT
Beitrag von: MisterEltako am 21 Mai 2013, 11:12:11
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
Titel: Aw: Fragen zu AT
Beitrag von: Init am 21 Mai 2013, 11:59:30
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
Titel: Aw: Fragen zu AT
Beitrag von: MisterEltako am 21 Mai 2013, 12:16:45
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
Titel: Aw: Fragen zu AT
Beitrag von: Init am 21 Mai 2013, 14:25:45
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
Titel: Aw: Fragen zu AT
Beitrag von: MisterEltako am 21 Mai 2013, 16:32:07
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
Titel: Aw: Fragen zu AT
Beitrag von: Init am 21 Mai 2013, 20:25:42
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
Titel: Aw: Fragen zu AT
Beitrag von: MisterEltako am 21 Mai 2013, 21:01:31

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
Titel: Aw: Fragen zu AT
Beitrag von: Init am 21 Mai 2013, 21:08:20
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
Titel: Aw: Fragen zu AT
Beitrag von: abc2006 am 23 Mai 2013, 13:25:58
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 ... ;-)
Titel: Aw: Fragen zu AT
Beitrag von: Init am 23 Mai 2013, 13:46:22
Hi Stephan,

werde das heute abend mal probieren. Hab deinen Nachtrag gerade erst gesehen

VG
Marc
Titel: Aw: Fragen zu AT
Beitrag von: abc2006 am 23 Mai 2013, 14:38:55
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

Titel: Aw: Fragen zu AT
Beitrag von: Init am 24 Mai 2013, 09:48:57
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
Titel: Aw: Fragen zu AT
Beitrag von: Init am 24 Mai 2013, 10:43:41
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?
Titel: Aw: Fragen zu AT
Beitrag von: MisterEltako am 24 Mai 2013, 14:45:50
nimm
if ($wday>=5)
statt
if ($we)
dann wird Freitag und Samstag jeweils für den nächsten Tag gesetzt.

MfG, MisterEltako