Kalender mit Titel auslesen und ver. Dummies steuern

Begonnen von no_Legend, 09 Januar 2019, 09:31:34

Vorheriges Thema - Nächstes Thema

no_Legend

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

IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

darkness


Beta-User

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.).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

no_Legend

#3
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


IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Otto123

#4
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 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 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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

no_Legend

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 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.
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

#7
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';
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

darkness

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


no_Legend

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
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

no_Legend

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
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Otto123

#12
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? 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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

no_Legend

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? 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.
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Otto123

#14
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

no_Legend

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
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

no_Legend

#17
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


IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Otto123

#18
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!
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

no_Legend

Wird nicht beim einlesen des Kalenders ein Event erzeugt?
Dazu wie lange dauert es bis das Event erzeugt wird?
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Otto123

#20
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?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

no_Legend

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.
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Otto123

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:fulleingibst?
oder get Kalender_Rob_FHEM events format:full limit:count=1,from=+0d
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

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 ...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

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 
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

no_Legend

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:fulleingibst?
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
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

no_Legend

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
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

no_Legend

@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
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

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"

@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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

no_Legend

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"

@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")};
}

IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

#35
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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

no_Legend

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
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

no_Legend

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
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

nils_

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??
viele Wege in FHEM es gibt!

no_Legend

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.
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

no_Legend

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
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

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) }
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

no_Legend

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
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

no_Legend

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.
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Otto123

Ja mein Hinweis war nur für den Betreff. Das mit dem Dummy  muss Leon Dir erklären, das ist mir zu kompliziert.  :D
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

Das Problem ist das ich mit mehreren Dummys und mehreren Kalendern arbeite. Pro Kalender ein Dummy. Das musst Du bisschen anpassen. Ich schaue mal.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

no_Legend

#53
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
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

Dreggwatz

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



CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Dreggwatz

Arghs, hatte nur den Text gelesen aber nicht den code komplett durchforstet weil ich das Hirn anstrengen wollte. Vielen Dank!