diff --git a/fhem/CHANGED b/fhem/CHANGED index 02c297a4a..dce4347ff 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,12 +1,13 @@ # 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: DarkSky/OpenWeatherMap API fix bug with umlauts - bugfix: 73_AutoShuttersControl: fix Bug open Window befor IsDay and closed IsDay - changed: 74_Unifi: removed deprecated UnifiSwitch-functions! - bugfix: 74_UnififSwitch: fixed poe restart - feature: 57_Calendar.pm: new features and attributes german commandref added - - bugfix: 00_SIGNALduino: Load protocolHash from web if file is + - bugfix: 00_SIGNALduino: Load protocolHash from web if file is missing on fs - bugfix: 49_SSCam: some warnings, Forum:#97706 - bugfix: 88_HMCCU: Fixed minor bugs. @@ -17,7 +18,7 @@ Firmware for avr boards can be downloaded and flashed. on demand from gitghub releases. supports dupTimeout on same iodev - change: 00_SIGNALduino: Attribute hardware does not longer support nano + change: 00_SIGNALduino: Attribute hardware does not longer support nano select nano328 instead - feature: 14_SD_RSL: Updated implementation for "all" button on devices - feature: 14_SD_WS: support sensors E0001PA,S522,TX-EZ6,other @@ -94,7 +95,7 @@ - feature: 98_livetracking: added events for OwnTrack zones - feature: 93_DbRep: command exportToFile or attribute "expimpfile" accept option "MAXLINES=" - - bugfix: 09_CUL_FHTTK: removed low batt information from state, moved to + - bugfix: 09_CUL_FHTTK: removed low batt information from state, moved to reading batteryState - feature: 59_Weather: add limit forecast, selection between daily and hourly forecast @@ -220,7 +221,7 @@ - bugfix: 51_MOBILEALERTS.pm: Offlimit for decodeHumidityDecimal added - change: 98_MSwitch.pm, update V2.07 - change: 20_FRM_IN: only update on change (Forum #81815) - - bugfix: 73_AutoShuttersControl: fix absent Event and ModeDown absent bug + - bugfix: 73_AutoShuttersControl: fix absent Event and ModeDown absent bug - bugfix: 73_AutoShuttersControl: fix gone then absent bug - feature: 49_SSCam: V7.6.0, The PTZ panel is completed by "Preset" and "Patrol" dropdown lists (for PTZ cams only) diff --git a/fhem/FHEM/DarkSkyAPI.pm b/fhem/FHEM/DarkSkyAPI.pm index 0fe85597a..b4a208984 100644 --- a/fhem/FHEM/DarkSkyAPI.pm +++ b/fhem/FHEM/DarkSkyAPI.pm @@ -44,7 +44,7 @@ eval "use Encode qw(encode_utf8);1" or $missingModul .= "Encode "; # use Data::Dumper; # for Debug only ## API URL use constant URL => 'https://api.darksky.net/forecast/'; -use constant VERSION => '0.2.4'; +use constant VERSION => '0.2.5'; my %codes = ( 'clear-day' => 32, @@ -209,8 +209,8 @@ sub _ProcessingRetrieveData($$) { # print Dumper $data; ## für Debugging $self->{cached}->{current_date_time} = - strftime( "%a, %e %b %Y %H:%M", - localtime( $self->{fetchTime} ) ); + encode_utf8(strftime( "%a, %e %b %Y %H:%M", + localtime( $self->{fetchTime} ) )); $self->{cached}->{timezone} = $data->{timezone}; $self->{cached}->{license}{text} = $data->{flags}->{'meteoalarm-license'}; @@ -247,10 +247,10 @@ sub _ProcessingRetrieveData($$) { 'ozone' => $data->{currently}->{ozone}, 'code' => $codes{ $data->{currently}->{icon} }, 'iconAPI' => $data->{currently}->{icon}, - 'pubDate' => strftime( + 'pubDate' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $data->{currently}->{'time'} ) - ), + )), 'precipProbability' => $data->{currently}->{precipProbability} * 100, 'apparentTemperature' => int( sprintf( @@ -271,12 +271,12 @@ sub _ProcessingRetrieveData($$) { push( @{ $self->{cached}->{forecast}->{daily} }, { - 'pubDate' => strftime( + 'pubDate' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $data->{daily}->{data}->[$i]->{'time'} ) - ), + )), 'day_of_week' => strftime( "%a", localtime( @@ -298,49 +298,49 @@ sub _ProcessingRetrieveData($$) { $data->{daily}->{data}->[$i] ->{temperatureLow} ) + 0.5 ), - 'tempLowTime' => strftime( + 'tempLowTime' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $data->{daily}->{data}->[$i] ->{temperatureLowTime} ) - ), + )), 'tempHigh' => int( sprintf( "%.1f", $data->{daily}->{data}->[$i] ->{temperatureHigh} ) + 0.5 ), - 'tempHighTime' => strftime( + 'tempHighTime' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $data->{daily}->{data}->[$i] ->{temperatureHighTime} ) - ), + )), 'apparentTempLow' => int( sprintf( "%.1f", $data->{daily}->{data}->[$i] ->{apparentTemperatureLow} ) + 0.5 ), - 'apparentTempLowTime' => strftime( + 'apparentTempLowTime' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $data->{daily}->{data}->[$i] ->{apparentTemperatureLowTime} ) - ), + )), 'apparentTempHigh' => int( sprintf( "%.1f", $data->{daily}->{data}->[$i] ->{apparentTemperatureHigh} ) + 0.5 ), - 'apparentTempHighTime' => strftime( + 'apparentTempHighTime' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $data->{daily}->{data}->[$i] ->{apparentTemperatureHighTime} ) - ), + )), 'code' => $codes{ $data->{daily}->{data}->[$i]->{icon} }, 'iconAPI' => $data->{daily}->{data}->[$i]->{icon}, @@ -350,12 +350,12 @@ sub _ProcessingRetrieveData($$) { 'ozone' => $data->{daily}->{data}->[$i]->{ozone}, 'uvIndex' => $data->{daily}->{data}->[$i]->{uvIndex}, - 'uvIndexTime' => strftime( + 'uvIndexTime' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $data->{daily}->{data}->[$i]->{uvIndexTime} ) - ), + )), 'dewPoint' => int( sprintf( "%.1f", $data->{daily}->{data}->[$i]->{dewPoint} ) @@ -382,26 +382,26 @@ sub _ProcessingRetrieveData($$) { ($data->{daily}->{data}->[$i]->{windGust} * 3.6) ) + 0.5 ), - 'windGustTime' => strftime( + 'windGustTime' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $data->{daily}->{data}->[$i]->{windGustTime} ) - ), + )), 'moonPhase' => $data->{daily}->{data}->[$i]->{moonPhase}, - 'sunsetTime' => strftime( + 'sunsetTime' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $data->{daily}->{data}->[$i]->{sunsetTime} ) - ), - 'sunriseTime' => strftime( + )), + 'sunriseTime' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $data->{daily}->{data}->[$i]->{sunriseTime} ) - ), + )), 'pressure' => int( sprintf( "%.1f", $data->{daily}->{data}->[$i]->{pressure} ) @@ -419,7 +419,7 @@ sub _ProcessingRetrieveData($$) { $self->{cached}->{forecast}->{daily}[$i]{precipIntensity} = ( defined($data->{daily}->{data}->[$i]->{precipIntensity}) ? $data->{daily}->{data}->[$i]->{precipIntensity} : '-' ); $self->{cached}->{forecast}->{daily}[$i]{precipProbability} = ( defined($data->{daily}->{data}->[$i]->{precipProbability}) ? $data->{daily}->{data}->[$i]->{precipProbability} * 100 : '-' ); $self->{cached}->{forecast}->{daily}[$i]{precipType} = ( defined($data->{daily}->{data}->[$i]->{precipType}) ? $data->{daily}->{data}->[$i]->{precipType} : '-' ); - $self->{cached}->{forecast}->{daily}[$i]{precipIntensityMaxTime} = ( defined($data->{daily}->{data}->[$i]->{precipIntensityMaxTime}) ? strftime("%a, %e %b %Y %H:%M",localtime($data->{daily}->{data}->[$i]->{precipIntensityMaxTime}) ) : '-' ); + $self->{cached}->{forecast}->{daily}[$i]{precipIntensityMaxTime} = ( defined($data->{daily}->{data}->[$i]->{precipIntensityMaxTime}) ? encode_utf8(strftime("%a, %e %b %Y %H:%M",localtime($data->{daily}->{data}->[$i]->{precipIntensityMaxTime}) )) : '-' ); $i++; } @@ -435,12 +435,12 @@ sub _ProcessingRetrieveData($$) { push( @{ $self->{cached}->{forecast}->{hourly} }, { - 'pubDate' => strftime( + 'pubDate' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $data->{hourly}->{data}->[$i]->{'time'} ) - ), + )), 'day_of_week' => strftime( "%a, %H:%M", localtime( @@ -516,7 +516,7 @@ sub _ErrorHandling($$) { my ( $self, $err ) = @_; $self->{cached}->{current_date_time} = - strftime( "%a, %e %b %Y %H:%M", localtime( $self->{fetchTime} ) ), + encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $self->{fetchTime} ) )), $self->{cached}->{status} = $err; $self->{cached}->{validity} = 'stale'; } diff --git a/fhem/FHEM/OpenWeatherMapAPI.pm b/fhem/FHEM/OpenWeatherMapAPI.pm index 68ead05f1..a3446b881 100644 --- a/fhem/FHEM/OpenWeatherMapAPI.pm +++ b/fhem/FHEM/OpenWeatherMapAPI.pm @@ -48,7 +48,7 @@ eval "use Encode qw(encode_utf8);1" or $missingModul .= "Encode "; # use Data::Dumper; # for Debug only ## API URL use constant URL => 'https://api.openweathermap.org/data/2.5/'; -use constant VERSION => '0.2.2'; +use constant VERSION => '0.2.3'; ## URL . 'weather?' for current data ## URL . 'forecast?' for forecast data @@ -264,8 +264,8 @@ sub _ProcessingRetrieveData($$) { # print 'Response: ' . Dumper $data; ###### Ab hier wird die ResponseHash Referenze für die Rückgabe zusammen gestellt $self->{cached}->{current_date_time} = - strftime( "%a, %e %b %Y %H:%M", - localtime( $self->{fetchTime} ) ); + encode_utf8(strftime( "%a, %e %b %Y %H:%M", + localtime( $self->{fetchTime} ) )); if ( $self->{endpoint} eq 'weather' ) { $self->{cached}->{country} = $data->{sys}->{country}; @@ -311,18 +311,18 @@ sub _ProcessingRetrieveData($$) { int( sprintf( "%.1f", $data->{visibility} ) + 0.5 ), 'code' => $codes{ $data->{weather}->[0]->{id} }, 'iconAPI' => $data->{weather}->[0]->{icon}, - 'sunsetTime' => strftime( + 'sunsetTime' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $data->{sys}->{sunset} ) - ), - 'sunriseTime' => strftime( + )), + 'sunriseTime' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $data->{sys}->{sunrise} ) - ), - 'pubDate' => strftime( + )), + 'pubDate' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $data->{dt} ) - ), + )), }; } @@ -338,12 +338,12 @@ sub _ProcessingRetrieveData($$) { push( @{ $self->{cached}->{forecast}->{hourly} }, { - 'pubDate' => strftime( + 'pubDate' => encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( ( $data->{list}->[$i]->{dt} ) - 3600 ) - ), + )), 'day_of_week' => strftime( "%a, %H:%M", localtime( @@ -472,7 +472,7 @@ sub _ErrorHandling($$) { my ( $self, $err ) = @_; $self->{cached}->{current_date_time} = - strftime( "%a, %e %b %Y %H:%M", localtime( $self->{fetchTime} ) ), + encode_utf8(strftime( "%a, %e %b %Y %H:%M", localtime( $self->{fetchTime} ) )), $self->{cached}->{status} = $err; $self->{cached}->{validity} = 'stale'; }