Hauptmenü

Fragen zu AT

Begonnen von Init, 19 Mai 2013, 16:44:44

Vorheriges Thema - Nächstes Thema

Init

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


MisterEltako

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.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

Init

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

MisterEltako

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
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

Init

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

MisterEltako

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
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

Init

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

MisterEltako

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
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

Init

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

MisterEltako


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
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

Init

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

abc2006

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 ... ;-)
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Init

Hi Stephan,

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

VG
Marc

abc2006

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

FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Init

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