From 8ec9dae9028908d1eaad968817ad57ebe6ae963b Mon Sep 17 00:00:00 2001 From: Marko Oldenburg Date: Sat, 26 Nov 2022 06:43:20 +0100 Subject: [PATCH] better formart --- 59_Weather.pm | 162 +++++++++++++------------- OpenWeatherMapAPI.pm | 263 ++++++++++++++++++++++--------------------- 2 files changed, 210 insertions(+), 215 deletions(-) diff --git a/59_Weather.pm b/59_Weather.pm index 2137dc3..f28569e 100755 --- a/59_Weather.pm +++ b/59_Weather.pm @@ -31,14 +31,13 @@ package main; use strict; use warnings; -use Time::HiRes qw(gettimeofday); +use Time::HiRes qw(gettimeofday); use experimental qw /switch/; use Readonly; use FHEM::Meta; use vars qw($FW_ss); - # use Data::Dumper; # for Debug only my %pressure_trend_txt_en = ( 0 => "steady", 1 => "rising", 2 => "falling" ); @@ -277,19 +276,19 @@ sub Weather_DebugCodes { sub Weather_Initialize { my $hash = shift; - $hash->{DefFn} = \&Weather_Define; - $hash->{UndefFn} = \&Weather_Undef; - $hash->{GetFn} = \&Weather_Get; - $hash->{SetFn} = \&Weather_Set; - $hash->{AttrFn} = \&Weather_Attr; - $hash->{AttrList} = + $hash->{DefFn} = \&Weather_Define; + $hash->{UndefFn} = \&Weather_Undef; + $hash->{GetFn} = \&Weather_Get; + $hash->{SetFn} = \&Weather_Set; + $hash->{AttrFn} = \&Weather_Attr; + $hash->{AttrList} = 'disable:0,1 ' . 'forecast:multiple-strict,hourly,daily ' . 'forecastLimit ' . 'alerts:0,1 ' . $readingFnAttributes; - $hash->{NotifyFn} = \&Weather_Notify; - $hash->{parseParams} = 1; + $hash->{NotifyFn} = \&Weather_Notify; + $hash->{parseParams} = 1; return FHEM::Meta::InitMod( __FILE__, $hash ); } @@ -332,7 +331,7 @@ sub Weather_ReturnWithError { sub Weather_RetrieveCallbackFn { my $name = shift; - + return unless ( IsDevice($name) ); @@ -350,14 +349,13 @@ sub Weather_RetrieveCallbackFn { } sub Weather_WriteReadings { - my $hash = shift; + my $hash = shift; my $dataRef = shift; - my $name = $hash->{NAME}; - my $hourly = ( AttrVal( $name, 'forecast', '' ) =~ m{hourly}xms ? 1: 0 ); - my $daily = ( AttrVal( $name, 'forecast', '' ) =~ m{daily}xms ? 1 : 0 ); - my $alerts = ( AttrVal( $name, 'forecast', '' ) =~ m{alerts}xms ? 1 : 0 ); - + my $name = $hash->{NAME}; + my $hourly = ( AttrVal( $name, 'forecast', '' ) =~ m{hourly}xms ? 1 : 0 ); + my $daily = ( AttrVal( $name, 'forecast', '' ) =~ m{daily}xms ? 1 : 0 ); + my $alerts = ( AttrVal( $name, 'forecast', '' ) =~ m{alerts}xms ? 1 : 0 ); readingsBeginUpdate($hash); @@ -400,17 +398,15 @@ sub Weather_WriteReadings { ### forecast if ( ref( $dataRef->{forecast} ) eq 'HASH' - && ($hourly || $daily) ) + && ( $hourly || $daily ) ) { ## hourly - if ( - defined( $dataRef->{forecast}->{hourly} ) + if ( defined( $dataRef->{forecast}->{hourly} ) && ref( $dataRef->{forecast}->{hourly} ) eq 'ARRAY' && scalar( @{ $dataRef->{forecast}->{hourly} } ) > 0 - && $hourly - ) + && $hourly ) { - my $i = 0; + my $i = 0; my $limit = AttrVal( $name, 'forecastLimit', -1 ); foreach my $fc ( @{ $dataRef->{forecast}->{hourly} } ) { $i++; @@ -429,7 +425,7 @@ sub Weather_WriteReadings { if ( defined( - $dataRef->{forecast}->{hourly}[ $i - 1 ]{wind_direction} + $dataRef->{forecast}->{hourly}[ $i - 1 ]{wind_direction} ) && $dataRef->{forecast}->{hourly}[ $i - 1 ]{wind_direction} && defined( @@ -458,14 +454,12 @@ sub Weather_WriteReadings { } ## daily - if ( - defined( $dataRef->{forecast}->{daily} ) + if ( defined( $dataRef->{forecast}->{daily} ) && ref( $dataRef->{forecast}->{daily} ) eq 'ARRAY' && scalar( @{ $dataRef->{forecast}->{daily} } ) > 0 - && $daily - ) + && $daily ) { - my $i = 0; + my $i = 0; my $limit = AttrVal( $name, 'forecastLimit', -1 ); foreach my $fc ( @{ $dataRef->{forecast}->{daily} } ) { $i++; @@ -484,7 +478,7 @@ sub Weather_WriteReadings { if ( defined( - $dataRef->{forecast}->{daily}[ $i - 1 ]{wind_direction} + $dataRef->{forecast}->{daily}[ $i - 1 ]{wind_direction} ) && $dataRef->{forecast}->{daily}[ $i - 1 ]{wind_direction} && defined( @@ -513,9 +507,9 @@ sub Weather_WriteReadings { } if ( ref( $dataRef->{alerts} ) eq 'HASH' - && $alerts ) + && $alerts ) { - while ( my ( $r, $v ) = each %{ $dataRef->{alerts} } ) { + while ( my ( $r, $v ) = each %{ $dataRef->{alerts} } ) { readingsBulkUpdate( $hash, $r, $v ) if ( ref( $dataRef->{$r} ) ne 'HASH' && ref( $dataRef->{$r} ) ne 'ARRAY' ); @@ -568,7 +562,7 @@ sub Weather_Get { my $hash = shift // return; my $aRef = shift // return; - my $name = shift @$aRef // return; + my $name = shift @$aRef // return; my $reading = shift @$aRef // return; my $value; @@ -597,37 +591,36 @@ sub Weather_Set { // return qq{"set $name" needs at least one argument}; # usage check - if ( scalar(@{$aRef}) == 0 - && $cmd eq 'update' ) + if ( scalar( @{$aRef} ) == 0 + && $cmd eq 'update' ) { Weather_DisarmTimer($hash); Weather_GetUpdate($hash); return; } - elsif ( scalar(@{$aRef}) == 1 - && $cmd eq "newLocation" ) + elsif ( scalar( @{$aRef} ) == 1 + && $cmd eq "newLocation" ) { if ( $hash->{API} eq 'DarkSkyAPI' || $hash->{API} eq 'OpenWeatherMapAPI' - || $hash->{API} eq 'wundergroundAPI' - ) + || $hash->{API} eq 'wundergroundAPI' ) { - my ($lat,$long); - ($lat,$long) = split(',',$aRef->[0]) - if ( defined($aRef->[0]) && $aRef->[0] ); - ($lat,$long) = split(',',$hash->{fhem}->{LOCATION}) + my ( $lat, $long ); + ( $lat, $long ) = split( ',', $aRef->[0] ) + if ( defined( $aRef->[0] ) && $aRef->[0] ); + ( $lat, $long ) = split( ',', $hash->{fhem}->{LOCATION} ) unless ( defined($lat) && defined($long) - && $lat =~ m{(-?\d+(\.\d+)?)}xms + && $lat =~ m{(-?\d+(\.\d+)?)}xms && $long =~ m{(-?\d+(\.\d+)?)}xms ); - $hash->{fhem}->{api}->setLocation($lat,$long); + $hash->{fhem}->{api}->setLocation( $lat, $long ); Weather_DisarmTimer($hash); Weather_GetUpdate($hash); return; } - else { return 'this API is not ' . $aRef->[0] .' supported' } + else { return 'this API is not ' . $aRef->[0] . ' supported' } } else { return "Unknown argument $cmd, choose one of update:noArg newLocation"; @@ -636,12 +629,12 @@ sub Weather_Set { ################################### sub Weather_RearmTimer { - my $hash = shift; - my $t = shift; + my $hash = shift; + my $t = shift; Log3( $hash, 4, "Weather $hash->{NAME}: Rearm new Timer" ); InternalTimer( $t, "Weather_GetUpdate", $hash, 0 ); - + return; } @@ -654,11 +647,11 @@ sub Weather_DisarmTimer { } sub Weather_Notify { - my $hash = shift; - my $dev = shift; - - my $name = $hash->{NAME}; - my $type = $hash->{TYPE}; + my $hash = shift; + my $dev = shift; + + my $name = $hash->{NAME}; + my $type = $hash->{TYPE}; return if ( $dev->{NAME} ne "global" ); return if ( !grep { /^INITIALIZED|REREADCFG$/ } @{ $dev->{CHANGED} } ); @@ -685,10 +678,9 @@ sub Weather_Notify { ##################################### sub Weather_Define { - my $hash = shift // return; - my $aRef = shift // return; - my $hRef = shift // undef; - + my $hash = shift // return; + my $aRef = shift // return; + my $hRef = shift // undef; return $@ unless ( FHEM::Meta::SetInternals($hash) ); use version 0.60; our $VERSION = FHEM::Meta::Get( $hash, 'version' ); @@ -700,11 +692,11 @@ sub Weather_Define { return $usage unless ( scalar @{$aRef} == 2 ); my $name = $aRef->[0]; - my $location = $hRef->{location} // undef; - my $apikey = $hRef->{apikey} // undef; - my $lang = $hRef->{lang} // undef; - my $interval = $hRef->{interval} // 3600; - my $API = $hRef->{API} // "DarkSkyAPI,cachemaxage:600"; + my $location = $hRef->{location} // undef; + my $apikey = $hRef->{apikey} // undef; + my $lang = $hRef->{lang} // undef; + my $interval = $hRef->{interval} // 3600; + my $API = $hRef->{API} // "DarkSkyAPI,cachemaxage:600"; # evaluate API options my ( $api, $apioptions ) = split( ',', $API, 2 ); @@ -726,15 +718,15 @@ sub Weather_Define { ? $lang : lc( AttrVal( 'global', 'language', 'de' ) ) ); - $hash->{API} = $api; - $hash->{MODEL} = $api; - $hash->{APIKEY} = $apikey; - $hash->{APIOPTIONS} = $apioptions; - $hash->{VERSION} = version->parse($VERSION)->normal; - $hash->{fhem}->{allowCache} = 1; + $hash->{API} = $api; + $hash->{MODEL} = $api; + $hash->{APIKEY} = $apikey; + $hash->{APIOPTIONS} = $apioptions; + $hash->{VERSION} = version->parse($VERSION)->normal; + $hash->{fhem}->{allowCache} = 1; - readingsSingleUpdate($hash,'current_date_time',TimeNow(),0); - readingsSingleUpdate($hash,'current_date_time','none',0); + readingsSingleUpdate( $hash, 'current_date_time', TimeNow(), 0 ); + readingsSingleUpdate( $hash, 'current_date_time', 'none', 0 ); readingsSingleUpdate( $hash, 'state', 'Initialized', 1 ); Weather_LanguageInitialize( $hash->{LANG} ); @@ -747,8 +739,8 @@ sub Weather_Define { location => $hash->{fhem}->{LOCATION}, apioptions => $hash->{APIOPTIONS}, language => $hash->{LANG}, - forecast => AttrVal($name,'forecast',''), - alerts => AttrVal($name,'alerts',0) + forecast => AttrVal( $name, 'forecast', '' ), + alerts => AttrVal( $name, 'alerts', 0 ) } ); @@ -760,8 +752,8 @@ sub Weather_Define { ##################################### sub Weather_Undef { - my $hash = shift; - my $arg = shift; + my $hash = shift; + my $arg = shift; RemoveInternalTimer($hash); return; @@ -774,7 +766,7 @@ sub Weather_Attr { given ($attrName) { when ('forecast') { if ( $cmd eq 'set' ) { - $hash->{fhem}->{api}->setForecast($attrVal) + $hash->{fhem}->{api}->setForecast($attrVal); } $hash->{fhem}->{api}->setForecast(); @@ -802,11 +794,11 @@ Readonly my $ICONSCALE => 0.5; ##################################### sub WeatherIconIMGTag { - my $icon = shift; + my $icon = shift; - my $width = int( $ICONSCALE * $ICONWIDTH ); - my $url = FW_IconURL("weather/$icon"); - my $style = " width=$width"; + my $width = int( $ICONSCALE * $ICONWIDTH ); + my $url = FW_IconURL("weather/$icon"); + my $style = " width=$width"; return "\"$icon\""; } @@ -827,8 +819,8 @@ sub WeatherAsHtmlV { my $fc; if ( defined($f) - && ( $f eq 'h' - || $f eq 'd' ) + && ( $f eq 'h' + || $f eq 'd' ) ) { $fc = ( $f eq 'd' ? 'fc' : 'hfc' ); @@ -911,8 +903,8 @@ sub WeatherAsHtmlH { my $fc; if ( defined($f) - && ( $f eq 'h' - || $f eq 'd' ) + && ( $f eq 'h' + || $f eq 'd' ) ) { $fc = ( $f eq 'd' ? 'fc' : 'hfc' ); @@ -1014,7 +1006,7 @@ sub WeatherCheckOptions { if ( defined($op1) && $op1 && $op1 =~ m{[0-9]}xms ) { $items = $op1; } if ( defined($op2) && $op2 && $op2 =~ m{[dh]}xms ) { $f = $op2; } - $f =~ tr/dh/./cd if ( defined $f && $f ); + $f =~ tr/dh/./cd if ( defined $f && $f ); $items =~ tr/0-9/./cd if ( defined($items) && $items ); $items = 6 if ( !$items ); diff --git a/OpenWeatherMapAPI.pm b/OpenWeatherMapAPI.pm index f6be947..c65fac8 100644 --- a/OpenWeatherMapAPI.pm +++ b/OpenWeatherMapAPI.pm @@ -205,10 +205,11 @@ sub new { : 900 ); - $self->{apiversion} = ($apioptions->{version} ? $apioptions->{version} : '2.5'); + $self->{apiversion} = + ( $apioptions->{version} ? $apioptions->{version} : '2.5' ); + + $self->{cached} = _CreateForecastRef($self); - $self->{cached} = _CreateForecastRef($self); - bless $self, $class; return $self; } @@ -231,18 +232,18 @@ sub _parseApiOptions { } sub setAlerts { - my $self = shift; - my $alerts = shift // 0; + my $self = shift; + my $alerts = shift // 0; $self->{alerts} = $alerts; return; } sub setForecast { - my $self = shift; - my $forecast = shift // ''; + my $self = shift; + my $forecast = shift // ''; - $self->{forecast} = $forecast; + $self->{forecast} = $forecast; return; } @@ -261,9 +262,9 @@ sub setRetrieveData { } sub setLocation { - my $self = shift; - my $lat = shift; - my $long = shift; + my $self = shift; + my $lat = shift; + my $long = shift; $self->{lat} = $lat; $self->{long} = $long; @@ -339,10 +340,12 @@ sub _RetrieveDataFromOpenWeatherMap { . $self->{lat} . '&' . 'lon=' . $self->{long} . '&' . 'APPID=' - . $self->{key} . '&' . 'units=' + . $self->{key} . '&' + . 'units=' . 'metric' . '&' . 'lang=' - . $self->{lang} . '&' . 'exclude=' - . _createExcludeString($self->{forecast},$self->{alerts}); + . $self->{lang} . '&' + . 'exclude=' + . _createExcludeString( $self->{forecast}, $self->{alerts} ); ::HttpUtils_NonblockingGet($paramRef); } @@ -351,17 +354,17 @@ sub _RetrieveDataFromOpenWeatherMap { } sub _createExcludeString { - my $forecast = shift; - my $alerts = shift; - - my @exclude = qw/alerts minutely hourly daily/; - my @forecast = split(',',$forecast); - my @alerts = ( $alerts ? ',alerts' : '' ); + my $forecast = shift; + my $alerts = shift; - my %in_forecast = map {$_ => 1} @forecast,@alerts; - my @diff = grep {not $in_forecast{$_}} @exclude; + my @exclude = qw/alerts minutely hourly daily/; + my @forecast = split( ',', $forecast ); + my @alerts = ( $alerts ? ',alerts' : '' ); - return join(',',@alerts); + my %in_forecast = map { $_ => 1 } @forecast, @alerts; + my @diff = grep { not $in_forecast{$_} } @exclude; + + return join( ',', @alerts ); } sub _RetrieveDataFinished { @@ -410,8 +413,8 @@ sub _ProcessingRetrieveData { } else { ### Debug - # print '!!! DEBUG !!! - Endpoint: ' . $self->{endpoint} . "\n"; - # print '!!! DEBUG !!! - Response: ' . Dumper $data; + # print '!!! DEBUG !!! - Endpoint: ' . $self->{endpoint} . "\n"; + # print '!!! DEBUG !!! - Response: ' . Dumper $data; ###### Ab hier wird die ResponseHash Referenze für die Rückgabe zusammen gestellt $self->{cached}->{current_date_time} = strftimeWrapper( "%a, %e %b %Y %H:%M", @@ -424,32 +427,30 @@ sub _ProcessingRetrieveData { $self->{cached}->{license}{text} = 'none'; $self->{cached}->{current} = { 'temperature' => int( - sprintf( "%.1f", - $data->{main}->{temp}) + 0.5 + sprintf( "%.1f", $data->{main}->{temp} ) + 0.5 ), 'temp_c' => int( - sprintf( "%.1f", - $data->{main}->{temp}) + 0.5 + sprintf( "%.1f", $data->{main}->{temp} ) + 0.5 ), 'low_c' => int( - sprintf( "%.1f", - $data->{main}->{temp_min}) + 0.5 + sprintf( "%.1f", $data->{main}->{temp_min} ) + + 0.5 ), 'high_c' => int( - sprintf( "%.1f", - $data->{main}->{temp_max}) + 0.5 + sprintf( "%.1f", $data->{main}->{temp_max} ) + + 0.5 ), 'tempLow' => int( - sprintf( "%.1f", - $data->{main}->{temp_min}) + 0.5 + sprintf( "%.1f", $data->{main}->{temp_min} ) + + 0.5 ), 'tempHigh' => int( - sprintf( "%.1f", - $data->{main}->{temp_max}) + 0.5 + sprintf( "%.1f", $data->{main}->{temp_max} ) + + 0.5 ), 'tempFeelsLike_c' => int( - sprintf( "%.1f", - $data->{main}->{feels_like}) + 0.5 + sprintf( "%.1f", $data->{main}->{feels_like} ) + + 0.5 ), 'humidity' => $data->{main}->{humidity}, 'condition' => encode_utf8( @@ -488,8 +489,8 @@ sub _ProcessingRetrieveData { "%a, %e %b %Y %H:%M", localtime( $data->{dt} ) ), - 'visibility' => int( sprintf( - "%.1f", $data->{visibility} ) + 0.5 + 'visibility' => int( + sprintf( "%.1f", $data->{visibility} ) + 0.5 ), }; @@ -549,14 +550,12 @@ sub _ProcessingRetrieveData { ) + 0.5 ), 'dew_point' => int( - sprintf( - "%.1f", - $data->{hourly}->[$i]->{dew_point} - ) + 0.5 + sprintf( "%.1f", + $data->{hourly}->[$i] + ->{dew_point} ) + 0.5 ), 'humidity' => - $data->{hourly}->[$i] - ->{humidity}, + $data->{hourly}->[$i]->{humidity}, 'condition' => encode_utf8( $data->{hourly}->[$i]->{weather} ->[0]->{description} @@ -594,8 +593,7 @@ sub _ProcessingRetrieveData { ) + 0.5 ), 'cloudCover' => - $data->{hourly}->[$i] - ->{clouds}, + $data->{hourly}->[$i]->{clouds}, 'code' => $codes{ $data->{hourly}->[$i]->{weather} ->[0]->{id} @@ -604,14 +602,14 @@ sub _ProcessingRetrieveData { $data->{hourly}->[$i]->{weather}->[0] ->{icon}, 'rain1h' => - $data->{hourly}->[$i]->{rain}->{'1h'}, + $data->{hourly}->[$i]->{rain}->{'1h'}, 'snow1h' => - $data->{hourly}->[$i]->{snow}->{'1h'}, - 'uvi' => - $data->{hourly}->[$i]->{uvi}, - 'visibility' => int( sprintf( - "%.1f", $data->{hourly}->[$i]->{visibility} ) - + 0.5 + $data->{hourly}->[$i]->{snow}->{'1h'}, + 'uvi' => $data->{hourly}->[$i]->{uvi}, + 'visibility' => int( + sprintf( "%.1f", + $data->{hourly}->[$i] + ->{visibility} ) + 0.5 ), }, ); @@ -669,8 +667,8 @@ sub _ProcessingRetrieveData { ) - 3600 ) ), - 'moon_phase' => $data->{daily}->[$i] - ->{moon_phase}, + 'moon_phase' => + $data->{daily}->[$i]->{moon_phase}, 'moonset' => strftime( "%a, %H:%M", localtime( @@ -681,88 +679,75 @@ sub _ProcessingRetrieveData { ) ), 'temperature' => int( - sprintf( - "%.1f", - $data->{daily}->[$i]->{temp}->{day} - ) + 0.5 + sprintf( "%.1f", + $data->{daily}->[$i]->{temp} + ->{day} ) + 0.5 ), 'temperature_morn' => int( - sprintf( - "%.1f", - $data->{daily}->[$i]->{temp}->{morn} - ) + 0.5 + sprintf( "%.1f", + $data->{daily}->[$i]->{temp} + ->{morn} ) + 0.5 ), 'temperature_eve' => int( - sprintf( - "%.1f", - $data->{daily}->[$i]->{temp}->{eve} - ) + 0.5 + sprintf( "%.1f", + $data->{daily}->[$i]->{temp} + ->{eve} ) + 0.5 ), 'temperature_night' => int( - sprintf( - "%.1f", - $data->{daily}->[$i]->{temp}->{night} - ) + 0.5 + sprintf( "%.1f", + $data->{daily}->[$i]->{temp} + ->{night} ) + 0.5 ), 'tempFeelsLike_morn' => int( - sprintf( - "%.1f", - $data->{daily}->[$i]->{feels_like}->{morn} - ) + 0.5 + sprintf( "%.1f", + $data->{daily}->[$i] + ->{feels_like}->{morn} ) + 0.5 ), 'tempFeelsLike_eve' => int( - sprintf( - "%.1f", - $data->{daily}->[$i]->{feels_like}->{eve} - ) + 0.5 + sprintf( "%.1f", + $data->{daily}->[$i] + ->{feels_like}->{eve} ) + 0.5 ), 'tempFeelsLike_night' => int( - sprintf( - "%.1f", - $data->{daily}->[$i]->{feels_like}->{night} - ) + 0.5 + sprintf( "%.1f", + $data->{daily}->[$i] + ->{feels_like}->{night} ) + + 0.5 ), 'tempFeelsLike_day' => int( - sprintf( - "%.1f", - $data->{daily}->[$i]->{feels_like}->{day} - ) + 0.5 + sprintf( "%.1f", + $data->{daily}->[$i] + ->{feels_like}->{day} ) + 0.5 ), 'temp_c' => int( - sprintf( - "%.1f", - $data->{daily}->[$i]->{temp}->{day} - ) + 0.5 + sprintf( "%.1f", + $data->{daily}->[$i]->{temp} + ->{day} ) + 0.5 ), 'low_c' => int( - sprintf( - "%.1f", - $data->{daily}->[$i]->{temp}->{min} - ) + 0.5 + sprintf( "%.1f", + $data->{daily}->[$i]->{temp} + ->{min} ) + 0.5 ), 'high_c' => int( - sprintf( - "%.1f", - $data->{daily}->[$i]->{temp}->{max} - ) + 0.5 + sprintf( "%.1f", + $data->{daily}->[$i]->{temp} + ->{max} ) + 0.5 ), 'tempLow' => int( - sprintf( - "%.1f", - $data->{daily}->[$i]->{temp}->{min} - ) + 0.5 + sprintf( "%.1f", + $data->{daily}->[$i]->{temp} + ->{min} ) + 0.5 ), 'tempHigh' => int( - sprintf( - "%.1f", - $data->{daily}->[$i]->{temp}->{max} - ) + 0.5 + sprintf( "%.1f", + $data->{daily}->[$i]->{temp} + ->{max} ) + 0.5 ), 'dew_point' => int( - sprintf( - "%.1f", - $data->{daily}->[$i]->{dew_point} - ) + 0.5 + sprintf( "%.1f", + $data->{daily}->[$i] + ->{dew_point} ) + 0.5 ), 'humidity' => $data->{daily}->[$i]->{humidity}, @@ -770,8 +755,13 @@ sub _ProcessingRetrieveData { $data->{daily}->[$i]->{weather} ->[0]->{description} ), - 'code' => $codes{ $data->{daily}->[$i]->{weather}->[0]->{id} }, - 'iconAPI' => $data->{daily}->[$i]->{weather}->[0]->{icon}, + 'code' => $codes{ + $data->{daily}->[$i]->{weather} + ->[0]->{id} + }, + 'iconAPI' => + $data->{daily}->[$i]->{weather}->[0] + ->{icon}, 'pressure' => int( sprintf( "%.1f", $data->{daily}->[$i]->{pressure} @@ -843,29 +833,42 @@ sub _ProcessingRetrieveData { push( @{ $self->{cached}->{alerts} }, { - 'warn_'.$i.'_End' => strftimeWrapper( + 'warn_' + . $i + . '_End' => strftimeWrapper( "%a, %e %b %Y %H:%M", localtime( - ( $data->{alerts}->[$i]->{end} ) - - 3600 + ( + $data->{alerts}->[$i]->{end} + ) - 3600 ) - ), - 'warn_'.$i.'_Start' => strftimeWrapper( + ), + 'warn_' + . $i + . '_Start' => strftimeWrapper( "%a, %e %b %Y %H:%M", localtime( - ( $data->{alerts}->[$i]->{start} ) - - 3600 + ( + $data->{alerts}->[$i] + ->{start} + ) - 3600 ) - ), - 'warn_'.$i.'_Description' => encode_utf8( + ), + 'warn_' + . $i + . '_Description' => encode_utf8( $data->{alerts}->[$i]->{description} - ), - 'warn_'.$i.'_SenderName' => encode_utf8( + ), + 'warn_' + . $i + . '_SenderName' => encode_utf8( $data->{alerts}->[$i]->{sender_name} - ), - 'warn_'.$i.'_Event' => encode_utf8( + ), + 'warn_' + . $i + . '_Event' => encode_utf8( $data->{alerts}->[$i]->{event} - ), + ), }, );