Neues Modul: 57_GCALVIEW Google Kalender Viewer (+Abfall Kalender)

Begonnen von mumpitzstuff, 04 Oktober 2017, 00:02:11

Vorheriges Thema - Nächstes Thema

mumpitzstuff

Habe jetzt mal getestet und konnte eigentlich nichts finden:

Das sind meine Kalender:
pi@raspberrypi /opt/fhem/FHEM $ gcalcli list --nocolor
Access  Title
------  -----
  owner  xyz@googlemail.com
  owner  Feiertage
  owner  Worktime
  owner  Müllabfuhr
  owner  Dienstplan
reader  Contacts
reader  Feiertage in Deutschland


Hier gibt es also "Feiertage" und "Feiertage in Deutschland".

Der Aufruf "gcalcli agenda --calendar "Feiertage" --detail_all --tsv" liefert mir:

2018-01-07      15:00   2018-01-07      16:00   https://www.google.com/calendar/event?eid=xyz            test                    Feiertage       xyz@googlemail.com

Der Aufruf "gcalcli agenda --calendar "Feiertage in Deutschland" --detail_all --tsv" liefert mir:

2018-01-06      00:00   2018-01-07      00:00   https://www.google.com/calendar/event?eid=xyz            Heilige Drei Könige (regionaler Feiertag)               Feiertag in: Baden-Württemberg, Bayern, Sachsen-Anhalt  Feiertage in Deutschland       de.german#holiday@group.v.calendar.google.com

Das habe ich von der Kommandozeile aus gemacht und zur Sicherheit mit einer Debugausgabe mit meinem Aufruf im Modul verglichen:

gcalcli agenda 01/06/2018 03/07/2018  --calendar "Feiertage in Deutschland" --detail_all   --tsv

Ich kann jetzt erst einmal nichts merkwürdiges entdecken. Kannst du das vielleicht mal auf ähnliche Art und Weise auf der Konsole bei dir machen als pi User und gucken, ob das da auch auftritt?

Wenn nicht, dann würde ich dir eine spezielle Version zuschicken, in der der Aufruf von gcalcli immer ins Logfile geschrieben wird. Vielleicht sieht man dann da irgend was komisches.

mumpitzstuff

@inoma:

Das mit dem includeStarted habe ich mir ebenfalls angsehen. Das ist leider eine größere Umstellung, sonst hätte ich das schon gemacht. Bisher verwende ich hier einen Parameter beim gcalcli Aufruf. Hier kann ich aber nicht angeben, dass sich das nur auf bestimmte Kalender beziehen soll. Ich muss deshalb an der Stelle einen eigenen Filter schreiben, der mir die Events dann nur für bestimmte Kalender filtert oder eben nicht. Zusätzlich dazu muss ich dann das Attribut includeStarted so erweitern, dass man hier die Kalender angeben kann anstatt nur 0 oder 1. Insgesamt ist es etwas, dass ich nicht übers Knie brechen möchte.

blasterx

ich bekomme als Ausgebe bei
gcalcli agenda --calendar "Schichten" --detail_all --tsv

2018-01-08      07:30   2018-01-08      16:00   https://www.google.com/calendar/                    event?eid=xyz            Frühschicht                     Schichen Diana    xyz@googlemail.com

2018-01-08      13:21   2018-01-08      22:01   https://www.google.com/calendar/                    event?eid=xyz              Mittelschicht                   Schichten            xyz@googlemail.com



Ich kann nur versuchen die Kalender umzubenennen.

Gruß BlasterX
Gruß-BlasterX

mumpitzstuff

Das ist eigenartig aber wenn es bereits auf der Konsole nicht funktioniert, dann kann ich auf Modulebene wenig machen. Vermutlich wirst du dann tatsächlich den Kalender umbenennen müssen.
Wenn du das machst, dann musst die die Authentifizierung erneut durchführen und zuvor .gcalcli_oauth und .gcalcli_cache löschen. Die Authentifizierung ist mit den Kalendern verknüpft und muss deshalb neu gemacht werden, wenn man an den Kalendern etwas verändert.

blasterx

ich habe jetzt die Kalender umbenannt und siehe da, alles geht wie es soll.

Gruß BlasterX
Gruß-BlasterX

Jamo

Zitat@inoma:

Das mit dem includeStarted habe ich mir ebenfalls angesehen....

Kein Problem, ich freu mich das Du dran gedacht hast. DANKE!!!
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

borsTiHD

#141
Zitat von: inoma am 06 Januar 2018, 00:40:15
@borsTiHD

Du hattest mein Beispiel von der ersten seite benutzt: Da ist noch ein Fehler drin, es werden ja nur 'at' für den jeweiligen Tag erzeugt, wenn Du aber einen Google Kalendereintrag auf 00:00 gesetzt hast, kann es sein das dieser Eintrag verpasst wird weil der Eintrag ja erst 'tomorrow' ist (der trigger ist ja auf GoogleCalendar:today_00[1-9]_[be]time).

1) Der trigger muss auf GoogleCalendar:to.*_00[1-9]_[be]time) geändert werden, damit today und tomorrow berücksichtigt werden
2) Man muss also abfragen ob der Kalendereintrag 'today' ist, dann sollte die startzeit in der Zukunft liegen, wenn der Eintrag 'tomorrow' ist, sollte die Startzeit kleiner als in 'jetzt sein', also: if (($hm lt $EVENTarray[1] && $EVENTarray[0] =~ 'today_.*') || ($hm gt $EVENTarray[1] && $EVENTarray[0] =~ 'tomorrow_.*'))

Ich habe das im Originalpost jetzt geändert.

Du musst auch dran denken das beim 'at' mit mehreren Befehlen das semikolon verdoppelt werden muss, ich habe auch dafür das Beispiel im ersten post geupdatet.


Sorry für die Späte antwort.  :)
Lief bei mir egt alles soweit... allerdings wurde der Trigger bei mir öfters ausgelöst (so oft wie ich meinen Kalender auslese) und ich musste noch sicherstellen das er meine Heizungsprofile dabei nur einmal am Tag ändert.
Dafür hab ich noch eine Abfrage hinzugefügt, wo geprüft wird, welches Profil bei meiner Heizung derzeit aktiv ist, ist es das Profil, das eingestellt werden soll dann wird nichts unternommen.
Sprich, ich schaue egt nur was für ein Termin/Schicht generell an diesem Tag ist, welche dann kurz nach 0 Uhr umgestellt wird. Aber ja, sollte ich auch mal ändern... denn ich hab Schichten (Frei, Urlaub) die als Ganztagstermin drin stehen und meine normalen Schichten (Tag-/Spät-/Nachtschicht) stehen mit ihren richtigen Uhrzeiten im Kalender.

Mit den "at"'s arbeite ich derzeit nicht.
Aber das wäre für die Zukunft sehr Sinnvoll wenn ich weitere Sachen mithilfe des Kalenders steuern möchte, oder was ich noch machen möchte ist, sobald meine Schicht endet, soll in einem gewissen Zeitabstand die Heizung gestartet werden, noch bevor ich nach Hause gekommen bin (zum kuscheligen Vorwärmen :P ). Das nehme ich ein andermal in Angriff.

Jedenfalls vielen Dank das du dir Sorgen drum gemacht hast und das du die Änderung noch hinzugefügt hast.. :)
Ich war schon sehr froh das du deine Arbeit mit allen teilst, gefiehl mir sehr gut.  ;D

Viele Grüße
borsTiHD

mumpitzstuff

@inoma:

Ich habe mal eine Testversion für dich zusammen gebaut. Kannst du mal bitte gucken ob das so ungefähr hin kommt?

Nachdem das Modul eingespielt ist (shutdown restart nicht vergessen) und sich das Modul das erste Update geholt hat, sollte userattr automatisch erweitert werden um calendarIncludeStarted (ansonsten userattr löschen und noch mal ein Update holen). Das kann man dann als Attribut auswählen und hier einen oder mehrere Kalender angeben. Die Termine der dort angegebenen Kalender sollten dann gefiltert werden, wenn diese bereits gestartet sind. Das alte Attribut includeStarted muss auf 1 stehen, damit der Vorfilter erst mal alles Termine durchlässt und der neue zweite Filter greift.

Sry wegen der Bezeichnungen und der noch komischen bzw. falschen Logik. Ich möchte erst mal nur wissen ob es grundlegend funktioniert. 

mumpitzstuff

@blasterx: Inzwischen ist mir auch eingefallen wie man dein Problem hätte viel einfacher lösen können. Man hätte schlicht ein entsprechendes filterSource Attribut setzen können. Sry für die Umstände.

Jamo

Hallo mumpitzstuff,
die testversion 1.0.1 funktioniert soweit. Wenn ich über das attribut calendarIncludeStarted den regulären Kalender (also den nicht- Geburtstagskalender) angebe, werden für diesen die gestarteten Termine gelöscht, die Termine für den Geburtstagskalender bleiben bestehen.
Allerdings ist das userattribut calendarIncludeStarted nicht automatisch angelegt worden, auch nachdem ich das attr userattr gelöscht hatte. Es wurde gar kein userattr mehr angelegt. Ich habe es also einfach per Hand eingetragen, das hat dann auch funktioniert.

Schonmal ein RIESEN Danke!!!
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

mumpitzstuff

Ah stimmt. Habe jetzt den Code nicht vor Augen, aber es kann sein, dass die Erzeugung davon abhängig war, ob calendarFilter existiert oder nicht.

Schon mal danke fürs testen. Ich werde es dann noch rund machen...

mumpitzstuff

#146
@inoma

Hier wäre dann noch mal sicherheitshalber die hoffentlich finale Version zum testen mit folgenden Besonderheiten:

1.) Das Attribut includeStarted wurde entfernt! Bitte in allen aktiven Kalendern gucken, ob das Attribut gesetzt ist und gegebenenfalls VOR dem Update löschen.
2.) Update wie gewohnt durchführen und shutdown restart nicht vergessen.
3.) Falls das Attribut calendarFilter gesetzt ist, bitte kurz löschen und ein Update des Kalenders durchführen. Dadurch sollte userattr um den Eintrag calendarIncludeStarted erweitert werden.
4.) Jetzt kann calendarFilter wieder gesetzt werden.
5.) Der Default ist jetzt, das alle Termine die bereits gestartet sind, raus gefiltert werden. Will man das für einen Kalender nicht, dann muss man calendarIncludeStarted auf den entsprechenden Kalender setzen. Damit ist das Default Verhalten genau Invertiert zur alten Version, also bitte aufpassen.

Wenn alles funktioniert, würde ich es so offiziell frei geben wollen.

Jamo

Hallo Mumpitzstuff,
gerade getestet, funktioniert alles so wie beschrieben, vielen Dank nochmal. Erste Sahne!
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

mumpitzstuff

Das Update wurde eingespielt und ist jetzt über update all verfügbar.

Bitte löscht unbedingt das Attribut includeStarted vor dem Update, sonst meckert FHEM beim nächsten Start.

https://forum.fhem.de/index.php/topic,77502.msg750756.html#msg750756

Jamo

Hallo Mumpitzstuff,
wenn Du mir nochmal helfen könntest?  Wie kann ich einen Kalender in der Readingsgroup 'excluden'?
Ich habe mir jetzt zusätzlich zum Geburtstagskalender und zum Terminkalender einen 'Reminder' Kalender gemacht, dort kommen nur Erinnerungen rein,
also ich lasse mir über deinen Calender eventgetrieben zum Erinnerungstermin dann eine Pushnachricht schicken.
Aber die Reminder möchte ich nicht unbedingt in der Readingsgroup als Termin sehen. Hast Du da einen Tipp für mich?

Danke!
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack