[Modul] iCal Calender in IP Symcon lesen und verarbeiten

Danke probiere ich nachher gleich aus

Swen

Ich habe in meinen Kalendern, warum auch immer, ab und an nicht sauber sortierte Kalender. Oft betrift dies zudem Termine, die lange in der Vergangenheit liegen.

14.03.2023, 23:32:46 | LOG_ERR | parse: DTEND, dates are not in (asc) order (20220829T090000 < _20220825T090000_)

Dann wird der gesamte Kalender nicht angezogen. Kann man dagegen irgendwas tun? Die Prüfung abschaltbar machen?

Vermutlich hat das was mit Serien-Terminen zu tun.

Könntest du mir einmal den betroffenen vevent Eintrag deines Kalenders zukommen lassen?

Ich schicke dir mal den gesamten Kalender als PN. Habe die Summary Spalte automatisiert entfernt. Dabei könnte theoretisch was zerschossen worden sein.

Das Modul ist super, der Zugriff auf normale Kalender ist für mansch Fragestellungen schon hilfreich - vielen Dank für die Arbeit.

Ich habe aber eine Frage: für bestimmte Anwendungsfälle nutz mir die Möglichkeit der Meldungsvariablen nichts, ich durchsuche den Kalender selbst. Das ist auch soweit i.O., ich hole den Kalender mit ICCR_GetCachedCalendar() und gehe das array durch.

Um immer einen aktuelle Stand zu nutzen, wäre ICCR_UpdateCalendar() richtiger, aber ich würde gerne vermeiden, das der Kalender zu häufig abgerufen wird - einmal zyklisch und dann durch jedes Script, das den Kalender verwendet.

Ich habe keine Möglichkeit gefunden, das ich nach dem zyklischen Aktualisieren ein Script aufrufen kann - oder habe ich das übersehen?

Es gibt auch keine Variable der Instanz (wie z.B. letzte Aktualisierung oder Anzahl der Termin oder …), auf deren Aktualisierung ich triggern könnte.

Gibt es da etwas vergleichbares bzw. wäre etwas denkbar?

Ich lasse den Kalender einmal täglich über die Instanz aktualisieren.
Dann habe ich ein allgemeines Kalenderscript, das über Timer einmal nachts (neuer Tag) und einmal abends (aktuelle Erinnerung für Folgetage) ebenfalls eine Kalenderaktualisierung durch ICCR_UpdateCalendar() durchführt.
Die Notifier arbeite ich dann in einem anderen Programm ab ( z.B. „Urlaub“ → Abwesenheit Steuerung aktivieren).
Ist vielleicht nicht das was du suchst, aber könnte ein Denkanstoss sein.

Grüße, Peter

Eine Variable „letzte Aktualisierung“ macht sicherlich Sinn. Werde ich nächste Woche mal einbauen.

1 „Gefällt mir“

Nach 4 Tagen mit jeweils 3h Fehlersuche, ist mir aufgefallen, dass wenn der Status eines Termins auf „Frei“ gesetzt wird, funktioniert der KOMPLETTE Auslesevorgang nicht mehr. Es wird einfach „keine Einträge vorhanden“ ausgegeben.

Außerdem hätte ich noch einen Wunsch, ich würde es schön finden, wenn man nicht nur den Titel sondern auch den Ort „durchsuchen“ könnte.

Gz Hannes

Was verstehst du da konkret drunter? Kannst du mir sagen, um welches Property der RFC5545 Spec es sich da handelt? Ist es das FREEBUSY Property?

Ich könnte mir vorstellen, dass die verwendete Bibliothek damit vielleicht nicht zurechtkommt, oder das Format nicht korrekt ist.

Ich bräuchte da mal den betroffenen VEVENT Eintrag des Kalenders.

Das würde das ganze sehr verkomplizieren. Du könntest aber natürlich den Ort mit in den Titel aufnehmen.

Moin @bumaas,

mir ist beim Kalenderabruf ein sonderbares Verhalten aufgefallen und ich wollte mal anfragen, ob Du evtl. eine Idee hast, woher das Verhalten rühren könnte.

Und zwar nutze ich das Modul für meine Wecker Routine. Dazu rufe ich früh morgens die Daten aus dem Kalender ab:

Ich habe folgende Kalender Konfiguration:

Das führt dann zu folgendem, unerwarteten Ergebnis wenn das Skript jeweils um 1 bzw. 2 Uhr aufgerufen wird:

Ich hatte bereits die Serverzeit in Verdacht, aber hier scheint alles zu passen:

Handelt es sich hier evtl. um einen kleinen Bug? :lady_beetle:
Theoretisch sollte doch bereits ab 0 Uhr der „neue Tag“ abgerufen werden, oder?
Aufgefallen ist mir das Verhalten übrigens, weil mein Wecker seit der Zeitumstellung nicht mehr funktioniert hat. :laughing:

Beste Grüße
@Wolfstep

Ja, so sollte es sein. Momentan habe ich noch keine Erklärung. Könntest du einmal die Debugausgabe von einem 1:00 Uhr Lauf festhalten?

Dort wird der Filter ausgegeben:

06.04.2023, 10:33:04 |       ImportCalendar | cached time: (DaysToCacheBack: 0, DaysToCache: 0, 2023-04-06 00:00:00 - 2023-04-07 00:00:00)

Gerne!

Das wäre dann einmal der Log-Eintrag von 1 Uhr:

04/06/23 01:00:01 | 14370 | DEBUG | iCal Calendar Reader | ImportCalendar: cached time: (DaysToCacheBack: 0, DaysToCache: 0, 2023-04-05 00:00:00 - 2023-04-06 00:00:00)

Und hier der Logeintrag von 2 Uhr:

04/06/23 02:00:01 | 14370 | DEBUG | iCal Calendar Reader | ImportCalendar: cached time: (DaysToCacheBack: 0, DaysToCache: 0, 2023-04-06 00:00:00 - 2023-04-07 00:00:00)

Hier noch der Part davor (1 Uhr):

04/06/23 01:00:00 | 14370 | DEBUG   | iCal Calendar Reader | ReadCalendar: Calendar Statistic - Length: 32809, VEVENT: 81, STANDARD: 1, VTIMEZONE: 1, DAYLIGHT: 1
04/06/23 01:00:01 | 14370 | DEBUG   | iCal Calendar Reader | ImportCalendar: ProvidedTZ: Array
(
    [TZID] => Europe/Berlin
    [DAYLIGHT_RRULE] => Array
        (
            [FREQ] => YEARLY
            [BYDAY] => Array
                (
                    [0] => Array
                        (
                            [0] => -1
                            [DAY] => SU
                        )

                )

            [BYMONTH] => 3
        )

    [STANDARD_RRULE] => Array
        (
            [FREQ] => YEARLY
            [BYDAY] => Array
                (
                    [0] => Array
                        (
                            [0] => -1
                            [DAY] => SU
                        )

                )

            [BYMONTH] => 10
        )

    [TZOFFSETTO] => +0100
    [TZOFFSETFROM] => +0200
)

Hilft Dir das schon weiter, oder brauchst Du noch etwas?

Super! Bestens aufbereitet :slight_smile:

Also liegt es schon am um 01:00 falsch gesetzten Filter, der noch auf den alten Tag zeigt. Das sollte erst einmal für die Suche reichen.

1 „Gefällt mir“

Ich habe eine neue Version hochgeladen:

2.1 build 91
korrigiert:

  • der Tageswechsel wird nun nach der Zeitzone des Servers berechnet
1 „Gefällt mir“

Top! Vielen Dank für die schnelle Anpassung – habs direkt eingespielt! :blush:

@bumaas

Hallo ich hatte das letzte Update eingespielt und heute ist uns aufgefallen, dass die Müllabfuhrtermine um einen Tag zu früh angezeigt werden.

Wie komme ich zum Test auf die Vorgängerversion zurück ?

Grüße
lueralba

Gute Frage :slight_smile: Ich hatte gedacht, dass man im Module Control über den passenden Github Link mit der CommitID auf die gewünschte Version wechseln kann. Aber bei mir will er nicht. :frowning:

Kannst du mir den Abfallkalender mal schicken?

@bumaas

Aus dem Modul:

Die folgenden Einträge wurden gelesen:

Array
(
[0] => Array
(
[UID] => 7tdrtvknk209elcohq2ukc80mu@google.com
[Name] => Abholung Wertstoffe
[Status] => CONFIRMED
[Location] =>
[Description] =>
[From] => 1681171200
[To] => 1681257600
[FromS] => 2023-04-11T02:00:00+02:00
[ToS] => 2023-04-12T02:00:00+02:00
[allDay] => 1
)

[1] => Array
    (
        [UID] => 4n0dcphtvoot1bjg91ls8mri5u@google.com
        [Name] => Abholung Biomüll
        [Status] => CONFIRMED
        [Location] => 
        [Description] => 
        [From] => 1681257600
        [To] => 1681344000
        [FromS] => 2023-04-12T02:00:00+02:00
        [ToS] => 2023-04-13T02:00:00+02:00
        [allDay] => 1
    )

[2] => Array
    (
        [UID] => 4ffrabab8ssqg07vh1bjcnhffc@google.com
        [Name] => Abholung Papiermüll
        [Status] => CONFIRMED
        [Location] => 
        [Description] => 
        [From] => 1681257600
        [To] => 1681344000
        [FromS] => 2023-04-12T02:00:00+02:00
        [ToS] => 2023-04-13T02:00:00+02:00
        [allDay] => 1
    )

[3] => Array
    (
        [UID] => 5o53lf9kk9afd518h02q1vv3im@google.com
        [Name] => Abholung Laubsäcke Ludi
        [Status] => CONFIRMED
        [Location] => 
        [Description] => 
        [From] => 1681689600
        [To] => 1681776000
        [FromS] => 2023-04-17T02:00:00+02:00
        [ToS] => 2023-04-18T02:00:00+02:00
        [allDay] => 1
    )

[4] => Array
    (
        [UID] => 3d37it9oai14vgkfjo32grahb6@google.com
        [Name] => Abholung Hausmüll
        [Status] => CONFIRMED
        [Location] => 
        [Description] => 
        [From] => 1681862400
        [To] => 1681948800
        [FromS] => 2023-04-19T02:00:00+02:00
        [ToS] => 2023-04-20T02:00:00+02:00
        [allDay] => 1
    )

)

Der Google-Kalender:




Was mir eben noch auffällt:

Die Abholtage sind am Jahresanfang angelegt mit den 2-/4-wöchentlichen Wiederholungen.
Dann habe ich die Feiertags-Verschiebungen (meißt +1 Tag) nachträglich angepasst.
Evtl. hat dass damit zu tun ?
Dann wäre es mit dem Update Zufall.

Mal sehen was Du hier erkennst…

P.S.: Da IPS im Dockercontainer unter einer Synology läuft, könnte ich recht einfach den Modulordner aus einem älteren Backup ziehen. Macht es SInn für Dich ?

Danke schon Mal
lueralba

Hi,
wann hast Du aktualisiert? Wenn es noh nicht lange her ist aktualisiere mal den Cache. Im array steht nämlich eindeutig 12.4. drin.

Ralf