From ff1b906e33e0536cb1774547ed8deef45b31c1f0 Mon Sep 17 00:00:00 2001 From: Lippie81 <46738685+Lippie81@users.noreply.github.com> Date: Thu, 7 Mar 2019 22:34:49 +0100 Subject: [PATCH] Update 59_Weather.pm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Aktualisierung des Änderungsvorschlags wie besprochen: - WeatherAsHtml() haben jetzt alle die gleiche Schnittstelle ($d, $f , $items)und sind damit abwärtskompatibel entsprechend Doku (ebenfalls angepasst) Zur Absicherung der optionalen Parameter in WeatherAsHtml(): Filter auf die erlaubten Zeichen und setzen eines defaultwertes, falls der Parameter leer ist. Eine Abfrage auf defined() ist nicht notwendig, habe alle möglichen Eingabekombinationen abgeprüft. In WeatherAsHtmlH($;$$) wird, wie vereinbart, _low_c und _high_c nur angezeigt, wenn die Readings vorhanden sind, ansonsten wird _temperature verwendet. Gleiches habe ich in WeatherAsHtmlV($;$$) angepasst. Die Änderungen laufen bei mir mit DarkSkyAPI und OpenWeatherMapAPI einwandfrei. Aussehen habe ich ebenfalls gecheckt. Beste Grüße Lippie --- 59_Weather.pm | 73 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 22 deletions(-) diff --git a/59_Weather.pm b/59_Weather.pm index e9ce097..8827f20 100755 --- a/59_Weather.pm +++ b/59_Weather.pm @@ -709,10 +709,13 @@ sub WeatherIconIMGTag($) { ##################################### sub WeatherAsHtmlV($;$$) { - my ( $d, $items, $f ) = @_; + my ( $d, $f, $items ) = @_; - $d = "" if ( !$d ); - $items = 6 if ( !$items ); + $f =~ tr/dh/./cd; + $f = "h" if ( !$f || length($f) > 1); + $items =~ tr/0-9/./cd; + $items = 6 if ( !$items ); + return "$d is not a Weather instance
" if ( !$defs{$d} || $defs{$d}->{TYPE} ne "Weather" ); @@ -749,15 +752,28 @@ sub WeatherAsHtmlV($;$$) { ); for ( my $i = 1 ; $i < $items ; $i++ ) { - $ret .= sprintf( -'%s%s: %s
min %s°C max %s°C', - $width, - WeatherIconIMGTag( ReadingsVal( $d, "${fc}${i}_icon", "" ) ), - ReadingsVal( $d, "${fc}${i}_day_of_week", "" ), - ReadingsVal( $d, "${fc}${i}_condition", "" ), - ReadingsVal( $d, "${fc}${i}_low_c", " - " ), - ReadingsVal( $d, "${fc}${i}_high_c", " - " ) - ); + if(defined($h->{READINGS}->{"${fc}${i}_low_c"}) and $h->{READINGS}->{"${fc}${i}_low_c"}){ + $ret .= sprintf( + '%s%s: %s
min %s°C max %s°C
%s', + $width, + WeatherIconIMGTag( ReadingsVal( $d, "${fc}${i}_icon", "" ) ), + ReadingsVal( $d, "${fc}${i}_day_of_week", "" ),
%s + ReadingsVal( $d, "${fc}${i}_condition", "" ), + ReadingsVal( $d, "${fc}${i}_low_c", " - " ), + ReadingsVal( $d, "${fc}${i}_high_c", " - " ) + ReadingsVal( $d, "${fc}${i}_wind_condition", " - " ) + ); + }else{ + $ret .= sprintf( + '%s%s: %s
%s°C
%s', + $width, + WeatherIconIMGTag( ReadingsVal( $d, "${fc}${i}_icon", "" ) ), + ReadingsVal( $d, "${fc}${i}_day_of_week", "" ), + ReadingsVal( $d, "${fc}${i}_condition", "" ), + ReadingsVal( $d, "${fc}${i}_temperature", " - " ) + ReadingsVal( $d, "${fc}${i}_wind_condition", " - " ) + ); + } } $ret .= ""; @@ -765,16 +781,24 @@ sub WeatherAsHtmlV($;$$) { } sub WeatherAsHtml($;$$) { - my ( $d, $items, $i ) = @_; + my ( $d, $f, $items ) = @_; - WeatherAsHtmlV( $d, $items, $i ); + $f =~ tr/dh/./cd; + $f = "h" if ( !$f || length($f) > 1); + $items =~ tr/0-9/./cd; + $items = 6 if ( !$items ); + + WeatherAsHtmlV( $d, $f, $items ); } sub WeatherAsHtmlH($;$$) { - my ( $d, $items, $f ) = @_; + my ( $d, $f, $items ) = @_; - $d = "" if ( !$d ); - $items = 6 if ( !$items ); + $f =~ tr/dh/./cd; + $f = "h" if ( !$f || length($f) > 1); + $items =~ tr/0-9/./cd; + $items = 6 if ( !$items ); + return "$d is not a Weather instance
" if ( !$defs{$d} || $defs{$d}->{TYPE} ne "Weather" ); @@ -860,13 +884,18 @@ sub WeatherAsHtmlH($;$$) { } sub WeatherAsHtmlD($;$$) { - my ( $d, $items, $i ) = @_; + my ( $d, $f, $items ) = @_; + + $f =~ tr/dh/./cd; + $f = "h" if ( !$f || length($f) > 1); + $items =~ tr/0-9/./cd; + $items = 6 if ( !$items ); if ($FW_ss) { - WeatherAsHtmlV( $d, $items, $i ); + WeatherAsHtmlV( $d, $f , $items); } else { - WeatherAsHtmlH( $d, $items, $i ); + WeatherAsHtmlH( $d, $f , $items); } } @@ -967,7 +996,7 @@ sub WeatherAsHtmlD($;$$) { to limit the numer of icons to display.

Example:
-      define MyWeatherWeblink weblink htmlCode { WeatherAsHtmlH("MyWeather",10,"h") }
+      define MyWeatherWeblink weblink htmlCode { WeatherAsHtmlH("MyWeather","h",10) }
     
@@ -1140,7 +1169,7 @@ sub WeatherAsHtmlD($;$$) { Wird der dritte Parameter verwendet muss auch der zweite Parameter für die Anzahl der darzustellenden Icons gesetzt werden.

Beispiel:
-      define MyWeatherWeblink weblink htmlCode { WeatherAsHtmlH("MyWeather",10,"h") }
+      define MyWeatherWeblink weblink htmlCode { WeatherAsHtmlH("MyWeather","h",10) }