iCal Kalender nicht vorhanden oder Leer

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

Vorheriges Thema - Nächstes Thema

Mike767

Hallo zusammen,

ich habe neuerdings das Problem, dass der Sitzungskalenden von der Gemeinde angeblich leer ist.
Wenn die URL im Browser aufgerufen wird kann ich ihn downloaden.

Config:

define SitzungsKalender Calendar ical url https://www.amt-zarrentin.de/veranstaltungen/veranstaltungen.ical?zeitauswahl=1&auswahl_woche_tage=28&onlyMonat_select=202402&beginn_datum=&beginn_tag=&beginn_monat=&beginn_jahr=&ende_datum=&ende_tag=&ende_monat=&ende_jahr=&suchwort=&rubrik=0&selected_kommune=29120&ort=0&destination=0&dest_id=0&selected_destination=0&select_ort=0&highlights=0&serie=0&verband=0&ressort=0&von=&bis= 18000
setuuid SitzungsKalender 5c4ac493-f33f-20d1-7e1a-a99507b31797ccaf
attr SitzungsKalender hideOlderThan 1
attr SitzungsKalender room Kalender
attr SitzungsKalender suppressReading SUMMARY



Log:
2024.02.02 10:26:57 4: Calendar SitzungsKalender: Updating...
2024.02.02 10:26:57 4: Calendar SitzungsKalender: Getting data from URL <hidden>
2024.02.02 10:26:57 1: Calendar SitzungsKalender: retrieval failed with HTTP response code 403
2024.02.02 10:26:57 5: Calendar SitzungsKalender: HTTP response header:
HTTP/1.1 403 Forbidden
Date: Fri, 02 Feb 2024 09:26:57 GMT
Server: Apache
Content-Length: 318
Connection: close
Content-Type: text/html; charset=iso-8859-1
2024.02.02 10:26:57 1: Calendar SitzungsKalender: retrieved no or empty data
2024.02.02 10:26:57 4: Calendar SitzungsKalender: Checking times...


Ich hoffe jemad kann mir einen Tipp geben, wie ich den Fehler finden kann.

Vielen Dank.

Gruß Mike

Otto123

Hallo Mike,

zwei Eindrücke: die Seite ist sehr langsam, oder blockt zeitlich... Der download ging erst nicht, irgendwann ging er (nachdem ich die Kekse gegessen habe?)
Der Export des Kalenders funktioniert bei mir gar nicht - Seite Sitzungsdienst.
Ich denke die Seite ist stellenweise "kaputt".

Ich finde einen anderen Link auf dieser Seite zum export.
https://www.amt-zarrentin.de/veranstaltungen/veranstaltungen.ical?zeitauswahl=1&auswahl_woche_tage=28&onlyMonat_select=0&beginn_datum=&beginn_tag=0&beginn_monat=0&beginn_jahr=0&ende_datum=&ende_tag=0&ende_monat=0&ende_jahr=0&suchwort=&rubrik=0&selected_kommune=29120&ort=0&destination=0&dest_id=0&selected_destination=0&select_ort=0&highlights=0&serie=0&verband=0&ressort=0&portal_all=0&beginn=20240202000000&ende=20240301235959&kultur=0&intern=0

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Mike767

Hallo Otto,

danke für die Antwort, der andere Link ist von der gleichen Seite und funktioniert leider auch nicht.

Da die anderen Seiten wie z.B. https://www.sitzungsdienst-zarrentin.de/pi/si010_e.asp auch nicht "Sauber" sind, gehe ich ebenfalls davon aus das bei denen was "kaputt" ist.

Schönes Wochenende.

Gruß Mike

betateilchen

lustig, in Zarrentin mache ich demnächst eine Woche Urlaub  8)

2024.02.02 12:34:38 1: Calendar SitzungsKalender: retrieval failed with HTTP response code 403
Ich gehe nicht davon aus, dass da was kaputt ist. Man möchte wohl Script-Abfragen des Sitzungskalenders unterbinden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Mike767

Hallo betateilchen,

dann wünsche ich schon mal einen schönen Urlaub am Schaalsee.

Die Gemeinde bietet auch einen Kalender an, den ich zum Beispiel in Thunderbird einbinden kann.
webcal://www.amt-zarrentin.de//allris/si010_e.asp?selfaction=ws&template=ical&rss=128&sid=990d532dd9cb33282e2e8f1a5af8dd1f auf dieser Seite:
https://www.sitzungsdienst-zarrentin.de/pi/si010_e.aspKann ich diesen in FHEM alternativ einbinden?

Schöne grüße
Mike



betateilchen

Prinzipiell funktionieren bei mir verschiedene URL, die hier im Thread schon genannt sind.
Allerdings mache ich dafür zwei Schritte

  • Abruf der URL auf Betriebssystemebene mit wget und speichern in Datei
  • Verwendung der erzeugten Datei im Calendar-device

Bis jetzt habe ich es noch nicht geschafft, die URL so zu gestalten, dass sie vom Calendar-device selbst aufgerufen werden kann. Da sich ein Sitzungskalender aber normalerweise auch nicht so häufig ändert, sollte die Variante mit dem externen wget einmal pro Tag eigentlich durchaus brauchbar sein.

Vielleicht fällt mir noch was ein, wie die url aussehen muss, damit sie direkt funktioniert.

Bei dieser url

webcal://www.amt-zarrentin.de//allris/si010_e.asp?selfaction=ws&template=ical&rss=128&sid=990d532dd9cb33282e2e8f1a5af8dd1f
stört mich übrigens die Session-ID am Ende. Man weiß nie, wie lange diese url gültig bleibt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Mike767

Ok, danke für den Lösungsansatz.

Dann werde ich es auf diesen Weg versuchen.

Mike767

habe es mit "curl" hinbekommen, gab noch Probleme mit dem Zertifikat.

mit dem Hilfsmodul funktioniert es jetzt.
define Kalender_holen at *00:00:00 {system ("curl -k 'https://www.amt-zarrentin.de/veranstaltungen/veranstaltungen.ical?zeitauswahl=1&auswahl_woche_tage=28&onlyMonat_select=0&beginn_datum=&beginn_tag=0&beginn_monat=0&beginn_jahr=0&ende_datum=&ende_tag=0&ende_monat=0&ende_jahr=0&suchwort=&rubrik=0&selected_kommune=29120&ort=0' -o /opt/fhem/Kalender/Sitzungskalender.ics &")}

Danke nochmal und ein schönes Wochenende
Gruß Mike

betateilchen

Zwei Anmerkungen dazu:

  • regelmäßige Aufrufe reiner Betriebsystemfunktionen würde ich nicht in FHEM abbilden, sondern als cronjob auf Betriebssystemebene definieren
  • bei einem at verwende ich nie die Uhrzeit 00:00:00 - die vielen Nullen hatten manchmal schon "lustige" Effekte hervorgerufen. Da das Ganze nicht wirklich zeitkritisch ist, ist 00:01:00 meistens unproblematisch.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Mike767

OK. Danke für den Hinweis.
Werde es dann umstellen.

prenzela

Hallo,
ich habe ein ähnliches Problem. Ich kenne den direkten Pfad zur ics Datei nicht. Gibt man den Link aus dem Device in den Browser ein, wird ein Download einer ics Datei angeboten. Ergänz man den Pfad um den Namen der ics Datei quittiert der Browser mit Status 404.

defmod AbfallCalender2 Calendar ical url https://www.abfalltermine-forchheim.de/Forchheim/Landkreis/Heroldsbach%20-%20Heroldsbach/ics

Auszug aus Logfile
Zitat2024.11.08 15:52:38 1: Calendar AbfallCalender2: retrieval failed with HTTP response code 404
2024.11.08 15:52:38 1: Calendar AbfallCalender2: retrieved no or empty data
2024.11.08 15:53:41 2: AttrTemplates: got 264 entries
2024.11.08 15:56:37 3: ABFALL myAbfall2 - CALENDAR:AbfallCalender2 triggered, updating ABFALL myAbfall2 ...

Bleibt 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) ?

Gibt es einen andren Weg ?

Grüße

passibe

Hm, bei mir funktioniert das. Weder FHEM noch cURL melden 404 zurück.

TomLee

#12
Hallo,

Zitat von: commandref...
Beginnt die URL mit https://, muss das Perl-Modul IO::Socket::SSL installiert sein ...
...

Installiert ?

Gruß Thomas

edit:
mit cpan muss nicht sein:
sudo apt install libio-socket-ssl-perl

prenzela

bei mir klappt es leider nicht. Das Modul ist installiert

Zitatlibio-socket-ssl-perl is already the newest version (2.074-2).

passibe

Kriegst du immer noch ein 404 zurück? Was, wenn du es auf dem Server mit curl oder am PC im Browser (oder dort auch ggfs mit curl/wget) probierst?

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!