diff --git a/fhem/CHANGED b/fhem/CHANGED index b9e10563e..1ccccc0ae 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 + - feature: 57_Calendar: new attribute userAgent (forum #142335) - bugfix: 72_FRITZBOX: kleinere Fehler (erm upnp) - feature: 76_SolarForecast: Version 1.57.3 - bugfix: 72_FRITZBOX: Fehler in Rückgabe get tr064Command diff --git a/fhem/FHEM/57_Calendar.pm b/fhem/FHEM/57_Calendar.pm index 65f5036d5..8bdd85c6c 100644 --- a/fhem/FHEM/57_Calendar.pm +++ b/fhem/FHEM/57_Calendar.pm @@ -1810,6 +1810,7 @@ sub Calendar_Initialize($) { "onCreateEvent quirks ". "defaultFormat defaultTimeFormat ". "hasModeReadings:0,1 " . + "userAgent " . $readingFnAttributes; } @@ -2695,6 +2696,8 @@ sub Calendar_GetUpdate($$$;$) { $SSLArgs= { SSL_verify_mode => $SSLVerifyMode }; } } + + my $userAgent = AttrVal($name, 'userAgent', 'fhem'); my $timeout= AttrVal($name, "timeout", 30); HttpUtils_NonblockingGet({ @@ -2707,6 +2710,7 @@ sub Calendar_GetUpdate($$$;$) { removeall => $removeall, sslargs => $SSLArgs, t => $t, + header => { 'User-Agent' => $userAgent }, callback => \&Calendar_ProcessUpdate, }); Log3 $hash, 4, "Calendar $name: Getting data from URL "; # $url @@ -2756,38 +2760,49 @@ sub Calendar_ProcessUpdate($$$) { return 0; } - # not for the developer: + # note for the developer: # we must be sure that code that starts here ends with Calendar_CheckAndRearm() # no matter what branch is taken in the following delete($hash->{".fhem"}{iCalendar}); - my $httpresponsecode= $param->{code}; - + my $httpresponsecode = $param->{code} // '-'; + + readingsBeginUpdate($hash); if($errmsg) { Log3 $name, 1, "Calendar $name: retrieval failed with error message $errmsg"; - readingsSingleUpdate($hash, "state", "error ($errmsg)", 1); + readingsBulkUpdate($hash, "state", "error ($errmsg)"); + readingsBulkUpdate($hash, 'lastResponse', "$httpresponsecode $errmsg"); } else { if($type eq "url") { + Log3 $name, 5, "Calendar $name: HTTP response code $httpresponsecode"; if($httpresponsecode != 200) { $errmsg= "retrieval failed with HTTP response code $httpresponsecode"; Log3 $name, 1, "Calendar $name: $errmsg"; - readingsSingleUpdate($hash, "state", "error ($errmsg)", 1); - Log3 $name, 5, "Calendar $name: HTTP response header:\n" . + readingsBulkUpdate($hash, "state", "error ($errmsg)"); + readingsBulkUpdate($hash, 'lastResponse', "$httpresponsecode Error"); + Log3 $name, 5, "Calendar $name: HTTP response header:\n" . $param->{httpheader}; } else { - Log3 $name, 5, "Calendar $name: HTTP response code $httpresponsecode"; - readingsSingleUpdate($hash, "state", "retrieved", 1); + readingsBulkUpdate($hash, "state", "retrieved"); + readingsBulkUpdate($hash, 'lastResponse', 'OK'); } } elsif($type eq "file") { Log3 $name, 5, "Calendar $name: file retrieval successful"; - readingsSingleUpdate($hash, "state", "retrieved", 1); + readingsBulkUpdate($hash, "state", "retrieved"); + readingsBulkUpdate($hash, 'lastResponse', 'OK'); } else { # this case never happens by virtue of _Define, so just - die "Software Error"; + #die "Software Error"; + # Sorry, but FHEM must never die! + Log3 $name, 1, "Calendar $name: Software Error!"; + readingsBulkUpdate($hash, 'state', 'Software Error'); + readingsBulkUpdate($hash, 'lastResponse', 'Software Error'); + readingsEndUpdate($hash, 1); + return 0; } } - + readingsEndUpdate($hash, 1); $hash->{".fhem"}{t}= $t; if($errmsg or !defined($ics) or ("$ics" eq "") ) { Log3 $hash, 1, "Calendar $name: retrieved no or empty data"; @@ -2804,6 +2819,7 @@ sub Calendar_ProcessUpdate($$$) { } } + } sub Calendar_Cleanup($) { @@ -3905,6 +3921,11 @@ sub CalendarEventsAsHtml($;$) {

+
  • userAgent
    + Set User-Agent in HTML request header. Needed for example with shared calendars on outlook.office365.com (error 503). + Set to same value as an browser does which can download ics. Example: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0". You may get an error 500 if string is invalid. +


  • +
  • readingFnAttributes
  • @@ -4551,7 +4572,7 @@ sub CalendarEventsAsHtml($;$) { Weitere Informationen unter Plug-ins im Text.

    -
  • SSLVerify
    +
  • SSLVerify
    Dieses Attribut setzt die Art der Überprüfung des Zertifikats des Partners bei mit SSL gesicherten Verbindungen. Entweder auf 0 setzen für @@ -4584,6 +4605,10 @@ sub CalendarEventsAsHtml($;$) {


  • +
  • userAgent
    + Wert des Feldes User-Agent im HTML Request Header. Notwendig z.B. bei Abfragen über outlook.office365.com (error 503). + Auf den gleichen Wert setzen, wie es ein Browser macht, mit dem der Download des ICS funktioniert. Beispiel: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0". Ist der Wert ungültig, erhält man einen error 500. +


  • readingFnAttributes