Log Einträge Calender: Duplicate VEVENT

Begonnen von Stonemuc, 22 Januar 2021, 17:06:55

Vorheriges Thema - Nächstes Thema

Stonemuc

Ich hab seit dem Anlegen eines Calendar Device Probleme mit ellenlangen stündlichen Log Einträgen. Wie kann ich das beheben?
Ich versteh nicht mal das Problem dahinter....
Bei meinem Müllkalender habe ich das nicht.

2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT
2021.01.22 15:57:52 2: Calendar Schichtkalender: Duplicate VEVENT


Hier mal das List vom Calendar-Device:
Internals:
   DEF        ical url http://XXXXXXXXXXX/remote.php/dav/calendars/Sebi/personal/?export
   FUUID      5cf818ce-f33f-6467-f56d-fd2d85fd85da89cd
   NAME       Schichtkalender
   NOTIFYDEV  global
   NR         437
   NTFY_ORDER 50-Schichtkalender
   STATE      triggered
   TYPE       Calendar
   READINGS:
     2021-01-22 16:58:00   calname         Persönlich
     2021-01-22 16:58:00   lastUpdate      2021-01-22 16:57:47
     2020-05-09 16:46:33   modeAlarm       
     2021-01-22 12:15:00   modeAlarmOrStart FlexRUID2939
     2020-05-09 16:46:33   modeAlarmed     
     2021-01-22 12:58:01   modeChanged     
     2021-01-22 16:58:00   modeEnd         FlexRUID2872;FlexRUID2894;FlexRUID2879;FlexRUID2708;FlexRUID2871;FlexRUID2938;FlexRUID2700;FlexRUID2707;FlexRUID2730;FlexRUID2900;FlexRUID2937;FlexRUID2930;FlexRUID2874;FlexRUID2718;FlexRUID2928;FlexRUID2899;FlexRUID2880;FlexRUID2728;FlexRUID2927;FlexRUID2717;FlexRUID2865;FlexRUID2727;FlexRUID2720;FlexRUID2882;FlexRUID2866;FlexRUID2881;FlexRUID2897;FlexRUID2934;FlexRUID2729;FlexRUID2722;FlexRUID2711;FlexRUID2719;FlexRUID2929;FlexRUID2898;FlexRUID2693;FlexRUID2704;FlexRUID2712;FlexRUID2721;FlexRUID2884;FlexRUID2877;FlexRUID2870;FlexRUID2731;FlexRUID2932;FlexRUID2724;JD3ZHU6ZCXPKEBSS8KILFD;FlexRUID2701;FlexRUID2878;FlexRUID2931;FlexRUID2709;FlexRUID2714;FlexRUID2863;FlexRUID2893;FlexRUID2698;FlexRUID2705;FlexRUID2876;FlexRUID2868;FlexRUID2873;FlexRUID2885;FlexRUID2867;FlexRUID2715;FlexRUID2896;FlexRUID2725;FlexRUID2716;FlexRUID2895;FlexRUID2726;FlexRUID2933;FlexRUID2703;FlexRUID2694;FlexRUID2886;FlexRUID2869;FlexRUID2706;FlexRUID2883;FlexRUID2875;FlexRUID2936;FlexRUID2723;FlexRUID2864;FlexRUID2713;FlexRUID2699;FlexRUID2692
     2021-01-20 05:58:01   modeEnded       
     2021-01-22 12:15:00   modeStart       FlexRUID2939
     2021-01-22 12:58:01   modeStarted     
     2021-01-22 16:58:00   modeUpcoming    FlexRUID2943;FlexRUID2946;FlexRUID2945;FlexRUID2951;FlexRUID2941;FlexRUID2942;FlexRUID2949;FlexRUID2948;FlexRUID2950;FlexRUID2947;FlexRUID2940
     2021-01-22 16:58:00   nextUpdate      2021-01-22 17:57:47
     2021-01-22 16:58:03   nextWakeup      2021-01-22 17:57:47
     2021-01-22 16:58:00   state           triggered
Attributes:
   hideOlderThan 1
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

xenos1984

Ich würde stark vermuten, das liegt an den Eingangsdaten. Kann es sein, dass der Kalender, den du abrufst, mehrfache Einträge mit der gleichen UID enthält?

Also identische UID: ... Zeilen in http://XXXXXXXXXXX/remote.php/dav/calendars/Sebi/personal/?export

http://de.wikipedia.org/wiki/ICalendar

Stonemuc

Ich füge zu dem Kaleneder jede Woche Termine hinzu und dann wird vermutlich alles neu geladen. Muss ich also die alten Termine rauslöschen?
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

betateilchen

Zitat von: Stonemuc am 22 Januar 2021, 17:44:12
Muss ich also die alten Termine rauslöschen?

Du kannst die entsprechenden Attribute im Calendar-device setzen, ein Blick in die commandref würde Dich klugmachen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Stonemuc

Da habe ich schon geschaut, werde daraus aber nicht schlau. Deshalb frag ich ja hier...
Muss ich die alten Termine aus meinem FHEM Calendar Device löschen oder die Termine in der Quelle?

Welches attr nutze ich dann dafür?

removevcalendar 0|1
oder
cutoffOlderThan <timespec>
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

xenos1984

Zitat von: Stonemuc am 22 Januar 2021, 18:46:50
Welches attr nutze ich dann dafür?

removevcalendar 0|1
oder
cutoffOlderThan <timespec>

Weder noch. Das erste verwirft die Originaldaten nach dem Einlesen, das zweite verwirft Einträge mit einem bestimmten Alter. Der Fehler tritt aber schon beim Einlesen auf. Ein kurzer Auszug aus der 57_Calendar.pm von der Stelle, an der die Fehlermeldung ausgegeben wird:


2909   # we now run through the list of freshly retrieved VEVENTs and merge them into
2910   # the hash
2911   my ($n, $nknown, $nmodified, $nnew, $nchanged)= (0,0,0,0,0,0);
2912
2913   # this code is O(n^2) and stalls FHEM for large numbers of VEVENTs
2914   # to speed up the code we first build a reverse hash (UID,RECURRENCE-ID) -> id
2915   sub kf($) { my ($v)= @_; return $v->value("UID").$v->valueOrDefault("RECURRENCE-ID","") }
2916
2917   my %lookup;
2918   foreach my $id (keys %vevents) {
2919         my $k= kf($vevents{$id});
2920         Log3 $hash, 2, "Calendar $name: Duplicate VEVENT" if(defined($lookup{$k}));
2921         $lookup{$k}= $id;
2922         #main::Debug "Adding event $id with key $k to lookup hash.";
2923   }


Hier werden die neuen Kalender-Einträge eingelesen und es wird überprüft, ob es innerhalb dieser Einträge mehrfach vorkommende UID gibt. Wenn ja, wird die Fehlermeldung ausgegeben (Zeile 2920). Also bringt es nichts, die alten Daten aus dem Kalender zu löschen mit einem der obigen Attribute, weil scheinbar in den frisch eingelesenen Daten Duplikate vorhanden sind.

Was sagt denn dieser Befehl (in der FHEM-Kommandozeile - URL durch deinen Kalender ersetzen):
{qx(wget -O - "http://XXXXXXXXXXX/remote.php/dav/calendars/Sebi/personal/?export" | grep '^UID')}

Stonemuc

Bad Port number hinter der Zeile ist die Ausgabe.
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

xenos1984

Zitat von: Stonemuc am 23 Januar 2021, 05:26:07
Bad Port number hinter der Zeile ist die Ausgabe.

Das klingt eher nach einem Fehler in der angegebenen URL (z.B. wenn hinter der Domain ein Doppelpunkt zur Angabe der Port-Nummer folgt, aber keine gültige Port-Nummer).

Geht denn das in der Linux-Kommandozeile?

wget -O - "http://XXXXXXXXXXX/remote.php/dav/calendars/Sebi/personal/?export" | grep '^UID'