From a002689e9b97ea4c8aa8345a5038e59cceaa31a3 Mon Sep 17 00:00:00 2001 From: neubert Date: Mon, 9 Jun 2025 10:21:34 +0000 Subject: [PATCH] 57_Calendar: right treatment of colons in SUMMARY (forum #140729) git-svn-id: https://svn.fhem.de/fhem/trunk@30034 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/57_Calendar.pm | 140 +++++++++++++++++++-------------------- 2 files changed, 71 insertions(+), 70 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index beb490e21..c62628e0c 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it + - bugfix: 57_Calendar: right treatment of colons in SUMMARY (forum #140729) - feature: 76_SolarForecast: Version 1.52.11 - change: 55_DWD_OpenData: set internal version to 1.017007 - bugfix: 93_DbRep: resolution of symbolic links in Optimize Tables for SQLite diff --git a/fhem/FHEM/57_Calendar.pm b/fhem/FHEM/57_Calendar.pm index 8a185d1c5..65f5036d5 100644 --- a/fhem/FHEM/57_Calendar.pm +++ b/fhem/FHEM/57_Calendar.pm @@ -1022,7 +1022,7 @@ sub addproperty($$) { # DTSTART:20140211T212000Z # DTSTART;VALUE=DATE:20130619 my ($key,$parts,$parameter); - if($line =~ /^([\w\d\-]+)(;(.*))?:(.*)$/) { + if($line =~ /^([\w\d\-]+)(;((?:[^\:]+|\"[^\"]*\")*))?:(.*)$/) { # forum 140729 $key= $1; $parts= $3 // ""; $parameter= $4 // ""; @@ -3476,7 +3476,7 @@ sub CalendarEventsAsHtml($;$) {
Note for users of Netxtcloud Calendar: you can use an URL of the form https://admin:admin@demo.nextcloud.com/wid0ohgh/remote.php/dav/calendars/admin/personal/?export. -

+

The optional parameter interval is the time between subsequent updates in seconds. It defaults to 3600 (1 hour).
@@ -3795,12 +3795,12 @@ sub CalendarEventsAsHtml($;$) { Sets the default format for the get <name> events command. The specification is explained there. You must enclose the <formatSpec> in double quotes (") like input - in attr myCalendar defaultFormat "$T1 $D $S".

+ in attr myCalendar defaultFormat "$T1 $D $S".

  • defaultTimeFormat <timeFormatSpec>
    Sets the default time format for the get <name>events command. The specification is explained there. Do not enclose - the <timeFormatSpec> in quotes.
  • + the <timeFormatSpec> in quotes.

  • synchronousUpdate 0|1
    If this attribute is not set or if it is set to 0, the processing is done @@ -3810,45 +3810,45 @@ sub CalendarEventsAsHtml($;$) {
    Attribute value will be ignored if FHEM is running on a Windows platform.
    On Windows platforms the processing will always be done synchronously
    -
  • +

  • update onUrlChanged|none
    If this attribute is set to onUrlChanged, the processing is done only if url to calendar has changed since last calendar update.
    If this attribute is set to none, the calendar will not be updated at all. -
  • +

  • delay <time>
    The waiting time in seconds after the initialization of FHEM or a configuration change before actually retrieving the calendar from its source. If not set, a random time between 10 and 29 seconds is chosen. When several calendar devices are defined, staggered delays reduce load error rates. -
  • +

  • timeout <time>
    The timeout in seconds for retrieving the calendar from its source. The default is 30. Increase for very large calendars that take time to be assembled and retrieved from their sources. -
  • +

  • removevcalendar 0|1
    If this attribute is set to 1, the vCalendar will be discarded after the processing to reduce the memory consumption of the module. A retrieval via get <name> vcalendar is then no longer possible. -
  • +

  • hideOlderThan <timespec>
    - hideLaterThan <timespec>

    + hideLaterThan <timespec>


    These attributes limit the list of events shown by - get <name> full|debug|text|summary|location|alarm|start|end ....

    + get <name> full|debug|text|summary|location|alarm|start|end ....

    The time is specified relative to the current time t. If hideOlderThan is set, calendar events that ended before t-hideOlderThan are not shown. If hideLaterThan is - set, calendar events that will start after t+hideLaterThan are not shown.

    + set, calendar events that will start after t+hideLaterThan are not shown.

    Please note that an action triggered by a change to mode "end" cannot access the calendar event if you set hideOlderThan to 0 because the calendar event will already be hidden at that time. Better set - hideOlderThan to 10.

    + hideOlderThan to 10.

    <timespec> must have one of the following formats:
    @@ -3860,7 +3860,7 @@ sub CalendarEventsAsHtml($;$) {
    D:HH:MM:SSdays:hours:minutes:seconds122:10:00:00
    DDDddays100d

  • -

    +

  • cutoffOlderThan <timespec>
    cutoffLaterThan <timespec>
    @@ -3868,13 +3868,13 @@ sub CalendarEventsAsHtml($;$) { before or a timespan cutoffLaterThan after the last update of the calendar. The purpose of setting this attribute is to save memory and processing time. Such calendar events cannot be accessed at all from FHEM. -
  • +

  • onCreateEvent <perl-code>
    This attribute allows to run the Perl code <perl-code> for every calendar event that is created. See section Plug-ins below. -
  • +

  • SSLVerify
    @@ -3882,17 +3882,17 @@ sub CalendarEventsAsHtml($;$) { SSL. Set attribute either to 0 for SSL_VERIFY_NONE (no certificate verification) or to 1 for SSL_VERIFY_PEER (certificate verification). Disabling verification is useful for local calendar installations (e.g. OwnCloud, NextCloud) without valid SSL certificate. -
  • +

  • ignoreCancelled
    Set to 1 to ignore events with status "CANCELLED". Set this attribute to 1 if calanedar events of a series are returned although they are cancelled. -
  • +

  • hasModeReadings
    Set to 1 to use the obsolete mode readings. -
  • +

  • quirks <values>
    Parameters to handle special situations. <values> is @@ -3903,7 +3903,7 @@ sub CalendarEventsAsHtml($;$) {
  • noWildcards: if present, wildcards in the calendar's URL will not be expanded.
  • -

    +

  • readingFnAttributes
  • @@ -3914,11 +3914,11 @@ sub CalendarEventsAsHtml($;$) {
    @@ -3989,20 +3989,20 @@ sub CalendarEventsAsHtml($;$) {

    @@ -4208,7 +4208,7 @@ sub CalendarEventsAsHtml($;$) { Solltest Du unsicher sein, ob dies der Fall ist, überprüfe es bitte zuerst mit deinem Browser. Hinweis für Nutzer des Nextcloud-Kalenders: Du kannst eine URL der folgenden Form benutzen: - https://admin:admin@demo.nextcloud.com/wid0ohgh/remote.php/dav/calendars/admin/personal/?export.

    + https://admin:admin@demo.nextcloud.com/wid0ohgh/remote.php/dav/calendars/admin/personal/?export.

    Der optionale Parameter interval bestimmt die Zeit in Sekunden zwischen den Updates. Default-Wert ist 3600 (1 Stunde).
    Eine Intervallangabe von 0 ist nicht erlaubt. Diese wird automatisch durch den Standardwert 3600 ersetzt und im Log protokolliert.

    @@ -4469,11 +4469,11 @@ sub CalendarEventsAsHtml($;$) {

  • defaultFormat <formatSpec>
    Setzt das Standardformat für get <name> events. Der Aufbau wird dort erklät. <formatSpec> muss in doppelte - Anführungszeichen (") gesetzt werden, wie z.B. attr myCalendar defaultFormat "$T1 $D $S".
  • + Anführungszeichen (") gesetzt werden, wie z.B. attr myCalendar defaultFormat "$T1 $D $S".

  • defaultTimeFormat <timeFormatSpec>
    Setzt das Standardzeitformat für get <name> events. - Der Aufbau wird dort erklät. <timeFormatSpec> nicht in Anführungszeichen setzten.
  • + Der Aufbau wird dort erklät. <timeFormatSpec> nicht in Anführungszeichen setzten.

  • synchronousUpdate 0|1
    Wenn dieses Attribut nicht oder auf 0 gesetzt ist, findet die Verarbeitung im Hintergrund statt @@ -4483,44 +4483,44 @@ sub CalendarEventsAsHtml($;$) {
    Das Attribut wird ignoriert, falls FHEM unter Windows betrieben wird. In diesem Fall erfolgt die Verarbeitung immer synchron.
    -
  • +

  • update none|onUrlChanged
    Wird dieses Attribut auf none gesetzt ist, wird der Kalender überhaupt nicht aktualisiert.
    Wird dieses Attribut auf onUrlChanged gesetzt ist, wird der Kalender nur dann aktualisiert, wenn sich die URL seit dem letzten Aufruf verändert hat, insbesondere nach der Auswertung von wildcards im define.
    -
  • +

  • delay <time>
    Wartezeit in Sekunden nach der Initialisierung von FHEM oder einer Konfigurationsänderung bevor der Kalender tatsächlich von der Quelle geladen wird. Wenn nicht gesetzt wird eine Zufallszeit zwischen 10 und 29 Sekunden gewählt. Wenn mehrere Kalender definiert sind, führen gestaffelte Wartezeiten zu einer Verminderung der Ladefehleranfälligkeit. -
  • +

  • timeout <time>
    Der Timeout in Sekunden um einen Kalender von seiner Quelle zu holen. Standard ist 30. Erhöhen für sehr große Kalender, bei denen es eine Weile dauert, sie an der Quelle zusammenzustellen und herunterzuladen. -
  • +

  • removevcalendar 0|1
    Wenn dieses Attribut auf 1 gesetzt ist, wird der vCalendar nach der Verarbeitung verworfen, gleichzeitig reduziert sich der Speicherverbrauch des Moduls. Ein Abruf über get <name> vcalendar ist dann nicht mehr möglich. -
  • +

  • hideOlderThan <timespec>
    - hideLaterThan <timespec>

    + hideLaterThan <timespec>


    Dieses Attribut grenzt die Liste der durch get <name> full|debug|text|summary|location|alarm|start|end ... gezeigten Termine ein. Die Zeit wird relativ zur aktuellen Zeit t angegeben.
    Wenn <hideOlderThan> gesetzt ist, werden Termine, die vor <t-hideOlderThan> enden, ingnoriert.
    - Wenn <hideLaterThan> gesetzt ist, werden Termine, die nach <t+hideLaterThan> anfangen, ignoriert.

    + Wenn <hideLaterThan> gesetzt ist, werden Termine, die nach <t+hideLaterThan> anfangen, ignoriert.

    Bitte beachte, dass eine Aktion, die durch einen Wechsel in den Modus "end" ausgelöst wird, nicht auf den Termin - zugreifen kann, wenn hideOlderThan 0 ist, denn der Termin ist dann schon versteckt. Setze hideOlderThan besser auf 10.

    + zugreifen kann, wenn hideOlderThan 0 ist, denn der Termin ist dann schon versteckt. Setze hideOlderThan besser auf 10.

    <timespec> muss; einem der folgenden Formate entsprechen:
    @@ -4533,7 +4533,7 @@ sub CalendarEventsAsHtml($;$) { D:HH:MM:SSTage:Stunden:Minuten:Sekunden122:10:00:00 DDDdTage100d

  • -

    +

  • cutoffOlderThan <timespec>
    cutoffLaterThan <timespec>
    @@ -4543,13 +4543,13 @@ sub CalendarEventsAsHtml($;$) { es Speicher und Verarbeitungszeit zu sparen. Auf solche Termine kann gar nicht mehr aus FHEM heraus zugegriffen werden. -
  • +

  • onCreateEvent <perl-code>
    Dieses Attribut führt ein Perlprogramm <perl-code> für jeden erzeugten Termin aus. Weitere Informationen unter Plug-ins im Text. -
  • +

  • SSLVerify
    @@ -4559,17 +4559,17 @@ sub CalendarEventsAsHtml($;$) { SSL_VERIFY_PEER (Überprüfung des Zertifikats). Die Überprüfung auszuschalten ist nützlich für lokale Kalenderinstallationen(e.g. OwnCloud, NextCloud) ohne gütiges SSL-Zertifikat. -
  • +

  • ignoreCancelled
    Wenn dieses Attribut auf 1 gesetzt ist, werden Termine im Status "CANCELLED" ignoriert. Dieses Attribut auf 1 setzen, falls Termine in einer Serie zurückgegeben werden, die gelöscht sind. -
  • +

  • hasModeReadings
    Auf 1 setzen, um die veralteten mode-Readings zu benutzen. -
  • +

  • quirks <values>
    @@ -4582,7 +4582,7 @@ sub CalendarEventsAsHtml($;$) {
  • noWildcards: wenn gesetzt, werden Wildcards in der URL des Kalenders nicht ersetzt.
  • -

    +

  • readingFnAttributes
  • @@ -4596,17 +4596,17 @@ sub CalendarEventsAsHtml($;$) { aus dem Quellkalender ermittelt, welcher über die URL angegeben wird. Sollten mehrere Alarmzeiten für einen Termin existieren, wird nur der früheste Alarmzeitpunkt beibehalten. Wiederkehrende Kalendereinträge werden in einem gewiss;en Umfang unterstützt: FREQ INTERVAL UNTIL COUNT werden ausgewertet, BYMONTHDAY BYMONTH WKST werden erkannt aber nicht ausgewertet. BYDAY wird für wöchentliche und monatliche Termine - korrekt behandelt. Das Modul wird es sehr wahrscheinlich falsch machen, wenn Du wiederkehrende Termine mit unerkannten oder nicht ausgewerteten Schlüsselwörtern hast.

    + korrekt behandelt. Das Modul wird es sehr wahrscheinlich falsch machen, wenn Du wiederkehrende Termine mit unerkannten oder nicht ausgewerteten Schlüsselwörtern hast.

    Termine werden erzeugt, wenn FHEM gestartet wird oder der betreffende Eintrag im Quell-Kalender verändert wurde oder der Kalender mit get <name> reload neu geladen wird. Es werden nur Termine innerhalb ±400 Tage um die Erzeugungs des Termins herum erzeugt. Ziehe in Betracht, den Kalender von Zeit zu Zeit - neu zu laden, um zu vermeiden, dass; FHEM die künftigen Termine ausgehen. Du kann so etwas wie define reloadCalendar at +*240:00:00 set MyCalendar reload dafür verwenden.

    + neu zu laden, um zu vermeiden, dass; FHEM die künftigen Termine ausgehen. Du kann so etwas wie define reloadCalendar at +*240:00:00 set MyCalendar reload dafür verwenden.

    Manche dumme Kalender benutzen LAST-MODIFIED nicht. Das kann dazu führen, dass Veränderungen im - Quell-Kalender unbemerkt bleiben. Lade den Kalender neu, wenn Du dieses Problem hast.

    + Quell-Kalender unbemerkt bleiben. Lade den Kalender neu, wenn Du dieses Problem hast.

    - Ein Termin wird durch seine UID identifiziert. Die UID wird vom Quellkalender bezogen. Um das Leben leichter zu machen, werden alle nicht-alphanumerischen Zeichen automatisch aus der UID entfernt.

    + Ein Termin wird durch seine UID identifiziert. Die UID wird vom Quellkalender bezogen. Um das Leben leichter zu machen, werden alle nicht-alphanumerischen Zeichen automatisch aus der UID entfernt.

    Ein Termin kann sich in einem der folgenden Modi befinden: @@ -4616,10 +4616,10 @@ sub CalendarEventsAsHtml($;$) {
    endDie Endzeit des Kalender-Ereignisses wurde überschritten.

    Ein Kalender-Ereignis wechselt umgehend von einem Modus zum anderen, wenn die Zeit für eine Änderung erreicht wurde. Dies wird dadurch erreicht, dass auf die früheste zukünftige Zeit aller Alarme, Start- oder Endzeiten aller Kalender-Ereignisse gewartet wird. -

    +

    Aus Gründen der Abwärtskompatibilität werden mode-Readings gefüllt, wenn das Attribut hasModeReadings gesetzt ist. - Der Rest dieser Beschreibung bezieht sich auf diese veralteten mode-Readings.

    + Der Rest dieser Beschreibung bezieht sich auf diese veralteten mode-Readings.

    Ein Kalender-Device hat verschiedene mode-Readings. Jedes mode-Reading stellt eine semikolonseparierte Liste aus UID von Kalender-Ereignisse dar, welche bestimmte Zustände haben: @@ -4634,44 +4634,44 @@ sub CalendarEventsAsHtml($;$) {
    modeStartedEreignisse, welche gerade in den Startmodus gewechselt haben
    modeUpcomingEreignisse im zukünftigen Modus
    -

    +

    Für Serientermine werden mehrere Termine mit identischer UID erzeugt. In diesem Fall wird die UID nur im interessantesten gelesenen Modus-Reading angezeigt. - Der interessanteste Modus ist der erste zutreffende Modus aus der Liste der Modi start, alarm, upcoming, end.

    + Der interessanteste Modus ist der erste zutreffende Modus aus der Liste der Modi start, alarm, upcoming, end.

    Die UID eines Serientermins wird nicht angezeigt, solange sich der Termin im Modus: modeEnd oder modeEnded befindet und die Serie nicht beendet ist. Die UID befindet sich in einem der anderen mode... Readings. Hieraus ergibts sich, das FHEM-Events nicht auf einem mode... Reading basieren sollten. - Weiter unten im Text gibt es hierzu eine Empfehlung.

    + Weiter unten im Text gibt es hierzu eine Empfehlung.

    Events

    Plug-ins