Hallo,
gibt es zufällig, ähnlich wie bei "holiday2we" bereits eine Möglichkeit durch ein ganztägiges Kalenderevent mit z.B. dem Titel "Urlaub" einen Tag (oder mehrere Tage) in ein "Wochenende" $we umzuprogrammieren. Dies würde den weiteren Code meiner Meinung nach vereinfachen, da man nur noch die Variable $we abfragen müsste und zudem durch eine Weiterleitung des Urlaubseintrages im Büro an den Hauskalender sofort die Wohnung "umprogrammiert" hätte.
Vielen Dank im Voraus
Andreas
Zitat von: wfas303 schrieb am Mo, 28 Januar 2013 22:16gibt es zufällig, ähnlich wie bei "holiday2we" bereits eine Möglichkeit durch ein ganztägiges Kalenderevent mit z.B. dem Titel "Urlaub" einen Tag (oder mehrere Tage) in ein "Wochenende" $we umzuprogrammieren. Dies würde den weiteren Code meiner Meinung nach vereinfachen, da man nur noch die Variable $we abfragen müsste und zudem durch eine Weiterleitung des Urlaubseintrages im Büro an den Hauskalender sofort die Wohnung "umprogrammiert" hätte.
Hallo,
gibt es nicht, auch nicht zufällig :-)
Du kannst mit notify auf den Kalendereintrag reagieren und abhängig vom Modus und von $we einen dummy auf on oder off setzen.
Viele Grüße
Boris
Danke Boris,
dann muss ich wohl einen Dummy Urlaub erzeugen den ich abhaengig vom Kalenderevent On oder Off schalte.
Auch kein Beinbruch ...
Danke
Andreas
Guck dir mal meinen Artikel Wochenende, Feiertage und Schulferien (//www.fhemwiki.de/wiki/Wochenende,_Feiertage_und_Schulferien) im Wiki an - dort mache ich das mit den Schulferien. Du müsstest nur den eigenen Kalender einlesen und natürlich nicht auf "schulferien", sondern "Urlaub" parsen.
Danke. Mein System liest jetzt ebenfalls, wie in obigem Beispiel, das "Subject" aus dem Kalendereintrag aus und falls dieses "Urlaub" lautet, wird ein Dummy gesetzt.
Andreas
Hallo Andreas, Hallo kossmann
nach einigem probieren und dank kossmann seinem Wiki-Eintrag habe ich es hinbekommen, dass mein Dummy gesetzt wird.
Aber das Notify wird sehr oft ausgeführt!
Hier der Auszug aus dem Logfile, nachdem ich den Kalender geupdated habe. Die ganze Zeile erscheint 13 mal im Log.
2013.03.01 16:52:05 3: get Urlaub_Christian summary modeStart : Urlaubtest
Und mein Notify schaut so aus:
define Urlaub_Christian_notify notify Urlaub_Christian {my $Urlaubtext = \
fhem("get Urlaub_Christian summary modeStart");;\
if ($Urlaubtext =~ m"Urlaub") {\
fhem("setstate Urlaub_dummy 1")\
}\
else {\
fhem("setstate Urlaub_dummy 0")\
}\
}
Hat jemand eine Idee, wie ich das Notify dazu bekomme, dass es nur einmal ausgeführt wird?
Danke!
Christian
Hallo Christian,
ich habe letztendlich über Key-Word realisiert. Die Event leite ich mir ( dem Hauskalender ) aus der Arbeit heraus weiter.
define Business_Kalender notify Standby:modeStarted.*00000.* {\
my $uid= "%EVTPART1";;\
my $var= fhem("get Standby location $uid");;\
my $actor= fhem("get Standby summary $uid");;\
if ( $actor eq "Urlaub") {\
fhem("set AndreasatVacation on");;\
if ( $actor eq "Reise") {\
fhem("set AndreasonTheRoad on");;\
}\
}
Die Dummy's AndreasatVacation und AndreasonTheRoad benutze ich als "Schalter" für die weiteren Abfragen.
Andreas
Hallo,
habe die Geschichte mit dem Urlaub nun geändert in:
define Urlaub_Christian_notify notify Urlaub_Christian:modeStarted.* {\
my $uid= "%EVTPART1";;\
my $Urlaubtext = fhem("get Urlaub_Christian summary $uid");;\
if ($Urlaubtext =~ m"Urlaub") {\
fhem("setstate Urlaub_dummy 1")\
}\
else {\
fhem("setstate Urlaub_dummy 0")\
}\
}
Nur warum wird das Notify bei einem Update des Kalenders getriggert? Es ist kein Event im Kalender im modeStarted!
Demzufolge taucht natürlich dann im Log auf:
2013.03.07 17:20:33 3: get Urlaub_Christian summary modeStarted: EVTPART1 : argument is missing
Christian
Falls du einen Kalender bei Google hast, sollte der erste Teil so aussehen :
define Urlaub_Christian_notify notify Urlaub_Christian:modeStarted.*googlecom.*
und nicht
define Urlaub_Christian_notify notify Urlaub_Christian:modeStarted.*
Andreas
Besten Dank Andreas,
so funktioniert das Notify nun.
Urlaub_Christian:modeStarted.*googlecom.* {
my $uid= "%EVTPART1";
my $Urlaubtext = fhem("get Urlaub_Christian summary $uid");
if ($Urlaubtext =~ m"Urlaub") {
fhem("setstate Urlaub_dummy 1")
}
}
Das mit dem googlecom war mir nicht bewusst. Ich habe mich an dem Beispiel im Commandref und von dir und kossmann lang gehangelt.
Nun muss ich das Gleiche ja nur für den Status ended machen, damit der oder die Dummys zurück gesetzt werden.
Christian
Falls du dir den ended-Status sparen möchtest, önntest den Status nachts um 23:55 Uhr ja immer auf 0 setzen, das Notify setzt dann 5 Minuten später den korrekten Wert - falls du mit den paar Minuten eventueller Fehl-Information auskommst. Besser wäre es aber sicher, wenn man das Ende korrekt abfängt. Dann könnte man damit auch Minuten-genau Events steuern, z.B. automatisches Bewässern im Garten...
... und dann wäre ich (und die Comunity) dir noch dankbar, wenn du das hier auch noch veröffentlichst, so dass jemand (du, ich, sonst wer) den Artikel im Wiki noch ausbauen oder ggf. einen neuen erstellen kann.
das versteht sich von selbst.
Sobald ich es funktionsfähig habe, werde ich es natürlich bekannt machen.
Ich habe ja schließlich auch von deinem Eintrag und der Hilfe hier im Forum profitiert.
Christian
so und da ich nun weiter am Basteln bin, tut sich folgendes Problem auf:
Wenn zwei Termine gleichzeitig starten, werden zwei Uids getrennt mit Semikolon zurückgegeben. Das Problem wurde hier https://groups.google.com/forum/?fromgroups=#!topic/fhem-users/l4qRTL2WYRA (//groups.google.com/forum/?fromgroups=#!topic/fhem-users/l4qRTL2WYRA) bereits angesprochen. Und das Problem scheint das Semikolon zu sein. Aber die Lösung, die calendar.pm zu ändern ist für mich keine Lösung.
Also wie bekomme ich das Split sauber zum Arbeiten mit dem Semikolon als Trennzeichen. Ich habe es mit "\073" als regex versucht als octal maskiert laut Perl Anleitungen. Und in Regex-Testern funktioniert dies auch.
Folgende Fehlermeldung erscheint bei gleichzeitig beginnenden Terminen:
2013.03.08 18:07:00 3: Kalender_Christian_Start return value: Unknown command {\
my, try help
Unknown command ecq175f7hrfcrim7ld5kkq44gkgooglecom");\
foreach, try help
Das Notify sieht wie folgt aus:
define Kalender_Christian_Start notify Kalender_Christian:modeStarted.*googlecom.* {\
my @uids=split("\073","%EVTPART1");;\
foreach my $uid (@uids) {\
my $Kalendertext = fhem("get Kalender_Christian summary $uid");;\
if ($Kalendertext =~ m"Urlaub") {\
fhem("setstate Urlaub_dummy 1")\
};;\
if ($Kalendertext =~ m"Besuch") {\
fhem("setstate Gast_dummy 1")\
};;\
};;\
}
Vielleicht kann hier jemand helfen?
Christian
durch die Änderung von Rudolf, siehe Link (http://forum.fhem.de/index.php?topic=11886.msg70240#msg70240) ist das Semikolon kein Problem mehr beim Split.
Da ich aber im Forum bereits mehrfach die Aussage herausgelesen habe, dass $Event selber zu splitten, habe ich es jetzt auch so umgesetzt.
Ich habe mir also zwei Dummys für Urlaub und für Besuch angelegt. Sinn ist folgender: Der Rolladen im Gästezimmer soll bei Besuch nicht zum Sonnenaufgang hoch fahren sondern erst später. Und im Schlafzimmer halt auch bei Urlaub später. Das Schlafzimmer fährt bereits am WE und an Feiertagen später hoch. Dies ist mit $we und holiday gelöst.
Und durch die beiden Funktionen in meiner 99myutils.pm kann ich die Dummys jetzt über Einträge im Google Kalender setzen lassen.
sub
Kalenderstart ($)
{
my ($Ereignis) = @_;
Log 3, "übergebenes Ereignis: $Ereignis";
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
Log 3, "Eventpart 1: $Ereignisteil1";
my @uids=split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
Log 3, "Eventpart1 gesplittet: $uid";
my $Kalendertext = fhem("get Kalender_Christian summary $uid");
if ($Kalendertext =~ /Urlaub/) {
fhem("set Urlaub_dummy ja");
};
if ($Kalendertext =~ /Besuch/) {
fhem("set Gast_dummy ja");
};
};
}
sub Kalenderende ($) {
my ($Ereignis) = @_;
Log 3, "übergebenes Ereignis: $Ereignis";
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
Log 3, "Eventpart 1: $Ereignisteil1";
my @uids=split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
Log 3, "Eventpart1 gesplittet: $uid";
my $Kalendertext = fhem("get Kalender_Christian summary $uid");
if ($Kalendertext =~ /Urlaub/) {
fhem("set Urlaub_dummy nein");
};
if ($Kalendertext =~ /Besuch/) {
fhem("set Gast_dummy nein");
};
};
}
Und ausgelöst werden die Funktionen über jeweils ein Notify, welches auf die Kalendereignisse reagiert:
define Kalender_Christian_Start notify Kalender_Christian:modeStarted.*googlecom.* {
Kalenderstart("$EVENT");
define Kalender_Christian_Start notify Kalender_Christian:modeEnded.*googlecom.* {
Kalenderstart("$EVENT");
}
Vielen Dank auch nochmal an das Forum und kossmann seinen Wiki Artikel http://www.fhemwiki.de/wiki/Wochenende,_Feiertage_und_Schulferien (//www.fhemwiki.de/wiki/Wochenende,_Feiertage_und_Schulferien). Dieser war der Einstieg für das ganze.
Ich habe meine Vorgehensweise als Wiki-Artikel bereitgestellt: http://www.fhemwiki.de/wiki/Google-Kalender_zur_Steuerung_von_Dummies (//www.fhemwiki.de/wiki/Google-Kalender_zur_Steuerung_von_Dummies)
crissiloop