diff --git a/59_Weather.pm b/59_Weather.pm index 2249c01..3de692a 100755 --- a/59_Weather.pm +++ b/59_Weather.pm @@ -5,6 +5,11 @@ # Copyright by Dr. Boris Neubert # e-mail: omega at online dot de # +# Contributors: +# - Marko Oldenburg (CoolTux) +# - Lippie +# +# # This file is part of fhem. # # Fhem is free software: you can redistribute it and/or modify @@ -709,10 +714,17 @@ sub WeatherIconIMGTag($) { ##################################### sub WeatherAsHtmlV($;$$) { - my ( $d, $items, $f ) = @_; + my ( $d, $op1, $op2 ) = @_; + my $items = $op2; + my $f = $op1; + if($op1 =~ /[0-9]/g){ $items = $op1; } + if($op2 =~ /[dh]/g){ $f = $op2; } - $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,32 +761,61 @@ 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", "" ), + 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 .= ""; return $ret; } -sub WeatherAsHtml($;$) { - my ( $d, $i ) = @_; +sub WeatherAsHtml($;$$) { + my ( $d, $op1, $op2 ) = @_; + my $items = $op2; + my $f = $op1; + if($op1 =~ /[0-9]/g){ $items = $op1; } + if($op2 =~ /[dh]/g){ $f = $op2; } - WeatherAsHtmlV( $d, $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 ) = @_; - - $d = "" if ( !$d ); - $items = 6 if ( !$items ); + my ( $d, $op1, $op2 ) = @_; + my $items = $op2; + my $f = $op1; + if($op1 =~ /[0-9]/g){ $items = $op1; } + if($op2 =~ /[dh]/g){ $f = $op2; } + + $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" ); @@ -832,31 +873,50 @@ sub WeatherAsHtmlH($;$$) { ReadingsVal( $d, "humidity", "" ) ); for ( my $i = 1 ; $i < $items ; $i++ ) { - $ret .= sprintf( 'min %s°C', - ReadingsVal( $d, "${fc}${i}_low_c", " - " ) ); + if(defined($h->{READINGS}->{"${fc}${i}_low_c"}) and $h->{READINGS}->{"${fc}${i}_low_c"}){ + $ret .= sprintf( 'min %s°C', + ReadingsVal( $d, "${fc}${i}_low_c", " - " ) ); + } + else { + $ret .= sprintf( ' %s°C', + ReadingsVal( $d, "${fc}${i}_temperature", " - " ) ); + } } + $ret .= ''; # wind | max $ret .= sprintf( '%s', ReadingsVal( $d, "wind_condition", "" ) ); for ( my $i = 1 ; $i < $items ; $i++ ) { - $ret .= sprintf( 'max %s°C', - ReadingsVal( $d, "${fc}${i}_high_c", " - " ) ); + if(defined($h->{READINGS}->{"${fc}${i}_high_c"}) and $h->{READINGS}->{"${fc}${i}_high_c"}){ + $ret .= sprintf( 'max %s°C', + ReadingsVal( $d, "${fc}${i}_high_c", " - " ) ); + } } + $ret .= ""; return $ret; } -sub WeatherAsHtmlD($;$) { - my ( $d, $i ) = @_; +sub WeatherAsHtmlD($;$$) { + my ( $d, $op1, $op2 ) = @_; + my $items = $op2; + my $f = $op1; + if($op1 =~ /[0-9]/g){ $items = $op1; } + if($op2 =~ /[dh]/g){ $f = $op2; } + + $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, $i ); + WeatherAsHtmlV( $d, $f , $items); } else { - WeatherAsHtmlH( $d, $i ); + WeatherAsHtmlH( $d, $f , $items); } } @@ -957,7 +1017,7 @@ sub WeatherAsHtmlD($;$) { to limit the numer of icons to display.

Example:
-      define MyWeatherWeblink weblink htmlCode { WeatherAsHtmlH("MyWeather") }
+      define MyWeatherWeblink weblink htmlCode { WeatherAsHtmlH("MyWeather","h",10) }
     
@@ -1130,7 +1190,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") }
+      define MyWeatherWeblink weblink htmlCode { WeatherAsHtmlH("MyWeather","h",10) }