Hallo Leute,
ich hatte vor lange mal nach dem Wiki Artikel einen Google Kalender angelegt und ausgewertet.
Das hat aber nie wirklich nicht richtig funktioniert.
Nun wollte ich das Thema mal wieder angehen, komme aber nicht so richtig weiter.
Also ich hab einen Extra Google Kalender für FHEM angelegt.
Hier wollte ich mit 3 Begriffen Arbeiten:
1. Urlaub
2. Besuch
3. Abwesend
Das meiste sind Einträge die den ganzen Tag angelegt sind, es können aber auch von 10-12 Uhr Termine sein.
Anhand der Betreffs des Eintrags wollte ich entsprechende Dummies schalten.
Nur keine Ahnung wie ich das am besten machen soll.
Hoffe Ihr könnt mir dabei bei helfen.
Danke und Gruß Robert
Hey,
Hast du dir die Wiki-Seiten mal angeschaut? Und das Modul Calender?
https://wiki.fhem.de/wiki/Google-Kalender_zur_Steuerung_von_Dummies
https://wiki.fhem.de/wiki/Wochenende,_Feiertage_und_Schulferien
Was genau klappt denn nicht?
Gruß
Na ja, die Wiki-Seiten funktionieren zum Teil nicht mehr, wichtiger ist eigentlich der Link auf diesen Beitrag:
https://forum.fhem.de/index.php/topic,87895.msg803439.html#msg803439
Es gibt auch einen längeren Thread zu den Änderungen bei Calendar, da habe ich bei meinen eigenen Versuchen einiges rausgezogen zu den Formaten, Variablen usw., das wichtigste bleibt aber, dass man erst über den start/end/changed-Event weitere Infos ziehen muß, um diese dann weiterzuverarbeiten.
Mal zwei Beispiele aus meiner aktuellen config (sorry für das dusselige Format):
define BW_Ferientag dummy
attr BW_Ferientag devStateIcon 1:scene_party@green:0 0:scene_office@red:1
attr BW_Ferientag group Kalender
attr BW_Ferientag icon scene_party
attr BW_Ferientag readingList state
attr BW_Ferientag room Startseite,Steuerung
attr BW_Ferientag setList state
define BW_Ferien.notify notify Familienkalender:changed:.* { \
my $UID = $EVTPART1;;\
my $cmd = $EVTPART2;;\
my $MYACTOR = fhem('get Familienkalender events format:custom="$S" filter:uid=="'.$UID.'" limit:count=1') ;;\
#my $MYVALUE = fhem('get Familienkalender events format:custom="$L" filter:uid=="'.$UID.'" limit:count=1') ;;\
#my $cmd = $MYVALUE;;\
$cmd = '1' if ($cmd eq 'start');;\
$cmd = '0' if ($cmd eq 'end');;\
fhem("set BW_Ferientag $cmd") if ($MYACTOR =~ /ferien/);;\
#fhem("set Muell Biomuell $cmd") if ($MYACTOR =~ /Bioabfall/);;\
#fhem("set Muell Restmuell $cmd") if ($MYACTOR =~ /Restmuell/);;\
}
Der auskommentierte Teil hatte auch funktioniert (Muell war ein Dummy mit Restmuell und Biomuell als setzbaren Readings), aber natürlich nicht zusammen mit dem anderen, da müßte man die Variablennamen anpassen oder das Ferientaggedöns löschen).
Zwischenzeitlich mache ich den Müllteil über eine Wandlung nach holiday (sollte das aber vermutlich wieder umstellen, da bei uns auch Leerungen am gleichen Tag stattfinden, aber dazu schaue ich eigentlich sowieso auf den Kalender bzw. weiß das). Das geht so:
define a_make_holiday at *23:30 {return undef unless($wday == 5);;\
\
#Ferienkalender\
my @holidaysraw = split(/\n/,(fhem 'get Familienkalender events format:custom="4 $T1 $T2 $S" timeFormat:"%m-%d" limit:count=10 filter:field(summary)=~".*[fF]erien.*"'));;\
my @holidays;;\
foreach (@holidaysraw) {\
unless ($_ =~ /[Ww]eihnacht/) {\
push (@holidays, $_);; \
} else { my @tokens = split (" ",$_);;\
my $lines = "4 $tokens[1] 12-31 $tokens[3]";;\
push (@holidays,$lines);;\
$lines = "4 01-01 $tokens[2] $tokens[3]";;\
unshift (@holidays,$lines);;\
}\
} \
my $today = strftime "%d.%m.%y, %H:%M", localtime(time);;\
my $idstring = "# Created by at a_make_holiday on $today";;\
unshift (@holidays, $idstring);; \
my $filename ="./FHEM/ferien.holiday";;\
FileDelete($filename);;\
FileWrite($filename,@holidays);;\
\
#Mülltonnen\
my @tonnen = split(/\n/,(fhem 'get Familienkalender events format:custom="1 $T1 $S" timeFormat:"%m-%d" series:next limit:count=4 filter:field(summary)=~".*(Bioabfall|Restmuell).*"'));;\
unshift (@tonnen, $idstring);; \
$filename ="./FHEM/muell.holiday";;\
FileDelete($filename);;\
FileWrite($filename,@tonnen);;\
}
@no_Legend:
Am besten ist es, mit den Abfragen erst mal zu experimentieren und rauszufinden, welche Variablen sich am besten eignen (siehe die fhem-Aufrufe in den Beispielen).
Wenn wir dann noch weiter helfen sollen, benötigen wir mehr "Futter" ;) (Events, Abfrageergebnisse usw.).
Zitat von: darkness am 09 Januar 2019, 09:48:25
Hey,
Hast du dir die Wiki-Seiten mal angeschaut? Und das Modul Calender?
https://wiki.fhem.de/wiki/Google-Kalender_zur_Steuerung_von_Dummies
https://wiki.fhem.de/wiki/Wochenende,_Feiertage_und_Schulferien
Was genau klappt denn nicht?
Gruß
Die Dummies haben in der Ersten Lösung nicht wirklich gut funktioniert.
Irgendwie hatten die Damals nicht zuverlässig geschalten.
Weshalb ich dann aufgehört hatte das ganze zu verfolgen.
Den Ferien kalender hab ich wie im Wiki beschrieben eingebunden.
Konnte jetzt aber nicht testen, da bei uns grade keine Ferien sind.
Dauert noch ein wenig in BaWü.
@Beta-User
Das mit einem einen Holliday Kalender oder in den Holliday Kalender selber wollte ich nicht machen.
Ich wollte mir schon die Flexibilität mit dem Kalender erhalten.
Unten mal ein list vom Kalender.
Das modeStartet ist der Heute Eintrag mit Betreff Urlaub.
Wenn man nun 2vdtkv91hschu73gkh4s3ode93googlecom im Kalender per Summery abfragt bekommt man "Urlaub" als anzeige.
Wird nun Urlaub laut Kalender aktiv, soll Dummy Cal_Rob_FHEM_urlaub auf on.
Bei Betreff "Besuch" Dummy "Cal_Rob_FHEM_besuch" und bei Betreff "Abwesend" Dummy "Cal_Rob_FHEM_abwesend".
Sollen die Termin Enden sollen auch die entsprechenden Dummies off gehen.
Die Lösung sollte sein, einfach den Betreff zu übergeben und dann je nach Betreff und Start oder Ende den Dummy entsprechend zu setzten.
Oder lieg ich da falsch?
Internals:
CFGFN /opt/fhem/FHEM/kalender.cfg
DEF ical url https://calendar.google.com/calendar/ical/%40group.calendar.google.com/private-72ce722df4ffbef97588ade197e6775d/basic.ics 7200
NAME Kalender_Rob_FHEM
NOTIFYDEV global
NR 561
NTFY_ORDER 50-Kalender_Rob_FHEM
STATE triggered
TYPE Calendar
Helper:
DBLOG:
calname:
DBLog:
TIME 1547020158.71167
VALUE FHEM
lastUpdate:
DBLog:
TIME 1547020158.71167
VALUE 2019-01-09 08:49:15
modeAlarmOrStart:
DBLog:
TIME 1547019871.41265
VALUE 2vdtkv91hschu73gkh4s3ode93googlecom
modeStart:
DBLog:
TIME 1547019871.41265
VALUE 2vdtkv91hschu73gkh4s3ode93googlecom
modeUpcoming:
DBLog:
TIME 1547019835.3993
VALUE 2vdtkv91hschu73gkh4s3ode93googlecom
nextUpdate:
DBLog:
TIME 1547020158.71167
VALUE 2019-01-09 10:49:15
nextWakeup:
DBLog:
TIME 1547020159.11286
VALUE 2019-01-09 10:49:15
state:
DBLog:
TIME 1547020159.08341
VALUE triggered
READINGS:
2016-02-06 15:39:10 all
2019-01-09 08:49:18 calname FHEM
2016-02-06 15:39:10 lastCheck 2016-02-06 15:39:10
2019-01-09 08:49:18 lastUpdate 2019-01-09 08:49:15
2016-12-26 00:00:00 modeAlarm
2019-01-09 08:44:31 modeAlarmOrStart 2vdtkv91hschu73gkh4s3ode93googlecom
2016-02-06 15:39:10 modeAlarmed
2018-03-25 04:06:37 modeChanged
2018-08-26 16:46:45 modeEnd 7psaipoktp332ib56opdv6qa3igooglecom
2018-03-25 04:06:37 modeEnded
2019-01-09 08:44:31 modeStart 2vdtkv91hschu73gkh4s3ode93googlecom
2016-12-26 00:07:51 modeStarted
2019-01-09 08:44:31 modeUpcoming
2019-01-09 08:49:18 nextUpdate 2019-01-09 10:49:15
2019-01-09 08:49:19 nextWakeup 2019-01-09 10:49:15
2019-01-09 08:49:18 state triggered
2016-02-06 15:39:10 stateChanged
2016-02-06 15:39:10 stateDeleted
2016-02-06 15:39:10 stateNew
2016-02-06 15:39:10 stateUpdated
Attributes:
room 9.20_Kalender
Hi,
ob das im Wiki aktuell wirklich geht weiß ich nicht, sieht etwas alt aus. In der englischen Doku (commandref) sind aber aktuelle Beispiele.
Ich habe mal ein Beispiel (https://heinz-otto.blogspot.com/2018/07/kalender-in-fhem-einbinden.html)gemacht, welches auf jeden der Kalender Events triggert und im Perl Teil weiter auswertet.
Das sollte eigentlich genau Dein Problem lösen.
Entweder steht im Termin (summary) der Dummy drin der es sein soll, oder man muss einen Begriff "matchen" und dann diesen im Code (über)setzen.
Man kann auch alarme im Calendar einfügen (https://heinz-otto.blogspot.com/2019/01/kalender-in-fhem-auf-bestimmte-termine.html) und damit die Aktion vor dem eigentlichen Start des Termines ausführen.
Oder man kann jeden Tag die Einträge des Folgetages abfragen und etwas vorrausschauend setzen, Beispiel Abfall.
Gruß Otto
Zitat von: Otto123 am 09 Januar 2019, 10:49:23
Hi,
ob das im Wiki aktuell wirklich geht weiß ich nicht, sieht etwas alt aus. In der englischen Doku (commandref) sind aber aktuelle Beispiele.
Ich habe mal ein Beispiel (https://heinz-otto.blogspot.com/2018/07/kalender-in-fhem-einbinden.html)gemacht, welches auf jeden der Kalender Events triggert und im Perl Teil weiter auswertet.
Das sollte eigentlich genau Dein Problem lösen.
Gruß Otto
Genau deinen Artikel habe ich eben gefunden habt.
Hab das nun so angepasst.
sub KalenderSub ($$$) {
my ($uid,$cmd,$cname) = @_;
#Logging der Paramter bei Bedarf; #Log 1, "uid: $uid | Start/End: $cmd | cal: $cname";
my $format = '"$S"';
$uid='"'.$uid.'"';
$cmd = '1' if ($cmd eq 'start');
$cmd = '0' if ($cmd eq 'end');
$calevent = 'Urlaub';
my $actor = fhem("get $cname events format:custom="$S" filter:uid==$uid limit:count=1");
# Unterschiedliche Abfragen auf ist exakt oder enthält möglich;
if ($actor =~ /$calevent/) {fhem("set Cal_Rob_FHEM_urlaub $cmd")};
$dev = 'Abwesend';
if ($actor =~ /$calevent/) {fhem("set Cal_Rob_FHEM_abwesend $cmd")};
$dev = 'Besuch';
if ($actor =~ /$calevent/) {fhem("set Cal_Rob_FHEM_besuch $cmd")};
}
Bekomme nur ein Paar Fehlermeldungen die ich mir nicht erklären kann.
Global symbol "$dev" requires explicit package name (did you forget to declare "my $dev"?) at ./FHEM/99_myUtils.pm line 28. Global symbol "$dev" requires explicit package name (did you forget to declare "my $dev"?) at ./FHEM/99_myUtils.pm line 32. Global symbol "$dev" requires explicit package name (did you forget to declare "my $dev"?) at ./FHEM/99_myUtils.pm line 32.
Vorab: ändere mal das list, wenn da Zugangsdaten drinstehen, das war nicht beabsichtigt!
Zum Rest:
So wie du es willst (Dummy an oder aus), sollte das in der Ferien-Lösung passen, ggf. nach Änderung des Formats für die Abfrage; aber der Weg ist immer UID kommt über Event, dann aus der UID einen Text machen, dann diesen weiter auswerten.
Was holiday angeht, wird die holiday-Datei automatisiert erstellt, und bei Terminen, die sich nicht ständig ändern, ist das ok. holidy hat den Vorteil, dass man es über holiday2we in global einbinden kann und dann ein Ferientag in $we landet ;) . Das ist bei mir sehr gut passend. Der Müll steht natürlich nicht in holiday2we, dafür kennt holiday tomorrow, und ich brauche keine weitere Logik, nur um festzustellen, dass heute bzw. morgen Aktion ansteht.
Zum Testen kann man übrigens auch einen Eintrag erstellen bzw. einen vorhandenenkopieren und ändern.
Zitat von: no_Legend am 09 Januar 2019, 10:51:49
Global symbol "$dev" requires explicit package name (did you forget to declare "my $dev"?) at ./FHEM/99_myUtils.pm line 28. Global symbol "$dev" requires explicit package name (did you forget to declare "my $dev"?) at ./FHEM/99_myUtils.pm line 32. Global symbol "$dev" requires explicit package name (did you forget to declare "my $dev"?) at ./FHEM/99_myUtils.pm line 32.
Naja Du musst $dev vorher mal definieren. my $dev ....
Fehlt wohl in meinem Artikel auch :-[
Edit: Aber wozu ist die Zeile bei Dir überhaupt?
$dev = 'Abwesend';
Hier dürfte auch my fehlen: $calevent = 'Urlaub';
Zitat von: Otto123 am 09 Januar 2019, 10:49:23
ob das im Wiki aktuell wirklich geht weiß ich nicht, sieht etwas alt aus.
Habe letzte Woche meine Kalender und MyUtils angepasst. Gebe aber zu, dass ich mir nicht mehr sicher bin ob ich wiki oder Forum verwendet habe...
Sorry für den "alten Kram"... :D
Zitat von: Otto123 am 09 Januar 2019, 10:57:22
Naja Du musst $dev vorher mal definieren. my $dev ....
Fehlt wohl in meinem Artikel auch :-[
Edit: Aber wozu ist die Zeile bei Dir überhaupt?
$dev = 'Abwesend';
Hier dürfte auch my fehlen: $calevent = 'Urlaub';
Ich hab den Code nun so angepasst.
sub KalenderSub ($$$) {
my ($uid,$cmd,$cname) = @_;
#Logging der Paramter bei Bedarf;
#Log 1, "uid: $uid | Start/End: $cmd | cal: $cname";
my $format = '"$S"';
$uid='"'.$uid.'"';
$cmd = '1' if ($cmd eq 'start');
$cmd = '0' if ($cmd eq 'end');
my $actor = fhem("get $cname events format:custom=$format filter:uid==$uid limit:count=1");
# Unterschiedliche Abfragen auf ist exakt oder enthält möglich;
#fhem("set $actor $cmd") if ($actor eq $dev);
my $dev = 'Urlaub';
if ($actor =~ /$dev/) {fhem("set Cal_Rob_FHEM_abwesend $cmd")};
my $dev = 'Abwesend';
if ($actor =~ /$dev/) {fhem("set Cal_Rob_FHEM_abwesend $cmd")};
my $dev = 'Besuch';
if ($actor =~ /$dev/) {fhem("set Cal_Rob_FHEM_besuch $cmd")};
}
Wenn ich es richtig verstanden habe.
Da ich mehrere Betreffs abfragen will, hab ich mehrere $dev angelegt.
Gruß Robert
Hallo Robert,
mehrfach my $dev - das tut man nicht. Einmal reicht - aber warum überhaupt?
Ich hatte das gemacht, weil ich die Variable zweimal verwendet habe.
Du übersetzt das Ganze quasi - dann mach es entweder alles mit Variablen oder alles direkt!
anstatt
my $dev = 'Urlaub';
if ($actor =~ /$dev/) ...
so if ($actor =~ /Urlaub/)...
Flexibler noch m/Urlaub/i - das würde Groß und Kleinschreibung egal machen.
Ich sehe schon, ich muss meinen Artikel noch etwas anpassen, ich habe im letzten halben Jahr auch noch ein bisschen gelernt. :D
Gruß Otto
Zitat von: Otto123 am 09 Januar 2019, 11:42:41
Hallo Robert,
mehrfach my $dev - das tut man nicht. Einmal reicht - aber warum überhaupt?
Ich hatte das gemacht, weil ich die Variable zweimal verwendet habe.
Du übersetzt das Ganze quasi - dann mach es entweder alles mit Variablen oder alles direkt!
anstatt
my $dev = 'Urlaub';
if ($actor =~ /$dev/) ...
so if ($actor =~ /Urlaub/)...
Flexibler noch m/Urlaub/i - das würde Groß und Kleinschreibung egal machen.
Ich sehe schon, ich muss meinen Artikel noch etwas anpassen, ich habe im letzten halben Jahr auch noch ein bisschen gelernt. :D
Gruß Otto
Egal wie ich es probiere,
es funktioniert nicht.
Selbst wenn ich dein Script und dein notify genau so nehme.
Keine Ahnung
Zitat von: no_Legend am 09 Januar 2019, 12:11:41
Egal wie ich es probiere,
es funktioniert nicht.
Ich liebe solche Aussagen. :o :'(
- Was sagt der Eventmonitor? Wie sehen die Events aus?
- Was sagt das Log? Gibt es Fehler?
- Was macht das notify (https://wiki.fhem.de/wiki/Notify)? Wird getriggert? Funktioniert der Ausführungsteil separat?
- Was ist wenn Du die Sub mit Parametern von der FHEM Kommandozeile aufrufst?
- Hast Du mal die Logging Funktion in der Sub aktiviert? Was steht da drin?
Gruß Otto
Zitat von: Otto123 am 09 Januar 2019, 12:21:21
Ich liebe solche Aussagen. :o :'(
- Was sagt der Eventmonitor? Wie sehen die Events aus?
- Was sagt das Log? Gibt es Fehler?
- Was macht das notify (https://wiki.fhem.de/wiki/Notify)? Wird getriggert? Funktioniert der Ausführungsteil separat?
- Was ist wenn Du die Sub mit Parametern von der FHEM Kommandozeile aufrufst?
- Hast Du mal die Logging Funktion in der Sub aktiviert? Was steht da drin?
Gruß Otto
Sorry das Notify triggerd so wie von dir beschrieben garnicht.
Erst wenn man changed auf modeStart oder modeEnd einstellt wird getriggert.
Klar kann man auch einfach das changed weg lassen, dann wird zwar getriggerd aber trotzdem geht nichts.
Log sag folgendes:
019.01.09 12:22:18 3: n_TestKalender return value: Global symbol "$EVTPART2" requires explicit package name (did you forget to declare "my $EVTPART2"?) at (eval 4869) line 1.
2019.01.09 12:22:18 1: ERROR evaluating my $SELF='n_TestKalender';my $EVTPART1='4qh3h06ot8fh22ec295lebrisqgooglecom';my $EVENT='modeStart: 4qh3h06ot8fh22ec295lebrisqgooglecom';my $EVTPART0='modeStart:';my $NAME='TestKalender';my $TYPE='Calendar';{ KalenderSub($EVTPART1,$EVTPART2,$NAME) }: Global symbol "$EVTPART2" requires explicit package name (did you forget to declare "my $EVTPART2"?) at (eval 4869) line 1.
Kannst Du mal bitte die Events, die dein Kalender wirft posten? Bei mir sind es immer 9 Stck.
Und bitte ein list n_TestKalender
Klar funktioniert das mit modestart so nicht, da entsteht kein $EVTPART2 :-X
Ich hab es jetzt noch mal auf meine Namen angepasst.
Den Kalender habe ich eben noch mal mit reload aktualisiert.
Danach das list gemacht.
Internals:
DEF Kalender_Rob_FHEM:changed:.* {KalenderSub($EVTPART1,$EVTPART2,$NAME)}
NAME Kalender_Rob_FHEM.notify
NOTIFYDEV Kalender_Rob_FHEM
NR 1088
NTFY_ORDER 50-n_TestKalender
REGEXP Kalender_Rob_FHEM:changed:.*
STATE active
TRIGGERTIME 1547032938.60267
TYPE notify
Helper:
DBLOG:
state:
DBLog:
TIME 1547033892.40111
VALUE active
READINGS:
2019-01-09 12:38:12 state active
Attributes:
room 9.20_Kalender
Und die Events? ::)
Zitat von: Otto123 am 09 Januar 2019, 12:52:50
Und die Events? ::)
Der EventMonitor gibt nach einem reload für einen frisch erzeugten Kalender eintrag folgendes aus:
2019-01-09 12:54:17 Calendar Kalender_Rob_FHEM reload
2019-01-09 12:54:17 Calendar Kalender_Rob_FHEM retrieved
2019-01-09 12:54:17 Calendar Kalender_Rob_FHEM parsed
2019-01-09 12:54:17 Calendar Kalender_Rob_FHEM calname: FHEM
2019-01-09 12:54:17 Calendar Kalender_Rob_FHEM lastUpdate: 2019-01-09 12:54:17
2019-01-09 12:54:17 Calendar Kalender_Rob_FHEM nextUpdate: 2019-01-09 14:54:17
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_bdate: 01.01.2018
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_btime: 00:00
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_daysleft: -373
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_daysleftLong: in -373 Tagen
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_summary: Urlaub
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_source: Kalender_Rob_FHEM
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_sourcecolor: white
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_location:
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_description:
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_categories:
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_edate: 15.01.2018
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_etime: 00:00
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_mode: next
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_timeshort: 00:00 - 00:00
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_weekday: 1
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_weekdayname: Montag
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_001_duration: 1209600
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_bdate: 09.01.2019
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_btime: 00:00
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_daysleft: 0
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_daysleftLong: heute
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_summary: Urlaub
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_source: Kalender_Rob_FHEM
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_sourcecolor: white
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_location:
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_description:
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_categories:
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_edate: 10.01.2019
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_etime: 00:00
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_mode: next
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_timeshort: ganztägig
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_weekday: 3
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_weekdayname: Mittwoch
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t_002_duration: ganztägig
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_bdate: heute
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_btime: 00:00
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_002_daysleft: 0
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_002_daysleftLong: heute
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_summary: Urlaub
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_source: Kalender_Rob_FHEM
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_sourcecolor: white
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_location:
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_description:
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_categories:
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_edate: 10.01.2019
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_etime: 00:00
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_mode: next
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_timeshort: ganztägig
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_weekday: 3
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_weekdayname: Mittwoch
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM today_001_duration: ganztägig
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM t: 2 td: 1 tm: 0
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM c-term: 2
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM c-tomorrow: 0
2019-01-09 12:54:18 CALVIEW Calview_Kalender_Rob_FHEM c-today: 1
2019-01-09 12:54:18 Calendar Kalender_Rob_FHEM modeAlarmOrStart: 4jiifhtf6e4i6hh50cgpd82svdgooglecom
2019-01-09 12:54:18 Calendar Kalender_Rob_FHEM modeStart: 4jiifhtf6e4i6hh50cgpd82svdgooglecom
2019-01-09 12:54:18 Calendar Kalender_Rob_FHEM triggered
2019-01-09 12:54:18 Calendar Kalender_Rob_FHEM nextWakeup: 2019-01-09 14:54:17
Edit:
Wie genau wird denn beim Calender Modul das changed Reading erzeugt?
Bei mir gibt es das Reading derzeit nicht.
Das bedeutet zwangläufig, das Notify kann ja garnet auslösen
Internals:
CFGFN /opt/fhem/FHEM/kalender.cfg
DEF ical url https://cale
NAME Kalender_Rob_FHEM
NOTIFYDEV global
NR 561
NTFY_ORDER 50-Kalender_Rob_FHEM
STATE triggered
TYPE Calendar
Helper:
DBLOG:
calname:
DBLog:
TIME 1547034857.93304
VALUE FHEM
lastUpdate:
DBLog:
TIME 1547034857.93304
VALUE 2019-01-09 12:54:17
modeAlarmOrStart:
DBLog:
TIME 1547034858.28064
VALUE 4jiifhtf6e4i6hh50cgpd82svdgooglecom
modeStart:
DBLog:
TIME 1547034858.28064
VALUE 4jiifhtf6e4i6hh50cgpd82svdgooglecom
modeUpcoming:
DBLog:
TIME 1547031621.94694
VALUE 4b00icgu4aa6fanvfnuqh458mdgooglecom
nextUpdate:
DBLog:
TIME 1547034857.93304
VALUE 2019-01-09 14:54:17
nextWakeup:
DBLog:
TIME 1547034858.31092
VALUE 2019-01-09 14:54:17
state:
DBLog:
TIME 1547034858.28064
VALUE triggered
READINGS:
2016-02-06 15:39:10 all
2019-01-09 12:54:17 calname FHEM
2016-02-06 15:39:10 lastCheck 2016-02-06 15:39:10
2019-01-09 12:54:17 lastUpdate 2019-01-09 12:54:17
2016-12-26 00:00:00 modeAlarm
2019-01-09 12:54:17 modeAlarmOrStart 4jiifhtf6e4i6hh50cgpd82svdgooglecom
2016-02-06 15:39:10 modeAlarmed
2018-03-25 04:06:37 modeChanged
2018-08-26 16:46:45 modeEnd 7psaipoktp332ib56opdv6qa3igooglecom
2018-03-25 04:06:37 modeEnded
2019-01-09 12:54:17 modeStart 4jiifhtf6e4i6hh50cgpd82svdgooglecom
2016-12-26 00:07:51 modeStarted
2019-01-09 12:00:47 modeUpcoming
2019-01-09 12:54:17 nextUpdate 2019-01-09 14:54:17
2019-01-09 12:54:18 nextWakeup 2019-01-09 14:54:17
2019-01-09 12:54:17 state triggered
2016-02-06 15:39:10 stateChanged
2016-02-06 15:39:10 stateDeleted
2016-02-06 15:39:10 stateNew
2016-02-06 15:39:10 stateUpdated
Attributes:
room 9.20_Kalender
das sind keine Termin Events :'(
Das sind doch Events wenn ein reload durchgeführt wird!
Damit kannst Du nichts anfangen. Du musst einen Termin setzen, ein reload durchführen und dann auf diesen Termin
warten.
ZitatWie genau wird denn beim Calender Modul das changed Reading erzeugt?
Bei mir gibt es das Reading derzeit nicht.
Es geht nicht um Readings es geht um Events!
Wird nicht beim einlesen des Kalenders ein Event erzeugt?
Dazu wie lange dauert es bis das Event erzeugt wird?
Wird nicht beim einlesen des Kalenders ein Event erzeugt? - Ja hast Du ja gezeigt aber um die geht es doch nicht!? ::)
Wenn Du einen Termin um 14:00 Uhr hast wird um 14:00 Uhr ein Event "start" erzeugt.
Wenn der Termin bis 15:00 Uhr geht, wird ein Event "end" um 15:00 Uhr erzeugt.
Wenn Du "irgendwann" wissen willst, was "irgendwann" im Kalender steht ist diese Vorgehensweise mit Events nichts. Dann nimmst Du das Beispiel Abfall/Tonne.
Da fährst eventuell darauf ab den Termin irgendwo zu sehen, das macht ev. Calview. Aber das war doch nicht die Aufgabe?
Andere Frage wie ist das Handling von Ganztages Terminen?
Bei einem Termin der jetzt von 13:50 bis 13:52 gesetzt wurde, geht es.
Nur bei Ganztages Terminen die am gleichen Tag gesetzt wurden, geht es wohl nicht.
Zumindest hat das so für mich den Eindruck.
Naja ein Ganztages Termin bringt um 0:00 Uhr einen Event. Kannst Du also in der jetzigen Erkenntnis Phase irgendwie nicht testen :)
Willst Du um 00:00 Uhr deinen dummy setzen funktioniert das genauso.
Hast Du mal meinen aktuellen Artikel gelesen? Da habe ich am Anfang auch was zu Abfragen gesagt: was siehst Du wenn Du
get Kalender_Rob_FHEM events format:full
eingibst?
oder get Kalender_Rob_FHEM events format:full limit:count=1,from=+0d
Hm,
es gab da bei "ganztägigen" auch noch ein anderes Problem, das man aber mit irgendeiner Option lösen kann (Ende-Events erzeugen, müßte in der cref stehen).
OT @Otto:
Deine Geduld wollte ich haben ;D ...
Zitat von: Beta-User am 09 Januar 2019, 14:45:53
Hm,
es gab da bei "ganztägigen" auch noch ein anderes Problem, das man aber mit irgendeiner Option lösen kann (Ende-Events erzeugen, müßte in der cref stehen).
Bring jetzt mal keine Verwirrung hier rein :D - das Problem hat man nur bei "kaputten/nicht RFC konformen" Kalendern, also bei welchen wo das Ende fehlt. Das ist bei Google Kalendern nicht der Fall - die haben ein Anfang und ein Ende. 8)
Beispiel:
5k7aqih1paafpfalafi5l5c28kgooglecom start 09.01.2019 00:00-10.01.2019 00:00 Gelbe Tonne
43k0uihnjvtfpmbka166u7bev8googlecom upcoming 16.01.2019 00:00-17.01.2019 00:00 Hausmüll
Zitat von: Otto123 am 09 Januar 2019, 14:42:02
Naja ein Ganztages Termin bringt um 0:00 Uhr einen Event. Kannst Du also in der jetzigen Erkenntnis Phase irgendwie nicht testen :)
Willst Du um 00:00 Uhr deinen dummy setzen funktioniert das genauso.
Hast Du mal meinen aktuellen Artikel gelesen? Da habe ich am Anfang auch was zu Abfragen gesagt: was siehst Du wenn Du
get Kalender_Rob_FHEM events format:full
eingibst?
oder get Kalender_Rob_FHEM events format:full limit:count=1,from=+0d
Bin da gestern nich mehr dazu gekommen.
Vll komm ich heute in der MIttagspause dazu.
Mal was anderes, gibt es nachteile warum nicht das ModeStart und ModeEnd abgefragt wird?
Gruß Robert
Moin Robert,
ich weiß nicht was Du mit Nachteile meinst. Das ist für mich etwa so: Gibt es Nachteile wenn man anstatt Brot, Kartoffeln isst?
In modeStart steht bei mir aktuelle eine ID und eine Zeit drin. Die könnte ich abfragen, aber was mache ich damit? Keine Ahnung ....
In modeEnd steht bei mir ein Array mit IDs drin und mit der Zeit die im Reading steht kann ich wenig anfangen. Wie sollte ich dort jetzt an eine simple Information kommen.
Da kann ich Dir nicht helfen.
Was erhoffst Du Dir für einen Vorteil?
Gruß Otto
Zitat von: Otto123 am 10 Januar 2019, 11:09:07
Moin Robert,
ich weiß nicht was Du mit Nachteile meinst. Das ist für mich etwa so: Gibt es Nachteile wenn man anstatt Brot, Kartoffeln isst?
In modeStart steht bei mir aktuelle eine ID und eine Zeit drin. Die könnte ich abfragen, aber was mache ich damit? Keine Ahnung ....
In modeEnd steht bei mir ein Array mit IDs drin und mit der Zeit die im Reading steht kann ich wenig anfangen. Wie sollte ich dort jetzt an eine simple Information kommen.
Da kann ich Dir nicht helfen.
Was erhoffst Du Dir für einen Vorteil?
Gruß Otto
Naja zumindest kann man mit dem modeStart das problem mit den Ganztages Terminen erschlagen.
Dazu braucht man auch nicht das Changed Event abwarten.
Die ID kann man ja nutzen um per Summery den Namen des Eintrages rauszuholen.
Stimmt der Betreff, wird der Dummy auf Ja gesetzt, trifft es nicht zu auf Nein.
ich bin mir jetzt nicht sicher, wie genau es beim ferienkalender gemacht wird.
Gruß Robert
Zitat von: no_Legend am 10 Januar 2019, 13:40:40
Naja zumindest kann man mit dem modeStart das problem mit den Ganztages Terminen erschlagen.
Dazu braucht man auch nicht das Changed Event abwarten.
Die ID kann man ja nutzen um per Summery den Namen des Eintrages rauszuholen.
Stimmt der Betreff, wird der Dummy auf Ja gesetzt, trifft es nicht zu auf Nein.
ich bin mir jetzt nicht sicher, wie genau es beim ferienkalender gemacht wird.
Gruß Robert
Ich verstehe dein Problem nicht.
Willst DU in den Kalender gucken? Oder willst Du, dass Dein FHEM weiß was heute ansteht?
Wenn Du (oder dein FHEM) zu einem bestimmten Zeitpunkt wissen willst was gerade oder in Zukunft für Termine anstehen, kann man einfach abfragen und vielleicht irgendwohin schreiben. FHEM kann das z.B. mit einem at tun.
Aber man kann auch gezielt zum Start eines Termines etwas ausführen, der Termin sagt ja wann es losgeht und wann es endet. Das geht z.B. mit dem notify .
Testen kann man mit Testterminen da braucht man nicht 24h warten. Oder mit dem trigger Befehl.
Gruß Otto
@Otto123 und @CoolTux
Danke euch schon mal für deine Geduld und Hilfe
Ich fang besser noch mal von Vorne an, um es vll verständlicher zu machen.
Also das ganze wird wegen folgendem FHEM Modul benötigt:
73_AutoShuttersControl.pm https://forum.fhem.de/index.php/topic,92628.0.html
Das Modul benötigt,
1. ob aktuell ein Termin ansteht und
2. ob morgen ein Termin ansteht.
Bei dem Modul wird der Urlaub-Status über das holiday2we Modul zugegriffen.
Dadurch ist das Modul dann in der Lage die Zeiten des Rollladens entsprechend zu berechnen.
@CoolTux korrigiere mich bitte, wenn ich etwas falsch geschrieben habe.
Ich arbeite bei mein FHEM mit nur einem Kalender, in dem die FHEM relevanten Befehle eintrage.
So erstelle ich momentan nur folgende Termine im Betreff: Urlaub, Besuch, Abwesend.
Termine können Ganztages Termine oder auch nur von bis Termine sein.
Bei Urlaub sind eigentlich nur ganz Tages Termin bei mir drin.
Geschalten werden dann die entsprechende Dummies, davon gibt es drei:
Cal_Rob_FHEM_urlaub
Cal_Rob_FHEM_besuch
Cal_Rob_FHEM_abwesend
Der Urlaubs Dummie wird dann per Global devices in holiday2we eingebunden.
Damit benötigt der Dummie für Urlaub, aber folgende Readings:
1. reading state mit dem aktuellen Status, also ob ein Termin gerade läuft und
2. reading tomorow ob morgen ein Termin kommt.
Hoffentlich hab ich alles richtig wieder gegeben.
Gruß Robert
Deine Ausführungen sind soweit korrekt.
Ich müsste wenn das ganze aber auch erstmal testen, habe bei mir mehrere Kalender. Möglichkeiten des auslesen stehen ja hier bereits. Ich schaue heute Abend mal.
Naja, dann folgender Vorschlag.
- ein notify welches bei Start und End vom Termin den dummy state setzt (Du hast nicht geschrieben auf was).
Analog zur Doku Beispiel Switch actors on and off - ein at (du hast nicht geschrieben zu welchem Zeitpunkt Du die Info von tomorrow brauchst) welches nachschaut ob morgen überhaupt ein Termin ansteht und das dummy tomorrow setzt. Analog zu meinem Beispiel "Tonne (https://heinz-otto.blogspot.com/2018/07/kalender-in-fhem-einbinden.html)"
@no_Legend Du bist allerdings die ganze Zeit auf dem Dampfer: Beim reload des Kalender auf irgendwas zu reagieren. Das halte ich für Unsinn!
Gruß Otto
Also alles was man braucht für das setzen des holiday Dummys ist in Deinem Fall die Summary und die Dauer des Termins
Du brauchst
split('\n',CommandGet(undef,$calDev.' events filter:mode=="start" format:custom="$S $d"'))
Du bekommst ein Array mit jeweils Beschreibung und Dauer des Termins pro Eintrag.
Bei
split('\n',CommandGet(undef,$calDev.' events filter:mode=="upcoming" format:custom="$S"'))
Brauchst Du sogar nur die Beschreibung.
Alles was ASC braucht ist zu wissen ob heute und/oder morgen ein Feiertag ist. Mehr nicht.
Zitat von: Otto123 am 14 Januar 2019, 15:23:44
Naja, dann folgender Vorschlag.
- ein notify welches bei Start und End vom Termin den dummy state setzt (Du hast nicht geschrieben auf was).
Analog zur Doku Beispiel Switch actors on and off - ein at (du hast nicht geschrieben zu welchem Zeitpunkt Du die Info von tomorrow brauchst) welches nachschaut ob morgen überhaupt ein Termin ansteht und das dummy tomorrow setzt. Analog zu meinem Beispiel "Tonne (https://heinz-otto.blogspot.com/2018/07/kalender-in-fhem-einbinden.html)"
@no_Legend Du bist allerdings die ganze Zeit auf dem Dampfer: Beim reload des Kalender auf irgendwas zu reagieren. Das halte ich für Unsinn!
Gruß Otto
Hallo Otto,
das mit dem Reload hast du schon recht.
Denke auch wie du schon schreibst, auf start und ende sollte reichen.
Die Dummies brauchen 0 und 1 als state. 0 kein Termin und 1 Termin.
So weit ich das mit dem Tomorrow verstanden habe, sollte es Abends auf jedenfall schon vorhanden sein.
Zitat von: CoolTux am 14 Januar 2019, 22:11:43
Also alles was man braucht für das setzen des holiday Dummys ist in Deinem Fall die Summary und die Dauer des Termins
Du brauchst
split('\n',CommandGet(undef,$calDev.' events filter:mode=="start" format:custom="$S $d"'))
Du bekommst ein Array mit jeweils Beschreibung und Dauer des Termins pro Eintrag.
Bei
split('\n',CommandGet(undef,$calDev.' events filter:mode=="upcoming" format:custom="$S"'))
Brauchst Du sogar nur die Beschreibung.
Alles was ASC braucht ist zu wissen ob heute und/oder morgen ein Feiertag ist. Mehr nicht.
Danke, klingt auf jedenfall gut.
Kannst du mir bitte noch Helfen, wie genau ich das einrichte?
Momentan hab ich es wie folgt eingerichtet:
define Kalender_Rob_FHEM.notify notify Kalender_Rob_FHEM:changed:.* {KalenderSub($EVTPART1,$EVTPART2,$NAME)}
attr Kalender_Rob_FHEM.notify room 9.20_Kalender
sub KalenderSub ($$$)
{
my ($uid,$cmd,$cname) = @_;
#Logging der Paramter bei Bedarf; #Log 1, "uid: $uid | Start/End: $cmd | cal: $cname";
my $format = '"$S"';
$uid='"'.$uid.'"';
$cmd = '1' if ($cmd eq 'start');
$cmd = '0' if ($cmd eq 'end');
my $actor = fhem("get $cname events format:custom=$format filter:uid==$uid limit:count=1");
# Unterschiedliche Abfragen auf ist exakt oder enthält möglich;
#fhem("set $actor $cmd") if ($actor eq $dev);
#if ($actor =~ /$dev/) {fhem("set $dev $cmd")};
my $dev = 'Urlaub';
if ($actor =~ /$dev/) {fhem("set Cal_Rob_FHEM_urlaub $cmd")};
my $dev = 'Besuch';
if ($actor =~ /$dev/) {fhem("set Cal_Rob_FHEM_besuch $cmd")};
my $dev = 'Abwesend';
if ($actor =~ /$dev/) {fhem("set Cal_Rob_FHEM_abwesend $cmd")};
my $dev = 'Babysitter';
if ($actor =~ /$dev/) {fhem("set Cal_Rob_FHEM_babysitter $cmd")};
}
Sorry aber in meinen Augen viel zu kompliziert.
sub calendarEvents($) {
my $calDev = shift;
my $value = 0;
my $start = CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="start"');
my $upcoming = CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="upcoming"');
CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' '.(length($start) > 0 ? 1 : 0) );
$value = 1 if ( (length($start) > 0 and int((split('\s',$start))[1] / 86400) != int(time() / 86400 )) or length($upcoming) > 0 );
CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' tomorrow '.$value);
}
Hier wird alles Ausgewertet basierend auf einen Kalender pro Terminart.
Alles was Du noch machen musst ist den summary aus zu werten. Also $S. Ich würde das ganze vielleicht erstmal in ein Array schieben. Also alles was bei CommandGet an kommt.
my @start = split('\n',CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="start"'));
Und dann das Array weiter auswerten. Eventuell schauen als erstes ob die Summary im ARRAY String überhaupt interessant für dich ist.
So ich hoffe ich habe alle Fälle abgedeckt.
Das ist natürlich jetzt nur erstmal für Urlaub. Und als Betreff für den Kalendereintrag muß auch Urlaub genau so stehen. Kann man aber anpassen.
Internals:
CHANGED
DEF ical url https://URL/basic.ics 86400
NAME calendarAllgemein
NOTIFYDEV global
NR 28
NTFY_ORDER 50-calendarAllgemein
STATE triggered
TYPE Calendar
READINGS:
2018-12-30 06:56:29 calname Allgemein
2018-12-30 06:56:29 lastUpdate 2018-12-30 06:55:32
2017-12-29 09:18:43 modeAlarm
2018-12-27 00:00:00 modeAlarmOrStart 2r6pfpqgjdci3is7ptjnm67v3tgooglecom
2017-12-29 09:18:43 modeAlarmed
2018-12-27 19:39:42 modeChanged
2018-12-30 06:56:29 modeEnd dc2ad49235d4490e870c1251861f4c82;309r0ius83ghkbkeebc6d6mm2agooglecom;21ku868ra7cgj4rsd0lu5cq49hgooglecom;6a9rg14a2ikfg5drtsb94j3bd0googlecom;2aa29ktsroucu3jrgucrt92o7bgooglecom;78ike8hnt4qv3dprakav0vvukngooglecom;006ddpeskbqieebohknbmvceeegooglecom;30cs42ua3pjs9bsmipvfikit0ugooglecom
2018-12-25 19:40:15 modeEnded
2018-12-27 00:00:00 modeStart 2r6pfpqgjdci3is7ptjnm67v3tgooglecom
2018-12-27 19:39:42 modeStarted
2018-12-30 06:56:29 modeUpcoming 3rc5kgbbljpeegb4n0hvotrl7ggooglecom;1oh2bqk8o4f81m656s3d3b3qbigooglecom;6m4436usnfu5ibv95a8pf7oajugooglecom;12qefmcrdtqs1ap3iutmvvrs5dgooglecom;6sj5gm88ht1l2eembmf859sr7ggooglecom
2018-12-30 06:56:29 nextUpdate 2018-12-31 06:55:32
2018-12-30 06:56:29 nextWakeup 2018-12-31 06:55:32
2018-12-30 06:56:29 state triggered
Attributes:
alias Allgemein
event-on-update-reading state
group Urlaub
hideLaterThan 1d
room Kalender
update async
Entscheidend ist event-on-update-reading state und hideLaterThan 1d. Durch hideLaterThan 1d bekomme ich bei einem get Abruf nur den Termin für den Folgetag und nicht für mehrere folgende Tage angezeigt. Das ist unser tomorrow.
Auch wichtig für den automatisierten Ablauf ist der alias welcher den Kalendernamen ohne das Wort calendar enthalten muß.
Als nächstes habe ich einen Dummy angelegt
Internals:
NAME dummyAllgemein
NR 63
STATE 1
TYPE dummy
READINGS:
2018-12-30 06:56:29 state 1
2018-12-30 08:08:46 tomorrow 1
Attributes:
alias Urlaub
event-on-change-reading state,tomorrow
group Urlaub
readingList tomorrow,state
room Kalender
setList tomorrow:0,1 state:0,1
Der Dummy Name wiederum muss den Alias Namen vom Kalenderdevice enthalten und vorneweg das Wort "dummy".
Nun erstellen wir noch ein Notify welches auf alle unsere Kalender (ja ich habe mehrere) triggert
Internals:
DEF calendar.*:triggered { calendarEvents($NAME) }
NAME notifySetCalendarDummys
NOTIFYDEV calendar.*
NR 64
NTFY_ORDER 50-notifySetCalendarDummys
REGEXP calendar.*:triggered
STATE 2018-12-30 07:56:12
TRIGGERTIME 1546152972.28106
TYPE notify
READINGS:
2018-12-30 06:55:21 state active
Attributes:
room Kalender
und eine Sub auf ruft.
sub calendarEvents($) {
my $calDev = shift;
my $value = 0;
my $start = '';
my $upcoming;
my @start = split('\n',CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="start"'));
my @upcoming = split('\n',CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="upcoming"'));
if ( scalar(@start) > 0 ) {
foreach $start ( @start ) {
CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' '.((split('\s',$start))[0] eq 'Urlaub' ? 1 : 0));
$value = 1 if ( int((split('\s',$start))[1] / 86400) != int(time() / 86400) and (split('\s',$start))[0] eq 'Urlaub' );
}
}
else {CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' 0')}
if ( scalar(@upcoming) > 0 and $value == 0 ) {
foreach $upcoming ( @upcoming ) {
$value = 1 if ( length($upcoming) > 0 and (split('\s',$upcoming))[0] eq 'Urlaub' );
}
}
CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' tomorrow '.$value);
}
Wird diese Sub aufgerufen wird automatisch je nach Ergebnis der CommandGet Abrufe des Kalenders unsere Dummy Readings state und tomorrow mit 0 oder 1 befüllt..
Und da wir die Dummys ja im global Device im Attribut we2holiday eingetragen haben wird der Status auch entsprechend im ASC ausgewertet.
Grüße
Zitat von: CoolTux am 16 Januar 2019, 18:42:28
So ich hoffe ich habe alle Fälle abgedeckt.
Das ist natürlich jetzt nur erstmal für Urlaub. Und als Betreff für den Kalendereintrag muß auch Urlaub genau so stehen. Kann man aber anpassen.
Internals:
CHANGED
DEF ical url https://URL/basic.ics 86400
NAME calendarAllgemein
NOTIFYDEV global
NR 28
NTFY_ORDER 50-calendarAllgemein
STATE triggered
TYPE Calendar
READINGS:
2018-12-30 06:56:29 calname Allgemein
2018-12-30 06:56:29 lastUpdate 2018-12-30 06:55:32
2017-12-29 09:18:43 modeAlarm
2018-12-27 00:00:00 modeAlarmOrStart 2r6pfpqgjdci3is7ptjnm67v3tgooglecom
2017-12-29 09:18:43 modeAlarmed
2018-12-27 19:39:42 modeChanged
2018-12-30 06:56:29 modeEnd dc2ad49235d4490e870c1251861f4c82;309r0ius83ghkbkeebc6d6mm2agooglecom;21ku868ra7cgj4rsd0lu5cq49hgooglecom;6a9rg14a2ikfg5drtsb94j3bd0googlecom;2aa29ktsroucu3jrgucrt92o7bgooglecom;78ike8hnt4qv3dprakav0vvukngooglecom;006ddpeskbqieebohknbmvceeegooglecom;30cs42ua3pjs9bsmipvfikit0ugooglecom
2018-12-25 19:40:15 modeEnded
2018-12-27 00:00:00 modeStart 2r6pfpqgjdci3is7ptjnm67v3tgooglecom
2018-12-27 19:39:42 modeStarted
2018-12-30 06:56:29 modeUpcoming 3rc5kgbbljpeegb4n0hvotrl7ggooglecom;1oh2bqk8o4f81m656s3d3b3qbigooglecom;6m4436usnfu5ibv95a8pf7oajugooglecom;12qefmcrdtqs1ap3iutmvvrs5dgooglecom;6sj5gm88ht1l2eembmf859sr7ggooglecom
2018-12-30 06:56:29 nextUpdate 2018-12-31 06:55:32
2018-12-30 06:56:29 nextWakeup 2018-12-31 06:55:32
2018-12-30 06:56:29 state triggered
Attributes:
alias Allgemein
event-on-update-reading state
group Urlaub
hideLaterThan 1d
room Kalender
update async
Entscheidend ist event-on-update-reading state und hideLaterThan 1d. Durch hideLaterThan 1d bekomme ich bei einem get Abruf nur den Termin für den Folgetag und nicht für mehrere folgende Tage angezeigt. Das ist unser tomorrow.
Auch wichtig für den automatisierten Ablauf ist der alias welcher den Kalendernamen ohne das Wort calendar enthalten muß.
Als nächstes habe ich einen Dummy angelegt
Internals:
NAME dummyAllgemein
NR 63
STATE 1
TYPE dummy
READINGS:
2018-12-30 06:56:29 state 1
2018-12-30 08:08:46 tomorrow 1
Attributes:
alias Urlaub
event-on-change-reading state,tomorrow
group Urlaub
readingList tomorrow,state
room Kalender
setList tomorrow:0,1 state:0,1
Der Dummy Name wiederum muss den Alias Namen vom Kalenderdevice enthalten und vorneweg das Wort "dummy".
Nun erstellen wir noch ein Notify welches auf alle unsere Kalender (ja ich habe mehrere) triggert
Internals:
DEF calendar.*:triggered { calendarEvents($NAME) }
NAME notifySetCalendarDummys
NOTIFYDEV calendar.*
NR 64
NTFY_ORDER 50-notifySetCalendarDummys
REGEXP calendar.*:triggered
STATE 2018-12-30 07:56:12
TRIGGERTIME 1546152972.28106
TYPE notify
READINGS:
2018-12-30 06:55:21 state active
Attributes:
room Kalender
und eine Sub auf ruft.
sub calendarEvents($) {
my $calDev = shift;
my $value = 0;
my $start = '';
my $upcoming;
my @start = split('\n',CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="start"'));
my @upcoming = split('\n',CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="upcoming"'));
if ( scalar(@start) > 0 ) {
foreach $start ( @start ) {
CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' '.((split('\s',$start))[0] eq 'Urlaub' ? 1 : 0));
$value = 1 if ( int((split('\s',$start))[1] / 86400) != int(time() / 86400) and (split('\s',$start))[0] eq 'Urlaub' );
}
}
else {CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' 0')}
if ( scalar(@upcoming) > 0 and $value == 0 ) {
foreach $upcoming ( @upcoming ) {
$value = 1 if ( length($upcoming) > 0 and (split('\s',$upcoming))[0] eq 'Urlaub' );
}
}
CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' tomorrow '.$value);
}
Wird diese Sub aufgerufen wird automatisch je nach Ergebnis der CommandGet Abrufe des Kalenders unsere Dummy Readings state und tomorrow mit 0 oder 1 befüllt..
Und da wir die Dummys ja im global Device im Attribut we2holiday eingetragen haben wird der Status auch entsprechend im ASC ausgewertet.
Grüße
Super Danke, für die Hilfe.
Probiere ich morgen gleich aus.
Kurz noch was OT, kannst du mir was empfehlen, womit ich mich in Perl einarbeiten kann?
Ich würde gerne mehr Hintergrund wissen haben.
Gruß Robert
Hallo Leon,
du setzt auf den Calendar Event triggered .
Was ist wenn heute kein Termin drin steht, also kein Event kommt. Dann gibt es doch kein "Morgen" oder? :-\
Der (tägliche) reload wirft doch keinen triggered Event?
Gruß Otto
Hallo Otto
Mein Calendar Device macht um Mitternacht ein update, das hat bei mir bis jetzt immer gereicht.
Mehr kann ich Dir dazu nicht sagen.
Grüße
Zitat von: no_Legend am 16 Januar 2019, 19:09:35
Super Danke, für die Hilfe.
Probiere ich morgen gleich aus.
Kurz noch was OT, kannst du mir was empfehlen, womit ich mich in Perl einarbeiten kann?
Ich würde gerne mehr Hintergrund wissen haben.
Gruß Robert
Hallo Robert,
Ich kann Dir da "Programmieren mit Perl" empfehlen. Ist der Klassiker für Perl von Larry Wall.
Grüße
Zitat von: CoolTux am 16 Januar 2019, 19:26:15
Hallo Otto
Mein Calendar Device macht um Mitternacht ein update, das hat bei mir bis jetzt immer gereicht.
Mehr kann ich Dir dazu nicht sagen.
Grüße
Ja ok, ein update wirft einen triggered Event
Zitat von: CoolTux am 16 Januar 2019, 18:42:28
So ich hoffe ich habe alle Fälle abgedeckt.
Das ist natürlich jetzt nur erstmal für Urlaub. Und als Betreff für den Kalendereintrag muß auch Urlaub genau so stehen. Kann man aber anpassen.
Internals:
CHANGED
DEF ical url https://URL/basic.ics 86400
NAME calendarAllgemein
NOTIFYDEV global
NR 28
NTFY_ORDER 50-calendarAllgemein
STATE triggered
TYPE Calendar
READINGS:
2018-12-30 06:56:29 calname Allgemein
2018-12-30 06:56:29 lastUpdate 2018-12-30 06:55:32
2017-12-29 09:18:43 modeAlarm
2018-12-27 00:00:00 modeAlarmOrStart 2r6pfpqgjdci3is7ptjnm67v3tgooglecom
2017-12-29 09:18:43 modeAlarmed
2018-12-27 19:39:42 modeChanged
2018-12-30 06:56:29 modeEnd dc2ad49235d4490e870c1251861f4c82;309r0ius83ghkbkeebc6d6mm2agooglecom;21ku868ra7cgj4rsd0lu5cq49hgooglecom;6a9rg14a2ikfg5drtsb94j3bd0googlecom;2aa29ktsroucu3jrgucrt92o7bgooglecom;78ike8hnt4qv3dprakav0vvukngooglecom;006ddpeskbqieebohknbmvceeegooglecom;30cs42ua3pjs9bsmipvfikit0ugooglecom
2018-12-25 19:40:15 modeEnded
2018-12-27 00:00:00 modeStart 2r6pfpqgjdci3is7ptjnm67v3tgooglecom
2018-12-27 19:39:42 modeStarted
2018-12-30 06:56:29 modeUpcoming 3rc5kgbbljpeegb4n0hvotrl7ggooglecom;1oh2bqk8o4f81m656s3d3b3qbigooglecom;6m4436usnfu5ibv95a8pf7oajugooglecom;12qefmcrdtqs1ap3iutmvvrs5dgooglecom;6sj5gm88ht1l2eembmf859sr7ggooglecom
2018-12-30 06:56:29 nextUpdate 2018-12-31 06:55:32
2018-12-30 06:56:29 nextWakeup 2018-12-31 06:55:32
2018-12-30 06:56:29 state triggered
Attributes:
alias Allgemein
event-on-update-reading state
group Urlaub
hideLaterThan 1d
room Kalender
update async
Entscheidend ist event-on-update-reading state und hideLaterThan 1d. Durch hideLaterThan 1d bekomme ich bei einem get Abruf nur den Termin für den Folgetag und nicht für mehrere folgende Tage angezeigt. Das ist unser tomorrow.
Auch wichtig für den automatisierten Ablauf ist der alias welcher den Kalendernamen ohne das Wort calendar enthalten muß.
Als nächstes habe ich einen Dummy angelegt
Internals:
NAME dummyAllgemein
NR 63
STATE 1
TYPE dummy
READINGS:
2018-12-30 06:56:29 state 1
2018-12-30 08:08:46 tomorrow 1
Attributes:
alias Urlaub
event-on-change-reading state,tomorrow
group Urlaub
readingList tomorrow,state
room Kalender
setList tomorrow:0,1 state:0,1
Der Dummy Name wiederum muss den Alias Namen vom Kalenderdevice enthalten und vorneweg das Wort "dummy".
Nun erstellen wir noch ein Notify welches auf alle unsere Kalender (ja ich habe mehrere) triggert
Internals:
DEF calendar.*:triggered { calendarEvents($NAME) }
NAME notifySetCalendarDummys
NOTIFYDEV calendar.*
NR 64
NTFY_ORDER 50-notifySetCalendarDummys
REGEXP calendar.*:triggered
STATE 2018-12-30 07:56:12
TRIGGERTIME 1546152972.28106
TYPE notify
READINGS:
2018-12-30 06:55:21 state active
Attributes:
room Kalender
und eine Sub auf ruft.
sub calendarEvents($) {
my $calDev = shift;
my $value = 0;
my $start = '';
my $upcoming;
my @start = split('\n',CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="start"'));
my @upcoming = split('\n',CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="upcoming"'));
if ( scalar(@start) > 0 ) {
foreach $start ( @start ) {
CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' '.((split('\s',$start))[0] eq 'Urlaub' ? 1 : 0));
$value = 1 if ( int((split('\s',$start))[1] / 86400) != int(time() / 86400) and (split('\s',$start))[0] eq 'Urlaub' );
}
}
else {CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' 0')}
if ( scalar(@upcoming) > 0 and $value == 0 ) {
foreach $upcoming ( @upcoming ) {
$value = 1 if ( length($upcoming) > 0 and (split('\s',$upcoming))[0] eq 'Urlaub' );
}
}
CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' tomorrow '.$value);
}
Wird diese Sub aufgerufen wird automatisch je nach Ergebnis der CommandGet Abrufe des Kalenders unsere Dummy Readings state und tomorrow mit 0 oder 1 befüllt..
Und da wir die Dummys ja im global Device im Attribut we2holiday eingetragen haben wird der Status auch entsprechend im ASC ausgewertet.
Grüße
So ich bin endlich dazu gekommen es zu testen.
Die Abfrage des Kalenders auf "Urlaub" funktioniert.
State für Termin heute und für tomorow wurden richtig gesetzt.
Kannst du mir vll noch kurz erklären, wie ich auf andere "Suchbegriffe" erweitern kann?
Danke und Gruß Robert
Zitat von: no_Legend am 31 Januar 2019, 11:40:54
Kannst du mir vll noch kurz erklären, wie ich auf andere "Suchbegriffe" erweitern kann?
im Grunde musst du die Stellen flexibel gestalten / erweitern an denen
eq 'Urlaub'
steht.
was schwebt dir vor??
Zitat von: nils_ am 31 Januar 2019, 12:50:26
im Grunde musst du die Stellen flexibel gestalten / erweitern an denen
eq 'Urlaub'
steht.
was schwebt dir vor??
Ich muss noch "Abwesend" und "Besuch" aus den einem Kalender holen und in je einen eigenen Dummy schreiben.
Hallo zusammen,
ne kurze Frage, hat sich etwas an einem Modul verändert.
Bei mir wird jetzt leider nicht mehr in die Reading State und tommorow ein wert geschrieben.
nun landet im state zum Beispiel: tomorrow 0
Danke und Gruß Robert
Hier mal ein List dazu:
Internals:
CFGFN /opt/fhem/FHEM/kalender.cfg
FUUID 5c4308e1-f33f-abd1-69b3-142fe6e4d477d7cf
FVERSION 98_dummy.pm:0.191970/2019-04-16
NAME Cal_Rob_FHEM_Urlaub
NR 715
STATE tomorrow 0
TYPE dummy
READINGS:
2019-04-17 17:14:39 state tomorrow 0
2019-02-20 16:48:56 tomorrow 0
Attributes:
DbLogExclude .*
event-on-change-reading state,tomorrow
readingList tomorrow,state
room 9.20_Kalender
setList tomorrow:0,1 state:0,1
Ja, vor einiger Zeit wurde ein Fehler bereinigt.
ZitatreadingList
Space separated list of readings, which will be set, if the first argument of the set command matches one of them.
Du musst das Komma gegen Leerzeichen tauschen
Gruß Otto
Ichnhabe das Notify die Tage etwas angepasst. Otto hatte das ja schon mal eingeworfen. Habe den trigger nun noch um changed erweitert.
calendar.*:(triggered|changed:.*) { calendarEvents($NAME) }
Zitat von: CoolTux am 17 April 2019, 17:34:30
Ichnhabe das Notify die Tage etwas angepasst. Otto hatte das ja schon mal eingeworfen. Habe den trigger nun noch um changed erweitert.
calendar.*:(triggered|changed:.*) { calendarEvents($NAME) }
Danke
Zitat von: Otto123 am 17 April 2019, 17:28:01
Ja, vor einiger Zeit wurde ein Fehler bereinigt.Du musst das Komma gegen Leerzeichen tauschen
Gruß Otto
Danke
Könnt ihr mir vielleicht noch erklären wie ich dass ganze auf andere Betreffs erweitere?
Ich bekomme es einfach nicht gebacken.
Gruß Robert
Du ersetzt alle 'Urlaub' gegen irgendeinen Variablen Namen. Setzt die Variable am Anfang der Sub bzw. machst noch einen zweiten Übergabe Parameter.
Ein Beispiel für die Verarbeitung mehrere Parameter findest Du z.B. hier:
https://wiki.fhem.de/wiki/E-Mail_senden#Raspberry_Pi
Gut wäre auch noch Groß und Kleinschreibung zu ignorieren. (?i)
Gruß Otto
Zitat von: Otto123 am 17 April 2019, 21:02:47
Du ersetzt alle 'Urlaub' gegen irgendeinen Variablen Namen. Setzt die Variable am Anfang der Sub bzw. machst noch einen zweiten Übergabe Parameter.
Ein Beispiel für die Verarbeitung mehrere Parameter findest Du z.B. hier:
https://wiki.fhem.de/wiki/E-Mail_senden#Raspberry_Pi
Gut wäre auch noch Groß und Kleinschreibung zu ignorieren. (?i)
Gruß Otto
Danke für den Tip.
Verstanden hab ich es glaub ich.
Was ich aber in dem RPi Script nicht sehe, ist wie das ganze dann mit mehreren Dummies zu handhaben ist.
Das Mailprogramme kann wohl mit mehreren Adressen in einer Variablen umgehen.
Vll noch mal zur Erklärung:
Ich hab einen Kalender. Cal_Rob_FHEM
In diesem werden Ganztages Termine mit folgenden Betreffs zum Beispiel angegeben:
Urlaub, Besuch, Babysitter usw.
Dazu gibt es dann auch Dummies:
Cal_Rob_FHEM_Urlaub
Cal_Rob_FHEM_Besuch
Cal_Rob_FHEM_Babysitter
usw.
Je nach dem was im Betreff steht, soll dann der entsprechende Dummie gesetzt werden.
Es kann natürlich auch sein, dass zwei Betreffs gleichzeitig sind.
Ganztägig oder auch einer Ganztägig und ein andere nur Stundenweise.
Ja mein Hinweis war nur für den Betreff. Das mit dem Dummy muss Leon Dir erklären, das ist mir zu kompliziert. :D
Das Problem ist das ich mit mehreren Dummys und mehreren Kalendern arbeite. Pro Kalender ein Dummy. Das musst Du bisschen anpassen. Ich schaue mal.
Ok. Basierend auf Deinen Daten von Type (Dummys) und Aufbau der Dummys
Zitat von: no_Legend am 17 April 2019, 22:01:06
Dazu gibt es dann auch Dummies:
Cal_Rob_FHEM_Urlaub
Cal_Rob_FHEM_Besuch
Cal_Rob_FHEM_Babysitter
usw.
habe ich mal folgendes zusammen gesetzt.
Leider ungetestet.
sub calendarEvents($) {
my $calDev = shift;
my $value = 0;
my $start = '';
my $upcoming;
my @start = split('\n',CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="start"'));
my @upcoming = split('\n',CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="upcoming"'));
my $subject;
my $dummy_subject;
my @dummys = devspec2array('Cal_Rob_FHEM_.*');
foreach my $dummy (@dummys) {
$dummy_subject = (split('_',$dummy))[3];
if ( scalar(@start) > 0 ) {
foreach $start ( @start ) {
$subject = (split('\s',$start))[0];
CommandSet(undef,'Cal_Rob_FHEM_'.$dummy_subject.' '.($subject eq $dummy_subject ? 1 : 0));
$value = 1 if ( int((split('\s',$start))[1] / 86400) != int(time() / 86400) and $subject eq $dummy_subject );
}
}
else { CommandSet(undef,'Cal_Rob_FHEM_'.$dummy_subject.' 0') }
if ( scalar(@upcoming) > 0 and $value == 0 ) {
foreach my $dummy (@dummys) {
$dummy_subject = (split('_',$dummy))[3];
foreach $upcoming ( @upcoming ) {
$subject = (split('\s',$upcoming))[0];
$value = 1 if ( length($upcoming) > 0 and $subject eq $dummy_subject );
}
CommandSet(undef,'Cal_Rob_FHEM_'.$dummy_subject.' tomorrow '.$value);
}
}
}
}
Grüße
Zitat von: CoolTux am 17 April 2019, 23:14:55
Ok. Basierend auf Deinen Daten von Type (Dummys) und Aufbau der Dummys habe ich mal folgendes zusammen gesetzt.
Leider ungetestet.
sub calendarEvents($) {
my $calDev = shift;
my $value = 0;
my $start = '';
my $upcoming;
my @start = split('\n',CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="start"'));
my @upcoming = split('\n',CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="upcoming"'));
my $subject;
my $dummy_subject;
my @dummys = devspec2array('Cal_Rob_FHEM_.*');
foreach my $dummy (@dummys) {
$dummy_subject = (split('_',$dummy))[3];
if ( scalar(@start) > 0 ) {
foreach $start ( @start ) {
$subject = (split('\s',$start))[0];
CommandSet(undef,'Cal_Rob_FHEM_'.$dummy_subject.' '.($subject eq $dummy_subject ? 1 : 0));
$value = 1 if ( int((split('\s',$start))[1] / 86400) != int(time() / 86400) and $subject eq $dummy_subject );
}
}
else { CommandSet(undef,'Cal_Rob_FHEM_'.$dummy_subject.' 0') }
if ( scalar(@upcoming) > 0 and $value == 0 ) {
foreach my $dummy (@dummys) {
$dummy_subject = (split('_',$dummy))[3];
foreach $upcoming ( @upcoming ) {
$subject = (split('\s',$upcoming))[0];
$value = 1 if ( length($upcoming) > 0 and $subject eq $dummy_subject );
}
CommandSet(undef,'Cal_Rob_FHEM_'.$dummy_subject.' tomorrow '.$value);
}
}
}
}
Grüße
Super. Danke.
Probiere ich heute Abend gleich aus.
Melde mich später noch mal.
Edit: Hab es getestet, funktioniert nicht ganz.
Es wird wenn Heute Urlaub ist und Morgen Besuch eingetragen ist,
auch im Dummy Urlaub für tomorrow eine 1 gesetzt.
Dazu wird auch wenn man den Kalendereintrag für morgen (Besuch) wieder löscht leider nicht beim Dummy das Reading tomorrow auf 0 gesetzt.
Weder der Dummie für Urlaub noch Besuch wir zurück gesetzt.
Gruß Robert
Gesendet von iPhone mit Tapatalk Pro
Vielen Dank CoolTux für die Subroutine und die Dummies! Ist genau was ich gesucht habe, da meine Urlaubskalendereinträge auch immer den ganzen Tag belegen.
Ich benötige die Urlaubsmeldung nur um in meinem ASC als WE zu deklarieren. Habe Deine devices und routine erstellt, allerdings glaube ich das für die Funktion noch etwas fehlt.
Hatte heute (Samstag) mal als Urlaub in den Kalender geschrieben, gestern kam nach update des Kalenders auch der trigger und im Dummy stand "tomorrow 1". Heute morgen hab ich wieder manuel Kalender update gemacht und es wurde "tomorrow 0" was ja auch stimmt da heute Urlaub und morgen nicht mehr. Allerdings würde heute ja dann mein ASC über holiday2we ja die Shutter nicht in der späten Zeit fahren... in der he.holiday gibt es "state" für heute und "tomorrow" in meinem dummy gibt es aber kein heute, oder?
Hast du für das Kalenderupdate ein notify um Mitternacht mit get update? In meinem Kalender kann ich das attr update async nicht auswählen.
Kalender:
Internals:
DEF ical url http://calendar.google.com/calendar/ical/***/basic.ics 86400
FUUID 5ea93d2b-f33f-8381-8a03-3e45d4204b083678
NAME calendarTNT
NOTIFYDEV global
NR 100
NTFY_ORDER 50-calendarTNT
STATE triggered
TYPE Calendar
READINGS:
2020-06-13 07:58:26 calname TNT
2020-06-13 07:58:26 lastUpdate 2020-06-13 07:58:06
2020-06-13 08:05:00 modeAlarm 49CC320D906449D894D3BDB2D1A36B7F;009891A8B80245858FC962E7F9030E8B;896F5A18C99541D89800511268FD2673;46DEDA7135A541FFAC1FF5CE8C5D7493;BD2675B87DE74434BB0F2025C5899534;480943231AA541C58199FBE323282374;FB5F3DA4187F418F8014517B8D6D3624;D15BA07634934FFB8F2058CA09D0D6E6;3C662B379717458098CEDC3880AEAC51;FDAA6C742D744222922C777B29351BD1;D1C9249D0BC14DF08AF95CA0F3C4CCDB
2020-06-13 08:05:00 modeAlarmOrStart 49CC320D906449D894D3BDB2D1A36B7F;009891A8B80245858FC962E7F9030E8B;896F5A18C99541D89800511268FD2673;46DEDA7135A541FFAC1FF5CE8C5D7493;BD2675B87DE74434BB0F2025C5899534;480943231AA541C58199FBE323282374;FB5F3DA4187F418F8014517B8D6D3624;D15BA07634934FFB8F2058CA09D0D6E6;3C662B379717458098CEDC3880AEAC51;FDAA6C742D744222922C777B29351BD1;D1C9249D0BC14DF08AF95CA0F3C4CCDB;9C9B6A4B95A54F0AA4792F820F62EB7D;C8558A2C44CD46FFA4A2883FF90B255B
2020-06-13 00:00:00 modeAlarmed
2020-06-13 08:00:00 modeChanged 923A90ACF9794AFAA55160171AB84C5B
2020-06-13 08:05:00 modeEnd AE733A3948514404B1EB8E0181CB0F43;377E094D609C4C9C8FE9EB92BBF20CAD;D1087C41938E48F3B9A591DCC50121C6;86297990A77A4E63B878391E13C3BCFD;00584A0633ED42C894FAA998DB954994;B39D1495B2F244DFAEEEF1350EF410E7;2DA18E58CC3F43538F9CB01C95C8B06C;92A5BBBA1C214C01A0BCB3F7E8170A7C;80DE39BFEC4C403BAF52577EDDF93912;23EBF89FB1D740BAA0B837B0B289C935;C13C3D06D9624ED3AE7D7FEB022D570E;0FDEE566EC4E43DDA32E3EB32807F618;5F15534DC88441CAA9A3D48C51A30579;EAD07A8DCA844B44BD3A95BC2B26E3FD;5DA07B80B9324C00BD4C10A87BF88BB4;DFE402C6E5024B22BEDD7C143DF206CB;101054FAFA0242D9B30AAC799BDD6252;36FF7E1472504E1F90EB44AF7E871512;F368074EF53447ADA9D9E1EBB7757608;207EF91857904FBA939749D041134D25;3464260BA96D49FCB0481E71EDDF2F8E;A836EC7264C74A58977C5B0C4B8AD509;E3456035B6384A7FACDC6BD264CE5F24;8DD1D86C60D14683BE929172C8A3FDAE;4D7A33D5E7174F16913838F29098F57C;A06D2CB0E18E44C4B4C56248FD867771;67346DBA3062480CB4ACBDB86A599030;966BAF887F0D400E95EE29AA7958A6FF;670797F450B24DB08AEB0C3A025E3F9E;4F1C4361EE034C3E9FD532CB79129F04;7kukuqrfedlm2f9t0skljusl2v7n12qmf52bohp4d6tgn5efaa5qiusa41pr48b0if80;A56A699293F7488B999E3FE2B9135C72;A1026CB43EE148A9842BD1EC0712ABCC;B95AC417E5E64DDCBC13BA7CBA4F67AC;D52DA74807A04704B51DB76D1448137A;1295C51F049247D496D9B44CAFB64710;E91657842CF54A16BA8F9A06B955234B;2D3E251E32794ADD9E59AF3AE322D6AB;FA064081C3B448E684697E4111BFC5B2;780E03E2D86E49F59FD9C0589DA56925;27CC4E12EA824133B69074E71157D958;4ED2F468020443EFABBC4E87533E7ECF;7601F84C467D4B75933F478D4BF6936C;836528B6F04F446FBD5521BE08BF9BA3;AF360D3B34594066A0560658B848EF7C;06022444D08C4DFDB0E52C80F9FBB45E;6E5057910471415B86ADA69003EDC3BE;71F7C902037D4F7EA4109D7394993020;5A840DBC7265457F878DFD22E9837F31;DD4462A9CB7847D3B31A3E509C5AA757;7kukuqrfedlm2f9tghr22juacqrjopi2t22iup1ch8rv4jmla1qvla2kn3cdpecqect0;3540785C48E84AA8BA6D1185A5D2176F;525855EE18944FEB96F8E36985E07841;8FE4CF4ED3AB438D9D96A5864866BC7B;536D2ED014234E9584EE2A432D656B29;C460AE9B79C54B1F8FCC52F20A227852;ECC1C4AA4ADF4DA2905D1698F52F341A;F67F5313958040438F7CEC322CC00DED;CD6958466D504AC59138BDF55167ED88;0FDA30AE7D7748ABBFCFF8F94BFB766F;4E57F6C3ECEA41CFBF7808114EB03C5A;53F27F24CEC74E8098816FCA7CC12530;E5408CF0A6C74947863C2FAA7B86C25E;3E3ADE59F08C42E29A9BD188D6D2C0DC;6782C0D96003487AAF164CB20A9E3BB5;62C37B1023184FE1A38CB5E71D1FCEF6;3AE42C1DCC79402D84B9834232C438ED;9CABED3CC6904C549ADC26901F456B9F;A564E6425E7949F5A2E9739EC0B16508;1rg5i16ih69u5cksqnt912amgbgooglecom;D3E7B4087D9B437EB596962926CAEC95;FF1C9BFA36EC4A69A405E4C1D569BD8A;3E0E22A08EE144FDA8E61AE76958E811;516C48A76AB749A6A0CC4E7C6AB5A5FA;B330A47FD65E4E5A8C46AEDD3071EF7B;A14C871EBA1A4361833FB5BF697218EE;F6FD24B100F44A758E8E070CD19C65F4;F3D7DBBB84594D3EAA75C86D9BAF7DC6;8473545F4A994C9CB3799F2FFEB251CA;80D56D0620AA441C99C0880EC62161D3;39C4BD7F9A604C63A6F74D9A8575DE9C;A654B89BC4584146A5AFC4A66F2091F6;D7789AFE109E4A4D93D7576AF8A3589E;088974B06FC647A08067D1E7FA96F074;7D8C1C2944B749A18EBAA786BE20B867;020C97206AE541E7A398D07F7C4DB1A8;76078A043AAD40AB8457F1878E80B893;EF7907D5C91D46E1AB8DDD8052478DBD;920022E2BA404367AC4895D5F6DF34A3;F2F8235A36DA4DEDB45530BBB1EE62CE;D3872EF32FBA4C73BE22319F7699CAA7;94241A0EC21546F18B5C1BF87BEEEBCB;C87DFFCF14C545C0ABFBD15B8C1D8163;8D00D8169F9E4C0D8CAA0A874D6BEB5E;AD097850EDEC455889D2A3A2E224D7FC;B7F95C67EEA3448293B0EEE2BC05C0D1;D99C7E41BCE442E7A7784CCCEFA92474;1A1D1CACCCAF4586980FE999466C9B7C;2AB385A1D06C42FABA323C028E740CCD;49A1A5DC4E6144C78A4A5647529E7D4A;DF6B2D3078444E168BCF56E32B15001A;E2CB805CCFAD40F8A03C30CC4B7D4100;19jfkuhpgu0e0lo380sa1k4g8hgooglecom;18C5D7F4232446139145830FD0E07F8E;9603B52DD5CE41E48280AC04FA16DA59;E27BCE4041ED4085B0C78601C2FD3006;9AFDD81F11E64CC998935F5E52E5181E;99A4FD0A7D234F4C9C687D3869BF39A0;44FFF29E867147248B6C61D634E60067;2B1F68DBE1054948AB97DBE7E3B8F8DB;F9B866D0F1B543A98FFF8723248A3167;h0ns6jld18d5dr8ireklf0dch8googlecom;35FF7FC539E84F928BC0B55F501AEF70;F2BF7D285D8A4126972F11D7A2F09543;33C2D9281CBC4FE4AC6A3A2E70487191;BF6D5FC7749D4B5F831D4E8DE4E00342;08A8540204844543BF696F84D7BEDB25;FB29A25F95094119A972BFC24B6D0916;CF9CC41E41034897A58BDEE1E283C0B8;2FC1FC20ED7240239922BFF4BE75282B;8E00907604AE43C39390CFBCC2614786;1858B2D83BD8456ABB92D37CE1B79E97;89EEFB42157C4C13B596B1ED72BB6BDC;57093B04B3CF449AA4324CE2A91B2F0B;A9567659EEC74EC5AC5BBEB08F3A217D;E189B01D8C7E4DBF9F9FE580E4F5648B;E6063BDDD8C34233B44216AB13B6AA10;C0785953EF094CBB959C921A668FFC57;C5D193895FB24DC1A65782A5CA14377E;2CE459F8A4814ACFB79319DDF1295E79;6674EB96D942418DB5D78194D6872348;415846D4C2D249798BFDB77D486670F0;0FFAD07D404A476F8F385D18C21918D0;7078C89A62934C03B97D4A8A819E0E4A;1247F414EFCC4074B3770FEC07F10911;9034D9BB9FA246CC8B4FB2A7FFC5B981;D4EFE83B4E4A42448AD6B4665C1D1460;594E9E8B7E664288A81D1ED47D83D66A;1ACEFE233BF749A9AC8AACAF38C53EBD;E764ED7495CD4EC98249C9A1193CBBAB;D4153662C6284AC6B08566F497EEB943;79EEB473E14E495AB70CAC57B2ECAE86;DDF6E7EF5DE64C8BA4A81BA64D5D61D3;39A50DE9A0FE41B2ABBDE8384CDDAF4C;367CCAB9E9754FFA95E3E22823FF1E94;25973AA4D54A4CFAB436046F356D6431;83FDFC64E3B141428D494AD77B2C498D;5FFAB86A3E1D4F69A7C020F282D5FE5E;5D8F2E1274514E4FAED0DEE44E43C0E0;8D9E7482A39B4FE88C65F4C9756AB623;A74208A49525410C9123C4239769B0B1;58E1A6D1C16B4589AF83124AEAA3E72B;29B0806043904AE7A4E58E2F6356428E;99307AFE1B2B45C2852B22A1C969275F;61A46E3AEAC445999031A722A06E1B69;54378C6469354362907F25FEF29AEBB7;BA96F08AD3204AD3ABEA52E9A56F787D;E277E2BFACE94C80962CF36203B1B0C0;9FE9DE5589CA497B8D124F9F97AE17CA;6AA49DC2276C4107928EE71009486174;827D1591E2D040C1B81243F16FDF8300;3F972251FA504E99BFB537F47CF9B3EB;1347D96E00F04C1F9E1AC4253D403708;1BE89C12C0714EF59E20EE356BE6D3E1;917E5F0CF6E143849BD256A00CEE9F69;241D16E43667432697BACE256047C5CB;ACFD5EF244284D41A3CF8C96A7CFB2EE;11DF52A759F345CABF8CFB721239AF7B;8E0E557EE3EE4AE095F93CECE252F7A7;2DDB5850C03449448F79CC54DE503D30;AEA934D213EB4DD1A3721AD025D88F77;13F186CD9C5341D0BA6AAEA07D9432EC;79A885846F8846B2A045094E1D7B7020;B3D640F07E86460584C7210B0B7D003B;24CAC8085C40493CA3DEB72A90EB706E;904261EC04BE46C8AC814399AF198223;E481C27221CE46678EF504F71DA7C2B4;3720C2D63EAC4331A39B8C380892B364;BFA8C9F2AFC146188C75DE888B57163A;4CA949A439694641B3CC485E02D7F1FB;3F67EA220897464E8267FACD61345206;04DA575154904212B2D0348674971ECC;BBCD1C4332FB4C5F8DFAAA721995C630;6FAD08DE338B4581B8936EBAE65B7903;2B149987079747BA98703BCC2A27CB6D;3F5E0D8D992E4984B6F16745B3E0028E;76519D4AC866437A8C04CE98C5EFD2E8;6F18BA6D28734AC6AB61829CF99EB25C;8E62CAF0CA0E477BADC737793BB77E00;1AF13D7AA4044858948DDB68D7F36B5D;3AFEACF949D64CBCA4E68986AF6ED8D8;9D735FB87BB7421983FB9AC4E567C5FB;ACA3A226D2914522BD504CA6D5F66775;F59DF4E51D674AFAB3BAEBD9C9319838;2847822F815A4D909B2FF00C4FD51FA1;03D2284BDAD14227B9C4E5580EC78471;0EBF5F52E59F41EFBFC2B8A1D0B2B2CC;DFBBA089CF4D4425AA87F5A7463CE208;7A425BA9D3A8471194AA5B3774DCBA1A;8FD1315F5ADC4FCBB4781F557BB06093;CA0B1F1349FC4ABE9824677A0BFD043C;0ABE033FE2904D998527C1D161B02D9B;F0CDE93BA38C43CA9C6C4320E5F64183;4CF28471D0A84DBC8D870721C9A218A7;FD2382C1BB7F47008C8B3C2AA12F1DA4;25290256BFB64166A14097F2A37B644F;3ecfsbnh41mv7egqiab0bj8cncgooglecom;A9537B59610D4B329D08764F48353170;3012611F35F1464E94FAB02F60EB37C8;37B5ABD15A4A4CDC9DE1A0033472B18E;790EC6653DE34D34AE938ED648CEB72C;EF20253C864F4374A11C2CFD965EBA40;0C824558B67749808607B8DAB02BFF6E;1qlp9qhnapmnr1c1216dt1bl5hgooglecom;503F090D57F34F24A254AAC053BE1707;356F2AF42CAE4D689F5A6F9236079A81;87627B5806A049418111AE2C01CBD39B;93D52D9F94CC43FB8EA4E7123F3011A3;E3407857784949458E2018E30AE89C8F;624443723C8C4EB58239CE4ACD341F15;1059AB55A3F64C7EA25421D2C6801666;DD1876C0CB6E48CB981422A0632D99E6;AB7AF43F4BB04C70BB9F45D8EB787D13;BCDF01F6718A4271BE0D5C095FBE1265;5F4F56FEC708458FAB8FAB63DA11B499;5h314oir2lspjci7lek1s8k5lhgooglecom;8AC00D69F10C4C48AC187C6440B8F0C6;9030CFEFB83D4D3F8CC0FE5990478D61;303D44D57BA94E41B8A60056B18F9AEC;1D6615C3147B4DB19C97295588F1EF18;EC0A7A4E48E849B89DB0859F0960C663;D3882759911143DD9A372045EBEA75AF;42609E13098F4962B0BC37ADDA942DD0;19AD24980635452A8AE6051B3B558666;3DD1907A2A514D19AA0F0E3E7634CA32;D872170BB5E14EA393A255C3DADBCF72;9FF48238BE72499985BBDDAA4ACD50D1;9449AD629D3D4494AB0C87BA3A232D52;CA68B3FBD0BC4F439053546383E28087;172A7BAAD9BF4726BDFAFB1EC02E36BF;8C74DF4C5DCB46CCA0BD510DD520C8AE;E8574DFEB0124702B270F4E8B2EBCCA0;FC5E9865A4FB438B9A88C17A2E5FE709;688D16A65DEB4000AAF72FF767A4163F;BB0F733C4F68489ABED05052B1B0A157;2CB64DFA7F7044029DC4EBFDD6E24EC9;419826F22AF847F88DEEC8167EE9C6E7;86C4137412EA49C798195D783EB25336;09A740BD97B34A8F96D4D3CB2A27FD62;D6BD4EE0B29D4B9087E94D08DB283FED;D9608152307A4EB4B987C6D52037B183;8B4324BB69954C618070E7EA581CE7E7;12FD8084F66648A3ABD588EA9125FE30;6CCEFFBE659C4F7A99E7EDD8917A1F1C;69C06599CB674031AAC66983F3ADD952;18922DE21C954597A1CCDAFBC8B21357;4DF54EB41F3E470FA575E43836CE9795;EB0FAA560C55446D968EE61DDBAB1647;111A7DABC6C14D01BF1644255C83D001;0A2DB81E29644CAAB8ADDBAE62EECE2A;3407DEFCB8C6493786045F135AD152FA;914A68D13AD845D39C745B44AA9364CF;0DA167195B3445D2ABCE57C8276F6BD6;E1EF360300D84D889BDFB87A9FDAB5B6;A389953A53EE43BEA3CCDA4298D88EAE;F5BF4C5FE37C40878500FB42AAE26094;7DFDDFDEB4E34785BF22B5B24AA4D00A;6CF39008B6B2422EB03A5FD3A574DA66;EA72413C3649482FBDDDE56F8DD1A80F;29088E1A3CD74892A3099EF17D2C412A;7629AFAD57EB4C6B81CFDD4128FB08C0;C9C46B00E06A49479444118F04D8E482;24ggfhit6r7eon8rvgooa4gorlgooglecom;3F413C3AAFCB489A849187B218908B61;1ABC9FAFC5074FB1BA5368B138772268;3E118E7058C248BA88A383667E774A08;D1147B1431674CCCA466F94D6C3E1888;9B3C1CD78ED0403C98C69D575B068761;7D204726CECC48DD8EB2D73794599BD4;4576F64B43614DF59A9D8D9D5807A464;09D75087CAD549A6BD31D2BC7D5C5DF4;D1356185CF464D369ADFE62F4B911A5C;70E346AB067E46E19659A2A05E67D617;DC804165FC8C45CC9E30EC7E311F5AF7;FA00DC3EC2124AB3960663F42D051323;78D99DBE484348BFB45D5530CE20DCB1;00BB8127F6084E139D01BA2AEB6B6073;190F03FCC690420CBA040BCB70FE7CAF;71EB65F007D543D2A14C5457438C76CE;5123593E34E741B4AED29D80137EF8A9;q7avt2sckjlphegh8rnh98auvcgooglecom;65677A3FFFBE4FBF864D3B52D7BFE1E6;EBCD8D03FD7E441EAC794C6538BCABB8;001FC47B5B574A2EA686C79DEB0953B2;169030652AE14C8F8AD79D19694CE919;A862CB3C7FE84B988C9CE8DC1A391E88;B07CC698C9F640549175F9014A9592A4;AF6C837CA99E4DA5BF726521A9263A82;F416646D0B4C47D2AACACEF64141EC82;9A5391A50E564D06B6EB0301F15ADFB4;72339A2209DE4624BB76EF2F838AADD1;FAA79580E9074E05AA26639941F33288;FAED7E6ED38C40F4BF9ACA186263F52A;79BA7520D9264856B7E80C2DC4F70204;8D308189517F43AB8E0B1A8C64C80B61;E1996BCA18194F36932C44978BE765D3;0F67E432091B4D6AAC6CED54F2268648;DE6D5EF8694641868823BCD72323A09B;764AFCD8D1D74F8EAC940897B2C14516;BEF37E2E1D354D888695D1967C114DF0;AC0CDC017569444F8EB46055ED2A8A2A;06C642B4967C4DCCB83C3E31D37B8BDC;F7CDE95E77484EF4A0E3BA9C2151E916;405DA765179042ABBF02F516A71158E1;46EF7FBC89884E8BA41D8D2310573496;868E11F70DB1468D85657469D7B7834C;07C5357EAAC546DDBE10260CBBCB0A26;D0BB1CA9A58349748640D808D160BA5A;48BDBD69EE5A49499AF213509535CB50;46338D6393FC4B3C97FA3AECDE4360F9;6E9A4E17E5F34A40B71F9325EB00E79A;AB19726BED014D0796690F7ECA52800C;3E0E59BB4351406FAE4A50AC9DA90AC4;FE4FFC96284543D0B29F5087A0BB7F7F;317CCF1F70D048F29F8BB91A0267A5E6;3A2CEC441B0747FA98FCFFB7C73D8956;0E703AB3AF1C4A6DA15AB130F84D37C7;7B3FC401BFE74C1B825A9FE00018FD9F;C52B2677ED2A47B187727BCD1BBE1F01;B8B645F49CE64AF6B84E982421735AB8;B9884C675341488FBA4B2D6855404A95;3E21D1F1495E4EDEA506736E762B35FF;0D163752043A47C994917CAC1D962EF7;7209ADF2687B47B590B2A117C6D45FFE;1570A2FF89374E76932262B3376FCB15;781421B95E7E46E1A93AE6E9D3946181;2404AE6F9FD24A2DBB3FB7F59FC5EA63;B76CB444851B428E9D451BD6A291CD2E;864A5907D3AD452DA42158BA7AFEE9E0;895D86707F164D048F08993C3D8263E7;01B9A5DAB62144F8B3ED894272171840;AB2CDB5D1F6745DFBFF97BE8036FB5A3;A248CB0F3A804CF49910CE81378B02FC;E95B34C7DF20475FA9C2CD447E7EB779;E10C71701912433A8C9CF6744A80A131;FDE96E55AAB149519279B1489ABEFCFE;9566FC01BCBD46A9AF1856D650E7E857;A65307DFCF494885ADFBF0FE946875B8;009B4AC3F88941D6A589A64BA91D6F7C;3t8sup3r0qhg1ek5s4ba92h1ahgooglecom;6B75F4D864A14889A12C1622ED36DD6D;3C2226B6BCE54549B5C8A5D0B8EDB72B;E820224A9C1045C69B520DF040F82B4E;C157BBBB92DC4093AA54926419CF19A1;1rqh8dbs9f5tgav6sj73cvqgiogooglecom;72B677491B114DD0B4A36EEE1563F503;041C35A1AC374C8BAB3929989AEBEA21;72925AFA435247C1BC0131036A719DDB;9580BFA63D7D4DF1B70FBC1CCE29F8AD;35A1924CD5A04E08AD44358C7EC5E861;24AC76185C8A4C7AB826CD654333F350;EF0C477580A84AC1AE46667F4D01186B;7ADCD0B4747E43E194731863914CB5E5;24C3726F94C84DB6A7FE356EB58D0FC9;F3FD573FF7CF45498A95C7C4A7A75A9D;2EB93A65C3484C07AF3DE87EC3A41A69;D587044BD94446AC961ACC1F3559571B;34215B5CC6D1448D89570E5DAED83723;B48C954E3FAE4044964E11B12FFE876F;A536BCB4F5974DAE99DECD5957DA4D17;E0F5D42AF7C546C1AA33EB5E2111F580;52cr9088ik8a88csg39l92s064googlecom;794B4F769C924835BA3A193FA6A79EF5;9C6179FA1BC249E8BC83AB0FE7BC8CA1;C63C268E6E89475CA152348FF133B493;7E790574948F48668ADE9F482B2A3FCB;44A29B01F11749169E8DEBF01A0239AA;D383293E67744B81A640988D05EBDE99;63D5335B477340918E2B91D8C117A9A8;EDB791DB98C64185B7B62586B3B2A059;4BBAFCDCBA22431F9A8AF13D9919A726;1C295ACCB4FB42CD90F2C4A20C86A691;913C7086293D4787BB4206613B2B5BA4;4E66790851CD4E66BB1F59E9CE4D1549;2gtnqjouhf9jf4i1ag9199e5fsgooglecom;3F11F44F57784180AD2CE22E09625792;E2414B8197D042F7BEA72ADCAD4C59CE;82ACD46CE65F4E468801E7838385F9CE;B1C4291183474B7FAC25C19FAF1E157E;F5C71C06630B4CCB9F030980E6D13F6F;2B63E1A3585546AC8184C9006213F50C;22813FB1CD0941C1B78D5D5669618C0E;099754981E0A4C7193D880370D74BFC3;57079216267942828CC50F235C25B9A0;BFB32BC6170048CBB981BCD3D8CA43C2;37BC5DF1A8B046078A3C2C3F3A8416A8;3DB64AA2C6EF407D90F97FB3041D6C88;0D6B90658F834E0B8FB38E07FB0CF513;20006D842F0A47CFAB9B9A7BBD3B32B4;49E47C235637473B8DE2A4B7D1A223A8;DA8375F226044737A454C648F2842856;A47A94051A6E4E1C9FC5A0636A889971;A6C034DF0F874A2E9451342119F970F9;827469EABD7E4B8D9EF027136B249CC7
2020-06-13 07:55:51 modeEnded
2020-06-13 08:05:00 modeStart 9C9B6A4B95A54F0AA4792F820F62EB7D;C8558A2C44CD46FFA4A2883FF90B255B
2020-06-13 08:05:00 modeStarted
2020-06-13 08:05:00 modeUpcoming C1F1AA22A6FE4B93AD488BE7A09E2B75;u1r8an4au3r56s8tl0ff9fpg34googlecom;08901799DD5742FF93A98F187CEEEBCA;9CE221DC518E4ACCA70B5DA860EBB3AA;AB8DAE6C27AA408FB0CCEA6A69DE5C54;t88s7ifs14e7ak30rr5corbgq0googlecom;B15FD4EFDA0045DD998CC7939053262E;7C94851AFC534F4DB15CCBC63B78C21A;0A3B0D9C4A8341A5AF9B4B3E837AA40B;lnq6vmk471at0de202radglm2ggooglecom;7lagp4gc7j4vgcor70hotccr8cgooglecom;224A3B81E7C742FA9065FE3BC55D5B6F;8903D3DA4D9B4D9EBB2873C52A77E8A9;4CEC2299485D4799B1C3EA7EA7D21E5D;FCE33126ADD045A6B8805F087DF9EF9F;9FFDB77BB61E46448AE1E0082D1E6614;CE0A186C340E493784264FD96A10D12E;3D166D326C20493EA3D277C66D57A2A0;986F373FA2634A7D834AF8AEA9364B5E;53FDC9CFFF7642EA8CF4E27300101889;1FC65C3908CA4B61BCC51F26974EB6E2;866AF0FB08494B8BA5E5B6AF9FC71106;v1luhgrf8vq7jjimsmrvmgd3h8googlecom;4225C3CD82D74BC8BD1A05304F8A3373;60BA86E149524B9685B1A0B0ED8072BA;826892DDB6FC4A45A9CEB169A43AD5C1;CA7D05B20A684DC8A14FBFEC479D8818;DC086D2CD4434DCBBFA265541546311A;BAB055B10A0349D0AD35EEB62E8E9E19;9AD22D860D614AF8AC156F2F5CEBCC08;k01pc9ill31055n5g82b9btg28googlecom;pgn5rl2ghqjte2f6irjpom04tkgooglecom;B7BFAC824D8C4CFFA8F1348F79AE15C0;3A39960DB6B54FE58B7C7FAFADE1111E;6EC5EAF9FCCE4215AD0A1C15FD596D9F;BDAB2D186ECC41748ECCD7D07CEA3E75;0AF5050E85C84429ACC7E4D6988E9A59;A61D6ADC0E36450EB625BC45C016BB15;55hr6o3mu8k81cu41v23p1tmmkgooglecom;on7m62vbaa0nmju7mjpv8dlldsgooglecom;ala9miv4svkeb2bpmfloe3rk2kgooglecom;A4FFE269570F42B7837A28382AA73A8E;FD0068C22850425899074572E058A8F0;929F73BB433E4811B805984E3E3251B0;pn20mp9ollb45ip2j9qpd24q48googlecom;85A1AC345168430897B48879CD7C582B;FE5BFB8B79D843379167A77742D86227;573A83F6C3194C6DB56C05F30257827E;A25B7B3F4AE7458B8596BC15F03E0E62;2EE6AE0B6C3D4C389BB8D858D49CF7C0;E446961DC77A4907953099CA269C2526;923A90ACF9794AFAA55160171AB84C5B;60E4E54C5A1C48CD9D46AD33BA103B5E;v4a9eis6lb5cpgcci17jnv9ussgooglecom;CB1F42C6BA594C90B4094CF5C68FCC22;E74248E53E2A401594630515D8349329;179A6157F7ED4049A5101C92BE7346E4;6C566C04A01344EBBF88674F96EEE733;213DB1A118ED4DB58F2399F5EB8C363C;3i2vp5l8v3b81t9e6iougcs044googlecom;3DB0E75EF78B45ABBF60040104E4913D;055935C96FEB48129EA376A524790113;D3200D2C284640F4B1710F192242065E;59C3A60446DF48C58BCEE811BD1CA6E7;3F0E62138AFC40338B923E3445636EEF;7kdm1vm1q4e0d1ofob2m19m328googlecom;E6F52810E04141F0A73F3E68BFE20B98;1F5914C995B9402CA62EE5AAFB278C26;C57EF7BCB82940E886BB3E63E7F88242;486C9592DD824863A69070A95ADF6087;E42A786663974F80868F563E8A89B7C1;BA30F00E348943BAA3E744144AD56C1E;BFB06049432C494995C19FB68FC9B903;16E07D81DE924766854F1D256F0F092D;08b6mp428u82csmmdjv3217a08googlecom;A26B175C025C46E5B47DE188D06E6633;3DA1DA0CF6CB4E8B8C1E4B95536300C6;2745E13A6203427A8F42C1563CB40F61;3FDFF8A41FD84A6493D19B04109EDF48;767F8DF37DC04939A1B56D0C1CEF6BA2;0F52EA77FDAA45F4BD64E7B590323170;4eu84srshr8a1c3aam1hqvhftggooglecom;C2F9E012D9614AE498A4F0276E691990;f7ctcd2st0dgvs21dq6996rb0kgooglecom
2020-06-13 07:58:26 nextUpdate 2020-06-14 07:58:06
2020-06-13 08:05:00 nextWakeup 2020-06-13 19:00:00
2020-06-13 08:05:00 state triggered
Attributes:
alias TNT
event-on-update-reading state
group 📅
hideLaterThan 1d
icon it_internet
room Kalender
Dummy:
Internals:
FUUID 5ee3d372-f33f-8381-1ee7-47cca6c40316278c
NAME dummyTNT
NR 155
STATE tomorrow 0
TYPE dummy
READINGS:
2020-06-13 08:05:00 state tomorrow 0
Attributes:
alias Urlaub
group 📅
room Kalender
Notify:
Internals:
DEF calendar.*:(triggered|changed:.*) { calendarEvents($NAME) }
FUUID 5ee3d3d3-f33f-8381-5211-3e43e485103eb330
NAME notifySetCalendarDummys
NR 156
NTFY_ORDER 50-notifySetCalendarDummys
REGEXP calendar.*:(triggered|changed:.*)
STATE 2020-06-13 08:05:00
TRIGGERTIME 1592028300.12016
TYPE notify
READINGS:
2020-06-12 21:49:42 state active
Attributes:
room Kalender
Subroutine:
sub calendarEvents($) {
my $calDev = shift;
my $value = 0;
my $start = '';
my $upcoming;
my @start = split('\n',CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="start"'));
my @upcoming = split('\n',CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="upcoming"'));
if ( scalar(@start) > 0 ) {
foreach $start ( @start ) {
CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' '.((split('\s',$start))[0] eq 'Urlaub' ? 1 : 0));
$value = 1 if ( int((split('\s',$start))[1] / 86400) != int(time() / 86400) and (split('\s',$start))[0] eq 'Urlaub' );
}
}
else {CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' 0')}
if ( scalar(@upcoming) > 0 and $value == 0 ) {
foreach $upcoming ( @upcoming ) {
$value = 1 if ( length($upcoming) > 0 and (split('\s',$upcoming))[0] eq 'Urlaub' );
}
}
CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' tomorrow '.$value);
}
Feiertage Hessen:
Internals:
FUUID 5e906189-f33f-8381-7e22-771027a131cb435f
HOLIDAYFILE ./FHEM/holiday/he.holiday
NAME he
NR 78
READONLY 1
STATE none
TRIGGERTIME 1592085602.0855
TYPE holiday
READINGS:
2020-06-13 00:00:02 state none
2020-06-13 00:00:02 tomorrow none
2020-06-13 00:00:02 yesterday none
Attributes:
alias Feiertage Hessen
group 📅
icon time_calendar
room Kalender
Dein Dummy ist falsch.
Du hast vergessen readingsList und setList zu setzen.
Internals:
FUUID 5c48b398-f33f-b39c-3f77-0c2c5073774c4894
NAME dummyBrbFerien
NR 56
STATE 0
TYPE dummy
READINGS:
2020-06-14 14:08:30 state 0
2020-06-14 14:08:30 tomorrow 0
Attributes:
alias Brb Ferien
event-on-change-reading state,tomorrow
group Ferien
readingList tomorrow state
room Kalender
setList tomorrow:0,1 state:0,1
Arghs, hatte nur den Text gelesen aber nicht den code komplett durchforstet weil ich das Hirn anstrengen wollte. Vielen Dank!