iCal Kalender nicht vorhanden oder Leer

Begonnen von Mike767, 02 Februar 2024, 10:38:20

Vorheriges Thema - Nächstes Thema

betateilchen

Irgendwas ist mit dem Kalender grundsätzlich speziell.
Zwar bekomme ich kein 404 zurück, sondern ein 200, aber Termine werden trotzdem keine erzeugt.

2024.11.12 09:01:39 4: Calendar kt: Updating...
2024.11.12 09:01:39 4: Calendar kt: Getting data from URL <hidden>
2024.11.12 09:01:39 5: Calendar kt: HTTP response code 200
2024.11.12 09:01:39 4: Calendar kt: parsing data asynchronously (PID= 85848)
2024.11.12 09:01:39 5: Calendar kt: control passed back to main loop.
2024.11.12 09:01:40 4: Calendar kt: got result from asynchronous parsing.
2024.11.12 09:01:40 4: Calendar kt: asynchronous parsing finished.
2024.11.12 09:01:40 4: Calendar kt: merging data
2024.11.12 09:01:40 4: Calendar kt: 0 records processed, 0 new, 0 known, 0 modified, 0 changed.
2024.11.12 09:01:40 4: Calendar kt: creating calendar events
2024.11.12 09:01:40 4: Calendar kt: events for 0 records cleared, events for 0 records created.
2024.11.12 09:01:40 4: Calendar kt: Checking times...
2024.11.12 09:01:40 4: Calendar kt: process ended.

  • mit wget auf der Konsole = vollständige Datei wird geladen
  • mit GetFileFromURL() in FHEM = vollständige Datei wird geladen
  • die mit GetFileFromURL() geladene Datei läßt sich als Calendar mit ical file ... problemlos verarbeiten und es werden alle Termine erzeugt
  • mit der kürzlich aktualisierten Moduldatei hat es nichts zu tun, das Phänomen tritt auch mit einer älteren Vesion auf

Vielleicht doch ein Fall für den Modulautor?
Eventuell fällt Boris etwas dazu ein.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: prenzela am 08 November 2024, 16:37:00Bleibt hier wirklich nur der Weg die Datei manuell runterzuladen (der Aufwand wäre mit 1x jährlich ja überschaubar) und dann die lokale Datei abzufragen (klappt wunderbar) ?

Man kann das auch in FHEM selbst automatisieren. Dazu legt man eine Funktion in der 99_myUtils.pm an:

sub caltest {
  my $url = "https://www.abfalltermine-forchheim.de/Forchheim/Landkreis/Heroldsbach%20-%20Heroldsbach/ics";
  my @content = split(/\n/,GetFileFromURL($url));
  FileWrite({ FileName => '/tmp/muell.ics', ForceType => 'file' }, @content);
  fhem("set ktf reload");
}

und ruft diese Funktion beispielsweise jede Nacht in einem at auf:

define at_cal at *00:05:00 {caltest}

Der Kalender "ktf" wird beim Funktionsaufruf um 00:05 Uhr automatisch aktualisiert. Das angegebene Intervall von 100000 sorgt dafür, dass FHEM nicht versucht, den Kalender mehrmals am Tag zu aktualisieren.

define ktf Calendar ical file /tmp/muell.ics 100000

Ein Workaround, ja. Und auch ohne jede Fehlerbehandlung, ja.
Aber das Ziel war, aufzuzeigen, wie man das Thema in FHEM lösen könnte.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

prenzela

ja, mit dem Modul klappt es nicht. Per wget bzw curl funktioniert der Download und die ics Datei ist auch verwendbar.

Zitatcurl -o /opt/fhem/www/ftui/content/heroldsbach.ics https://www.abfalltermine-forchheim.de/Forchheim/Landkreis/Heroldsbach%20-%20Heroldsbach/ics
wget -O /opt/fhem/www/ftui/content/heroldsbach-wget.ics https://www.abfalltermine-forchheim.de/Forchheim/Landkreis/Heroldsbach%20-%20Heroldsbach/ics

betateilchen

Zitat von: betateilchen am 12 November 2024, 09:15:34Irgendwas ist mit dem Kalender grundsätzlich speziell.

Ich habe jetzt in das Calendar-Modul eine Debug Ausgabe eingebaut, die mir das ins Log schreibt, was nach dem nonblocking-Aufruf in $ics steht:

2024.11.12 12:16:20 1: DEBUG>< BEGIN:VCALENDAR
VERSION:2.0
PRODID:Abfalltermine Forchheim
NAME:Abfalltermine für Heroldsbach                 -00000000000000000012ero
 ldsbach\, Forchheim
DESCRIPTION:Abfalltermine für Heroldsbach                 -0000000000000000
 0012eroldsbach\, Forchheim
LAST-MODIFIED:20231019T100000Z
BEGIN:VTIMEZONE
TZID:Europe/Berlin
LAST-MODIFIED:20240422T053451Z
TZURL:https://www.tzurl.org/zoneinfo-outlook/Europe/Berlin
X-LIC-LOCATION:Europe/Berlin
BEGIN:DAYLIGHT
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
BEGIN:STANDARD
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
 >

Es kommt also eine Antwort zurück, in der aber erstmal keine Termine drinstehen.
Es bleibt spannend. Was macht GetFileFromURL() anders als das NonBlockingGet() ?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: betateilchen am 12 November 2024, 12:24:35Es bleibt spannend. Was macht GetFileFromURL() anders als das NonBlockingGet() ?

Noch spannender - mit dem Codeschnipsel wird auch der vollständige Kalender mit allen Einträgen geladen.

sub caltest {
  my $url = "https://www.abfalltermine-forchheim.de/Forchheim/Landkreis/Heroldsbach%20-%20Heroldsbach/ics";
  my $hash;
 
  sub Calendar_ProcessUpdate($$$) {
    my ($param, $errmsg, $ics) = @_;
    Debug $ics;
  }

  HttpUtils_NonblockingGet({
      url => $url,
      hideurl => 1,
      noshutdown => 1,
      hash => $hash,
      timeout => 30,
      type => 'caldata',
      callback => \&Calendar_ProcessUpdate,
    });
}

*grübel*

Warum endet im Modulcode die Übertragung nach den Timezone-Informationen, wird aber mit END:VCALENDAR korrekt abgeschlossen?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!