FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Kalendermodule => Thema gestartet von: Paul Guijt am 22 Oktober 2020, 13:47:16

Titel: Eine Kalenderänderung in Calendar, wie man sie wahrnimmt und verarbeitet
Beitrag von: Paul Guijt am 22 Oktober 2020, 13:47:16
Hallo Alle,

Wenn eine (ankommende) Kalendereintrag ändert, wie bemerkt mann dass? Und hat jemand eine Vorschlag, die Änderung zu verarbeiten?

Freundliche Grüßen,
Paul
Titel: Antw:Eine Kalenderänderung in Calendar, wie man sie wahrnimmt und verarbeitet
Beitrag von: Dr. Boris Neubert am 22 Oktober 2020, 19:58:43
Hallo Paul,

ich habe sicherheitshalber gerade noch extra in den Code geschaut: die Änderung eines Kalendereintrags kannst Du nicht über ein Event greifen. Ich gehe dabei davon aus, dass der Kalendereintrag im Ursprungskalender gemeint ist und nicht den Wechsel des Zustands des Termins.

Im Ursprungskalender sind VEVENTs. Ein VEVENT wird in FHEM zu keinem, einem oder mehreren Terminen aufgelöst. Da ist es schon schwer überhaupt zu definieren, welche Events FHEM auslösen soll.

Wozu willst Du denn wissen, ob ein Kalendereintrag im Ursprungskalender geändert wurde? Was ist der Anwendungsfall? Vielleicht gibt es eine Lösung dafür auch ohne die Prüfung.

Viele Grüße
Boris
Titel: Antw:Eine Kalenderänderung in Calendar, wie man sie wahrnimmt und verarbeitet
Beitrag von: Paul Guijt am 23 Oktober 2020, 14:27:37
Hallo Boris,

Ich möchte meinen Alarm über meinen Google-Kalender planen. Aber es kann sein, dass ich nachdenklich meine Weckzeit absagen möchte.

Mein Wecker ist ein Squeezebox-Radio, das seinen Wecker einblendet, wenn es weiß, wie spät es gewünscht ist. Ich kann der Radio über FHEM einstellen, auch einen Alarm mit Weckzeit. Dies funktioniert jedoch nicht über modeStart oder modeAlarm, das ist zu spät.

Um dieses Problem zu umgehen, dachte ich daran, das Weckerereignis zwei Stunden im Voraus über modeUpcoming zu sehen und es dann im Radio einschalte, da ich in diesen zwei Stunden dazwischen (hoffentlich) schlafe.

Aber allgemeiner: Elemente in einem Kalender möchten manchmal geändert werden oder verfallen.

Freundliche Grüße,
Paul
Titel: Antw:Eine Kalenderänderung in Calendar, wie man sie wahrnimmt und verarbeitet
Beitrag von: Dr. Boris Neubert am 23 Oktober 2020, 19:15:35
Hallo Paul,

wenn ich Deinen Anwendungsfall betrachte, würde ich wie folgt vorgehen:
- im Google-Kalender die Benachrichtigung auf 2 Stunden vor dem Termin setzen
- in FHEM ein notify auf das Alarm-Event setzen (siehe Beispiel  Inform about garbage collection in der commandref). Das notify stellt das Squeezebox-Radio auf die Weckzeit (eigentliche Startzeit des Termins).
- Updates des Kalenders häufiger als alle zwei Stunden, um neu eingestellte Wecker zu berücksichtigen.

Problem: wenn der Weckertermin nach Stellen des Squeezebox-Radios gelöscht wird, bleibt der Alarm im Squeezebox-Radio an.

Viele Grüße
Boris
Titel: Antw:Eine Kalenderänderung in Calendar, wie man sie wahrnimmt und verarbeitet
Beitrag von: Paul Guijt am 24 Oktober 2020, 10:20:36
Hallo Boris,

Ich habe gestern dieses gemacht:
defmod AgendaFollowUp notify Agenda:modeUpcoming:.* { my $reading="$EVTPART0";;;; my $uid= "$EVTPART1";;;; my $Format = "\$M \$T1 \$S" ;;;;\
   my $Str = fhem("get Agenda events filter:uid=='".$uid."' format:text limit:to=5400" );;;; \
   my ($Time, $What) = split( / /, $Str ) ;;;;\  \
   if ( $What eq "Wekker" ) \
        { fhem("set SB_Slaapkamer alarm1 time $Time ") ;;;; fhem("set SB_Slaapkamer alarm1 enable ") } \
   }


Heute werde ich weiter machen mit testen.

Gestern hatte ich Probleme mit der format-Option von "get events" in Perl. Fhem verschluckte sich immer wieder am $ -Zeichen. Ich habe es seitdem versucht mit der $Format, aber muss es noch testen. Ich habe bemerkt das 'switch ... case' und 'given ... when' nicht functionieren.

Freundliche Grüße,
Paul
Titel: Antw:Eine Kalenderänderung in Calendar, wie man sie wahrnimmt und verarbeitet
Beitrag von: Dr. Boris Neubert am 24 Oktober 2020, 10:48:25
Hallo Paul,

habe die Erfahrung gemacht, dass inline-Perl-Code schwer schreibbar ist wegen der erforderlichen Maskierungen  ;;  \

Vielleicht geht es einfacher, eine 99_MyUtils.pm anzulegen und darin eine Funktion

sub wekkerchecker() {
  my ($reading, $uid)= @_;
  # ...

}


und diese im Notify mit

{ wekkerchecker($EVTPART0,$EVTPART1) }

aufzurufen.

Grüße
Boris
Titel: Antw:Eine Kalenderänderung in Calendar, wie man sie wahrnimmt und verarbeitet
Beitrag von: betateilchen am 24 Oktober 2020, 10:58:32
Was spricht denn dagegen, das Einschalten der Squeezebox direkt über den Kalender von FHEM aus zu veranlassen, anstatt die Uhrzeit von FHEM in die Squeezebox zu übertragen?

Wenn man den eingebundenen Google Kalender beispielsweise alle 30 Minuten einliest und verarbeitet, kann man das Einschalten auch noch recht kurzfristig unterbinden, indem man den zugehörigen Termin löscht.

Alternativ könnte man auch das "Programmieren" des Weckers erst eine Minute vor der gewünschten Weckzeit durchführen. Also um 06:59 dafür sorgen, dass die Squeezebox eine Weckzeit von 07:00 erhält.
Titel: Antw:Eine Kalenderänderung in Calendar, wie man sie wahrnimmt und verarbeitet
Beitrag von: Paul Guijt am 24 Oktober 2020, 11:39:22
Sehr dekadent: Dann verpasst man das Einblenden des Alarmsignals ...
Titel: Antw:Eine Kalenderänderung in Calendar, wie man sie wahrnimmt und verarbeitet
Beitrag von: Paul Guijt am 24 Oktober 2020, 12:01:41
Hallo Boris,

Agenda:modeUpcoming:.* { my $reading="$EVTPART0"; my $uid= "$EVTPART1"; my $Format = "\$T1 \$T2 \$S" ;
   my $Str = fhem("get Agenda events filter:uid=='".$uid."' format:custom='$Format' limit:to=5400" );
   my ($TimeStart,$TimeEnd,$What) = split( / /, $Str ) ;

   fhem ("setreading Agenda aan $TimeStart . $TimeEnd . $What ") ;

   }


wirkt wie gewünscht. Aber nicht wenn ich $M schreibe statt $S: $What ist dann leer. Aber für mich genügt es.

Freundliche Grüße,
Paul
Titel: Antw:Eine Kalenderänderung in Calendar, wie man sie wahrnimmt und verarbeitet
Beitrag von: Dr. Boris Neubert am 24 Oktober 2020, 18:15:02
Zitat von: Paul Guijt am 24 Oktober 2020, 12:01:41
Aber nicht wenn ich $M schreibe statt $S: $What ist dann leer.

Es könnte daran liegen, dass der Mode mit Leerzeichen beginnt (rechtsbündig 9stellig). Das split greift dann ggf. nicht. Da hilft nur Debuggen.