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.= '';