WakeUp anhand Kalendereintrag

Begonnen von blixx, 28 August 2015, 11:32:36

Vorheriges Thema - Nächstes Thema

blixx

Hallo zusammen,
ich habe berufsbedingt einen relativ unregelmäßigen Tagesryhtmus und muss darum meinen Wecker immer mal wieder neu stellen.
Eigentlich kein Drama - wäre da nur nicht das FHEM-Wakeup-Light.
Das ist, insbesondere in der dunklen Jahreszeit, echt eine tolle Sache, braucht aber auch immer die jeweilige "Aufstehzeit".
Nun habe ich gestern zum ersten Mal einen Kalender in FHEM integriert (Müllabfuhrtermine - hier im Forum beschrieben).
Meinen persönlichen Kalender habe ich nun auch angebunden.

Nun meine Idee: Ich würde gern, meine jeweiligen Aufstehzeiten in meinen Kalender eintragen. FHEM erkennt ein Signalwort im Kalender ("WakeUP" oder so) und setzt entsprechend der Startzeit des Termins einen AT-Befehl (WakeUP-Trigger) um zur gegebenen Zeit die "WakeUp-Procedure"(Notify) zu triggern.

Meine Frage: Wie könnte man das wohl am Besten hinbekommen? Ich hätte jetzt daran gedacht Abends zeitgesteuert eine entsprechende Abfrage zu starten, die ggf. den AT Befehl setzt und dann eine Whatsapp-Nachricht zur Bestätigung schickt.
Ich habe nur kein Plan, wie dieses Calender-Modul entsprechend zu benutzen ist. Bin da noch nicht tief genug drin^^


Viele Grüße

Bernd


Kuzl

Hallo Bernd,

was benützt du denn als Wecker? einen echten Wecker oder dein Handy?

Falls du das Handy nutzt, kannst du dir einfach die nächste Weckzeit an FHEM senden und FHEM stellt dann das Wakeup-Light.

Gruß,
Kuzl

blixx

#2
Hey Kuzl,

ich nehme mein Handy. Aber mein iPhone unterstützt das Senden meiner Weckzeit an FHEM nicht. Zumindest nicht meines Wissens.
Soooo ich hab nach langem Basteln mal etwas halbwegs Schönes hinbekommen. Einiges habe ich beim "Müllkalender" abschauen können.

Vielleicht kann es jemand mit mehr Plan aufhübschen. Ich musste ein paar Umwege gehen, weil ich die Syntax wohl nicht ganz verstanden habe:

Folgendes muss in die 99myUtils:
(Mein Kalender heißt "MeinCal" und ich suche nach dem Wort "Aufstehen")

sub
Weckzeit ($)
{
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids=split(/;/,$Ereignisteil1); #id des Kalendereintrags
my $t = time;
my $Aufwachen = ''; #Aufweckzeit

foreach my $uid (@uids) {
   my $Kalendertext = fhem("get MeinCal summary $uid");
   if ($Kalendertext =~ /Aufwachen/)
   {
      my $eventDate = KalenderDatumZeit('MeinCal', $uid);
      if ($Aufwachen eq '' || ($eventDate < $Aufwachen && $eventDate > $t))
      {
         $Aufwachen = $eventDate;

         { fhem("setreading Zeiten Aufwachzeit $eventDate"); }
      }
   };
}
}






sub
KalenderDatumZeit($$)
{
my ($KalenderName, $KalenderUid) = @_;
my $dt = fhem("get $KalenderName start $KalenderUid");
my @SplitDt = split(/ /,$dt);
my @SplitDate = split(/\./,$SplitDt[0]);
my @SplitTi = split(/ /,$dt);
my @SplitTime = split(/\:/,@SplitTi[1]);
my $ret = timelocal(@SplitTime[2],@SplitTime[1],@SplitTime[0],$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);

return $ret;
}



Folgendes kommt dann in die fhem.cfg:

define GetCal notify GetCal {system("sh /opt/fhem/wgetscript.sh")}
define CalUpdate at +*00:05:00 trigger GetCal;;sleep 5;;set MeinCal reload
define MeinCal Calendar ical file /opt/fhem/cache/calendar.ics 3600
define KalenderView CALVIEW MeinCal 2
attr KalenderView modes all

---

define Zeiten dummy
attr Zeiten event-on-change-reading Aufwachzeit
define notifyAufstehtermine notify MeinCal:modeUpcoming.* { Weckzeit("$EVENT") }

define unixtime dummy
define NeueWeckZeit at *21:00:00 { fhem("trigger defdoif;;set unixtime ".ReadingsVal("Zeiten", "Aufwachzeit", "")) }
define defdoif notify defdoif {fhem("sleep 5;;delete AufwachenDOIF;;define AufwachenDOIF DOIF ([+([unixtime]-time())]) (trigger doiftest);;sleep 1;;trigger neueWeckZeitWA;;save")}
define doiftest notify doiftest set WlightSchrank hsv 0,0,100;;delete AufwachenDOIF


define neueWeckZeitWA notify neueWeckZeitWA {\
my $Weckzeit= ReadingsVal("AufwachenDOIF","timer_1_c1","null");;\
fhem("set WhatsApp send 49160XXXXXXX Neue Weckzeit $Weckzeit");;}