Kalender mit Titel auslesen und ver. Dummies steuern

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

Vorheriges Thema - Nächstes Thema

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.