[Modul] iCal Calender in IP Symcon lesen und verarbeiten

Wie gesagt

Demnach ist der Beginn des Betrachtungszeitraums bei 0 Tagen: 2024-11-08 00:00:00

Da es sich hier um einen heutigen Termin handelt wird er angezeigt.

Morgen wird er nicht mehr angezeigt werden.

OK, danke für deine Erklärung das die Grenze immer um Mitternacht ist.
Ich hatte gehofft, das es möglich wäre, die Grenze in Abhängigkeit von der Uhrzeit des Events zu beeinflussen und nicht Fix jeden Tag um Mitternacht.
So werden halt auch vergangene Termine des heutigen Tages in Symcon angezeigt - bei Outlook werden diese als beendet gehandelt.

Hallo,

nach dem Installieren der Testversion erhalte ich beim Laden des Kalenders folgende Meldung:

Fatal error: Uncaught Exception: DateTimeZone::__construct(): Unknown or bad timezone ((UTC +01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna) in C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\DateTimeZoneFactory.php:101
Stack trace:
#0 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\DateTimeZoneFactory.php(101): DateTimeZone->__construct('(UTC +01:00) Am...')
#1 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(532): Kigkonsult\Icalcreator\Util\DateTimeZoneFactory::assertDateTimeZone('(UTC +01:00) Am...')
#2 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(503): Kigkonsult\Icalcreator\Util\RegulateTimezoneFactory->processDatePropsTZIDattribute('DTSTART', '20250330T000000', Array)
#3 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(322): Kigkonsult\Icalcreator\Util\RegulateTimezoneFactory->processDtProp('DTSTART', '20250330T000000', Array)
#4 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\iCalCalendarReader\iCalImporter.php(177): Kigkonsult\Icalcreator\Util\RegulateTimezoneFactory->processCalendar()
#5 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\iCalCalendarReader\module.php(865): iCalImporter->ImportCalendar('BEGIN:VCALENDAR...')
#6 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\iCalCalendarReader\module.php(900): iCalCalendarReader->ReadCalendar()
#7 C:\ProgramData\Symcon\scripts\__generated.inc.php(4259): iCalCalendarReader->UpdateCalendar()
#8 C:\Windows\System32\-(8): ICCR_UpdateCalendar(25454)
#9 {main}

Next InvalidArgumentException: Invalid DateTimeZone '(UTC +01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna' in C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\DateTimeZoneFactory.php:104
Stack trace:
#0 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(532): Kigkonsult\Icalcreator\Util\DateTimeZoneFactory::assertDateTimeZone('(UTC +01:00) Am...')
#1 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(503): Kigkonsult\Icalcreator\Util\RegulateTimezoneFactory->processDatePropsTZIDattribute('DTSTART', '20250330T000000', Array)
#2 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(322): Kigkonsult\Icalcreator\Util\RegulateTimezoneFactory->processDtProp('DTSTART', '20250330T000000', Array)
#3 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\iCalCalendarReader\iCalImporter.php(177): Kigkonsult\Icalcreator\Util\RegulateTimezoneFactory->processCalendar()
#4 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\iCalCalendarReader\module.php(865): iCalImporter->ImportCalendar('BEGIN:VCALENDAR...')
#5 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\iCalCalendarReader\module.php(900): iCalCalendarReader->ReadCalendar()
#6 C:\ProgramData\Symcon\scripts\__generated.inc.php(4259): iCalCalendarReader->UpdateCalendar()
#7 C:\Windows\System32\-(8): ICCR_UpdateCalendar(25454)
#8 {main}
  thrown in C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\DateTimeZoneFactory.php on line 104
Abort Processing during Fatal-Error: Uncaught Exception: DateTimeZone::__construct(): Unknown or bad timezone ((UTC +01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna) in C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\DateTimeZoneFactory.php:101
Stack trace:
#0 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\DateTimeZoneFactory.php(101): DateTimeZone->__construct('(UTC +01:00) Am...')
#1 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(532): Kigkonsult\Icalcreator\Util\DateTimeZoneFactory::assertDateTimeZone('(UTC +01:00) Am...')
#2 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(503): Kigkonsult\Icalcreator\Util\RegulateTimezoneFactory->processDatePropsTZIDattribute('DTSTART', '20250330T000000', Array)
#3 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(322): Kigkonsult\Icalcreator\Util\RegulateTimezoneFactory->processDtProp('DTSTART', '20250330T000000', Array)
#4 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\iCalCalendarReader\iCalImporter.php(177): Kigkonsult\Icalcreator\Util\RegulateTimezoneFactory->processCalendar()
#5 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\iCalCalendarReader\module.php(865): iCalImporter->ImportCalendar('BEGIN:VCALENDAR...')
#6 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\iCalCalendarReader\module.php(900): iCalCalendarReader->ReadCalendar()
#7 C:\ProgramData\Symcon\scripts\__generated.inc.php(4259): iCalCalendarReader->UpdateCalendar()
#8 C:\Windows\System32\-(8): ICCR_UpdateCalendar(25454)
#9 {main}

Next InvalidArgumentException: Invalid DateTimeZone '(UTC +01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna' in C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\DateTimeZoneFactory.php:104
Stack trace:
#0 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(532): Kigkonsult\Icalcreator\Util\DateTimeZoneFactory::assertDateTimeZone('(UTC +01:00) Am...')
#1 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(503): Kigkonsult\Icalcreator\Util\RegulateTimezoneFactory->processDatePropsTZIDattribute('DTSTART', '20250330T000000', Array)
#2 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(322): Kigkonsult\Icalcreator\Util\RegulateTimezoneFactory->processDtProp('DTSTART', '20250330T000000', Array)
#3 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\iCalCalendarReader\iCalImporter.php(177): Kigkonsult\Icalcreator\Util\RegulateTimezoneFactory->processCalendar()
#4 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\iCalCalendarReader\module.php(865): iCalImporter->ImportCalendar('BEGIN:VCALENDAR...')
#5 C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\iCalCalendarReader\module.php(900): iCalCalendarReader->ReadCalendar()
#6 C:\ProgramData\Symcon\scripts\__generated.inc.php(4259): iCalCalendarReader->UpdateCalendar()
#7 C:\Windows\System32\-(8): ICCR_UpdateCalendar(25454)
#8 {main}
  thrown
   Error in Script C:\ProgramData\Symcon\modules\.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\DateTimeZoneFactory.php on Line 104

Sehr seltsam, die Zeitzone hat sich geändert. Hier war es noch

(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna

jetzt ist es

also

(UTC +01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna

Hast du eine Idee, wieso da jetzt ein zusätzliches Leerzeichen auftaucht?

Hm, keine Ahnung. Das VEVENT hatte ich aus dem Dump (Text: Roh) kopiert, die Fehlermeldung aus der Ausgabe des Moduls. :man_shrugging:

Kannst du es mal aus der Downloaddatei ziehen, die du erhälst, wenn du die in der Instanz angegebene URL im Browser ausführst?

Aus der .ics-Datei:

BEGIN:VEVENT
RRULE:FREQ=YEARLY;UNTIL=20250329T230000Z;INTERVAL=1;BYMONTHDAY=30;BYMONTH=3
UID:040000008200E00074C5B7101A82E0080000000000312D09B02EDB01000000000000000
 01000000075A782AB6248F44F9809518FBF7D96C0
SUMMARY:Geburtstag von Sebastiano La Ferla
DTSTART;TZID="(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna":2
 0250330T000000
DTEND;TZID="(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna":202
 50331T010000
CLASS:PUBLIC
PRIORITY:5
DTSTAMP:20241108T182526Z
TRANSP:TRANSPARENT
STATUS:CONFIRMED
SEQUENCE:0
LOCATION:
X-MICROSOFT-CDO-APPT-SEQUENCE:0
X-MICROSOFT-CDO-BUSYSTATUS:FREE
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-CDO-INSTTYPE:1
X-MICROSOFT-DONOTFORWARDMEETING:FALSE
X-MICROSOFT-DISALLOW-COUNTER:FALSE
END:VEVENT

habe nun mal den zugehörigen Download gemacht:

BEGIN:VEVENT
DTSTART;VALUE=DATE:20241215
DTEND;VALUE=DATE:20241216
RRULE:FREQ=YEARLY;COUNT=10;INTERVAL=1;BYMONTHDAY=15
DTSTAMP:20241108T192456Z
UID:xxx@google.com
CREATED:20241104T104720Z
DESCRIPTION:
LAST-MODIFIED:20241104T104720Z
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Namenstag Chrissi
TRANSP:OPAQUE
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-P0DT18H0M0S
DESCRIPTION:This is an event reminder
END:VALARM

Ja, da scheint mir noch etwas falsch zu laufen. Werde ich mir anschauen.

1 „Gefällt mir“

In der entsprechenden Schleife einfach den Eintrag überspringen, etwa so:

if($data['To']>time()){
  continue;
}
1 „Gefällt mir“

Ich habe es mir näher angeschaut und die Regelauswertung arbeitet doch korrekt. Es gibt auch interaktive Tools, um es zu überprüfen

https://jkbrzt.github.io/rrule/

In deiner Regel

FREQ=YEARLY;COUNT=10;INTERVAL=1;BYMONTHDAY=15

fehlt der Eintrag „BYMONTH=11“

Ich habe folgenden Eintrag im Kalender, welcher leider vom Modul nicht angezeigt wird. Vielleicht hat jemand eine Idee warum.

BEGIN:VEVENT
LAST-MODIFIED:20241016T120103Z
DTSTAMP:20241016T120103Z
UID:ee007417-773c-4ebb-8c5d-85e612b90d85
SUMMARY:Arbeiten
RRULE:FREQ=WEEKLY;BYDAY=MO,WE,TH,FR
EXDATE;TZID=Europe/Berlin:20240111T090000
EXDATE;TZID=Europe/Berlin:20240125T090000
EXDATE;TZID=Europe/Berlin:20240126T090000
EXDATE;TZID=Europe/Berlin:20240129T090000
EXDATE;TZID=Europe/Berlin:20240329T090000
EXDATE;TZID=Europe/Berlin:20240401T090000
EXDATE;TZID=Europe/Berlin:20240501T090000
EXDATE;TZID=Europe/Berlin:20240509T090000
EXDATE;TZID=Europe/Berlin:20240510T090000
EXDATE;TZID=Europe/Berlin:20240520T090000
EXDATE;TZID=Europe/Berlin:20240530T090000
EXDATE;TZID=Europe/Berlin:20241003T090000
EXDATE;TZID=Europe/Berlin:20241101T090000
EXDATE;TZID=Europe/Berlin:20241225T090000
EXDATE;TZID=Europe/Berlin:20241226T090000
EXDATE;TZID=Europe/Berlin:20250101T090000
EXDATE;TZID=Europe/Berlin:20240513T090000
EXDATE;TZID=Europe/Berlin:20240613T090000
EXDATE;TZID=Europe/Berlin:20240620T090000
EXDATE;TZID=Europe/Berlin:20240705T090000
EXDATE;TZID=Europe/Berlin:20240710T090000
EXDATE;TZID=Europe/Berlin:20240715T090000
EXDATE;TZID=Europe/Berlin:20240717T090000
EXDATE;TZID=Europe/Berlin:20240718T090000
EXDATE;TZID=Europe/Berlin:20240719T090000
EXDATE;TZID=Europe/Berlin:20240722T090000
EXDATE;TZID=Europe/Berlin:20240724T090000
EXDATE;TZID=Europe/Berlin:20240725T090000
EXDATE;TZID=Europe/Berlin:20240821T090000
EXDATE;TZID=Europe/Berlin:20240822T090000
EXDATE;TZID=Europe/Berlin:20240823T090000
EXDATE;TZID=Europe/Berlin:20240826T090000
EXDATE;TZID=Europe/Berlin:20240828T090000
EXDATE;TZID=Europe/Berlin:20240829T090000
EXDATE;TZID=Europe/Berlin:20240830T090000
EXDATE;TZID=Europe/Berlin:20240902T090000
EXDATE;TZID=Europe/Berlin:20240904T090000
EXDATE;TZID=Europe/Berlin:20240905T090000
EXDATE;TZID=Europe/Berlin:20240906T090000
EXDATE;TZID=Europe/Berlin:20240909T090000
EXDATE;TZID=Europe/Berlin:20241202T090000
EXDATE;TZID=Europe/Berlin:20241204T090000
EXDATE;TZID=Europe/Berlin:20241205T090000
EXDATE;TZID=Europe/Berlin:20241206T090000
DTSTART;TZID=Europe/Berlin:20240311T090000
DURATION:PT6H15M
TRANSP:OPAQUE
X-MOZ-GENERATION:2
END:VEVENT

@bumaas
vielen Dank für deine Antwort, habe mir mal das genauer angeschaut, da scheint ein Fehler in der privaten google.ics zu sein: BMONTH wird nicht mit ausgegeben !
die öffentliche ics kann ich leider nicht benutzen weil eine Fehlermeldung kommt, sogar wenn ich in den Browser direkt eingebe :wink:
bei einem regulären Export der Daten ist wieder alles richtig und die Serien passen
image
@tobiasr
könnte das ein ähnlicher Fehler sein nur halt täglich ?

Da war noch ein Fehler in der Erkennung von wiederkehrenden Terminen. Magst du einmal die aktuelle Testversion ausprobieren?

Vielen Dank. Der Termin ist nun grundsätzlich sichtbar. Aus einem mir unbekannten Grund taucht er zwar nicht in meiner Ausgabe aus, aber im Array ist er enthalten.

Nachtrag: Mein Script hatte eine ungünstige Abbruchbedingung und hat daher nicht 20 Termine ANGEZEIGT sondern nach 20 (vergangenen) Terminen abgebrochen. Dadurch wurde halt nicht genügend Vorlauf angezeigt.

Mein Caldav Server hatte gestern für ca. 2h ein Zertifikatsfehler. Leider hat sich das Modul nicht von selbst aus ‚ssl Error‘ erhohlt und ich musste manuell die Instanz erneut aktivieren.

Hi, Bumaas
vielen Dank für das Modul.

Gibt es eine Funktion,
Termin nur von Übermorgen zu finden?

Grund:
Ferienhof mit 7 Wohnungen.
Fußbodenheizung

absenken wenig wenn morgen belegt, übermorgen nicht.
absenken stark wenn garnicht mehr belegt
anheizen wenig wenn übermorgen belegt
normal Temperatur wenn morgen und übermorgen belegt

aktuell bekommen ich immer ein true, wenn ich Vorlaufzeit 1440 oder 2880 wahle,
bzw funktioniert dann nur anheizen wenig wenn übermorgen belegt.

wenn nicht bau ich mir ein Script und werte das array der Termine aus.

Gruß

Oh, mann ,

manchmal kommt man erst nach dem Schreiben drauf

, Nachlaufzeit -1440. klappt

Damit erhöht sich der ausgesprochene Dank nochmals

Gruß

1 „Gefällt mir“

Hallo @bumaas, ich würde auch gerne deinen iCal Modul nutzen und zunächst erst mal mit dem Abfallkalender anfangen. Hierzu habe ich von unserem Entsorgungsbetrieb eine iCal Datei generieren lassen und diese wie beschrieben als Dokument in IPS hochgeladen. Hier geht aber nur eine Datei, oder kann ich später z.B. noch eine Datei mit den Feiertagen hochladen. Vermutlich muss ich meine Termine vorher dann extern mergen?

Danach hab ich dann die Meldevariablen angelegt und würde nun gerne prüfen, ob das alles funktioniert hat. Wenn ich aber ganz unten auf den Button „Den Kalender mit einem Suchmuster durchsuchen“ gehe, dann bekomme ich 0 Treffer. Das Feld ist doch vermutlich dafür gedacht, dass ich das was bei den Meldevariablen eingetragen habe auf Treffer prüfen kann? Wofür sind dann die Button „Kalender laden“ und „Auf Termine prüfen“? Sollten hier dann auch die Treffer für die oben eingetragenen Meldevariablen angezeigt werden?

Mir ist auch noch nicht ganz klar, wie der Suchbegriff sein muss. Für mein Empfinden, müsste es ja ausreichend, dass ich z.B. Papier oder Bio eingebe und dann sollten in der iCal Datei der passende Termin gefunden werden?

Ich bin sicher, dass ich noch irgendetwas übersehen oder nicht ganz verstanden habe. Daher wäre ich für zusätzliche Hinweise dankbar.

Grüße André

Ja, entweder die VEVENTs zusätzlich aufnehmen, oder eine weitere Kalenderinstanz anlegen.

Ich habe in einer Testversion nun eine zusätzliche Möglichkeit zum Testen eines Suchtexts eingeführt. Ich denke damit wird es klarer. Es wird nämlich zwischen Suchtext und Suchmuster unterschieden.

Mit „Kalender laden“ stößt du ein manuelles Laden des Kalenders an und bekommst alle Einträge für den definierten Zeitraum angezeigt.
Mit „Auf Termine prüfen“ werden die Meldevariablen aktualisiert.