From a45f894aa99ae43536533538daf57229619f0057 Mon Sep 17 00:00:00 2001 From: Damian Date: Wed, 21 Apr 2021 19:23:38 +0000 Subject: [PATCH] 98_DOIF.pm: svg card: inconsistency checks, layout improvements git-svn-id: https://svn.fhem.de/fhem/trunk@24301 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_DOIF.pm | 126 +++++++++++++++++++++---------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/fhem/FHEM/98_DOIF.pm b/fhem/FHEM/98_DOIF.pm index 4ab51091c..0c944bae3 100644 --- a/fhem/FHEM/98_DOIF.pm +++ b/fhem/FHEM/98_DOIF.pm @@ -4412,7 +4412,7 @@ sub format_value { $value=$min; } elsif ($val !~ /(-?\d+(\.\d+)?)/) { $format='%s'; - $value=$min; + $value=0; } else { $format='%1.'.$dec.'f'; } @@ -4422,9 +4422,11 @@ sub format_value { sub get_color { my ($value,$min,$max,$minColor,$maxColor,$func)=@_; my $color; - if (!defined $value or $value eq "N/A") { + if (!defined $value or $value eq "N/A" or $value < $min ) { $value = $min; - } + } elsif ($value > $max) { + $value = $max; + } if (ref($func) eq "CODE") { $minColor=&{$func}($min); $maxColor=&{$func}($max); @@ -4471,8 +4473,7 @@ sub card my $bheight=88; my $htrans=0; - $minVal=$val if (!defined $minVal); - $maxVal=$val if (!defined $maxVal); + my $out; my ($ic,$iscale,$ix,$iy,$rotate); @@ -4507,18 +4508,19 @@ sub card $dec=1 if (!defined $dec); ($format,$value,$val)=format_value($val,$min,$dec); + + $minVal=$value if (!defined $minVal); + $maxVal=$value if (!defined $maxVal); + + ##$value=$max if($value>$max); + ##$value=$min if ($value<$min); - $value=$max if($value>$max); - $value=$min if ($value<$min); $size=130 if (!defined $size or $size eq ""); my ($maxValColor)=get_color($maxVal,$min,$max,$minColor,$maxColor,$func); my ($minValColor)=get_color($minVal,$min,$max,$minColor,$maxColor,$func); - - - if (defined ($icon)) { ($ic,$iscale,$ix,$iy,$rotate)=split(",",$icon); $rotate=0 if (!defined $rotate); @@ -4543,11 +4545,11 @@ sub card if ($plot ne "1" and $minVal ne $maxVal) { $scaling=1; - $minPlot=($val < $minVal ? $val : $minVal); - $maxPlot=($val > $maxVal ? $val : $maxVal); + $minPlot=($value < $minVal ? $value : $minVal); + $maxPlot=($value > $maxVal ? $value : $maxVal); } else { - $minPlot=($min < 0 and $minVal > 0) ? 0:$min; - $maxPlot=($max > 0 and $maxVal < 0) ? 0:$max; + $minPlot=($value < $min ? $value : ($min < 0 and $minVal > 0) ? 0 : ($minVal < $min) ? $minVal:$min); + $maxPlot=($value > $max ? $value : ($max > 0 and $maxVal < 0) ? 0 : ($maxVal > $max) ? $maxVal:$max); } my ($m,$n)=m_n($minPlot,0,$maxPlot,50); @@ -4623,9 +4625,52 @@ sub card my $v; my $last; my $j=0; - - $out.=''; + $out.= ''; + + $out.=''; + for (my $i=0;$i<=4;$i++) { + my $y=($i)*12.5; + ##$out.=sprintf('',$y,$y); + $out.=sprintf('',$y,$y); + } + + for (my $i=0;$i<=4;$i++) { + my $v=($maxPlot-$minPlot)*(1-$i*0.25)+$minPlot; + my ($color)= get_color($v,$min,$max,$minColor,$maxColor,$func); + $out.= sprintf('%s',$i*12.5+2,color($color,$lmm),"",sprintf($format,$v)); + } + + my $timebeginn=$time-$hours*3600; + + my $scale; + if ($hours % 6 == 0) { + $scale=$hours/6; + } + if (defined $scale) { + my ($sec,$minutes,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime($timebeginn); + my $beginhour=int($hour/$scale)*$scale; + my $diffminutes=($hour-$beginhour)*60+$minutes; + my $pos=int ($diffminutes/($scale*60)*1000)/100; + + $out.=sprintf('%02d',$beginhour) if ($pos == 0); + for (my $i=0;$i<=5;$i++) { + my $hour=$beginhour+($i+1)*$scale; + $hour=($hour >= 24 ? $hour % 24:$hour); + my $x=$i*10-$pos+9; + $out.=sprintf('',$x,0,$x,50) if ($x > 0);; + # $out.=sprintf('',$x,$xpos+1.5,$x,$xpos-1.5) if ($x > 0); + $out.=sprintf('%02d',$x,$hour); + } + } else { + for (my $i=0;$i<=3;$i++) { + my $x=($i+1)*20-1; + $out.=sprintf('%s',$i*20-1,::strftime("%H:%M",localtime($time-$hours*3600*(1-$i/3)))); + ## $out.=sprintf('',$x,$xpos+1.5,$x,$xpos-1.5); + $out.=sprintf('',$x,0,$x,50); + } + } + if (@{$a} > 0) { if (!defined ${$a}[0]) { if (defined $last_value) { @@ -4659,56 +4704,11 @@ sub card $out.= $points; $out.= sprintf('" style="fill:url(#gradplotLight_%s_%s_%s);stroke:url(#gradplot_%s_%s_%s);stroke-width:0.5" />',$topValColor,$bottomValColor,(defined $lr ? $lr:0),$topValColor,$bottomValColor,(defined $lr ? $lr:0)); } - - for (my $i=0;$i<=4;$i++) { - my $y=($i)*12.5; - $out.=sprintf('',$y,$y); - } + $out.=sprintf('',$xpos,$xpos); - $out.= sprintf('',$xpos,$xpos); $out.=sprintf('',$maxValSlot,(50-int((${$a}[$maxValSlot]*$m+$n)*10)/10),color($maxValColor,$ln)) if (defined $maxValSlot and $maxValSlot != 59); $out.=sprintf(',',$minValSlot,(50-int((${$a}[$minValSlot]*$m+$n)*10)/10),color($minValColor,$ln)) if (defined $minValSlot and $minValSlot != 59); - $out.=sprintf(' ',(50-int(($val*$m+$n)*10)/10),color($currColor,$ln)); - - for (my $i=0;$i<=4;$i++) { - my $value=($maxPlot-$minPlot)*(1-$i*0.25)+$minPlot; - my ($color)= get_color($value,$min,$max,$minColor,$maxColor,$func); - $out.= sprintf('%s',$i*12.5+2,color($color,$lmm),"",sprintf($format,$value)); - } - - my $timebeginn=$time-$hours*3600; - - my $scale; - if ($hours % 6 == 0) { - $scale=$hours/6; - } - - if (defined $scale) { - my ($sec,$minutes,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime($timebeginn); - my $beginhour=int($hour/$scale)*$scale; - my $diffminutes=($hour-$beginhour)*60+$minutes; - my $pos=int ($diffminutes/($scale*60)*1000)/100; - -# for (my $i=1;$i<=4;$i++) { -# my $x=$i*15-0.5; -# $out.=sprintf('',$x,$xpos+1.5,$x,$xpos-1.5); -# } - $out.=sprintf('%02d',$beginhour) if ($pos == 0); - for (my $i=0;$i<=5;$i++) { - my $hour=$beginhour+($i+1)*$scale; - $hour=($hour >= 24 ? $hour % 24:$hour); - my $x=$i*10-$pos+9; - $out.=sprintf('',$x,$xpos+1.5,$x,$xpos-1.5) if ($x > 0); - $out.=sprintf('%02d',$x,$hour); - } - } else { - for (my $i=0;$i<=3;$i++) { - my $x=($i+1)*20-0.5; - $out.=sprintf('%s',$i*20-1,::strftime("%H:%M",localtime($time-$hours*3600*(1-$i/3)))); - $out.=sprintf('',$x,$xpos+1.5,$x,$xpos-1.5); - } - } - + $out.=sprintf(' ',(50-int(($value*$m+$n)*10)/10),color($currColor,$ln)); $out.= ''; $out.= '';