diff --git a/fhem/FHEM/98_DOIF.pm b/fhem/FHEM/98_DOIF.pm index f147df678..26889ed4f 100644 --- a/fhem/FHEM/98_DOIF.pm +++ b/fhem/FHEM/98_DOIF.pm @@ -4285,8 +4285,8 @@ sub bar $trans = -1; } else { $bwidth= 75 if (!defined $bwidth); - $trans = 16; - $bheight += 16; + $trans = 13; + $bheight += 13; } $bwidth=75 if (!defined $bwidth); @@ -4330,7 +4330,7 @@ sub bar $out.= sprintf('',$currColor,$minColor,color($currColor),color($minColor)); $out.= ''; $out.= sprintf('',$bwidth,$bheight); - $out.= sprintf('%s',$bwidth/2+10,$header) if (defined $header and $header ne ""); + $out.= sprintf('%s',$bwidth/2+10,$header) if (defined $header and $header ne ""); $out.= sprintf('',$trans); my $nullColor; my $null; @@ -4394,58 +4394,84 @@ sub describeArc { sub color { - my ($hue)=@_; + my ($hue,$lightness)=@_; if (substr($hue,0,1) eq "#") { return ($hue); } my $l; - if ($hue>180 and $hue<290) { - $l=65; + if (defined $lightness) { + $l=$lightness; } else { - $l=50; + if ($hue>180 and $hue<290) { + $l=65; + } else { + $l=50; + } } return ("hsl($hue,100%,".$l."%)"); } - -sub temp_ring { - my ($value,$min,$max,$size) = @_; +sub temp_uring { + my ($value,$min,$max,$size,$type,$lightring,$lightnumber) = @_; $min=-20 if (!defined $min); $max=60 if (!defined $max); $size=80 if (!defined $size); - return(ring($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,1)); + return(ring($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,1,$type,$lightring,$lightnumber)); +} + +sub temp_ring{ + my ($value,$min,$max,$size,$lightring,$lightnumber) = @_; + return(temp_uring($value,$min,$max,$size,undef,$lightring,$lightnumber)); +} + +sub temp_mring{ + my ($value,$min,$max,$size,$lightring,$lightnumber) = @_; + return(temp_uring($value,$min,$max,$size,1,$lightring,$lightnumber)); +} + + +sub hum_uring { + my ($value,$size,$type,$lightring,$lightnumber) = @_; + $size=80 if (!defined $size); + return(ring($value,0,100,undef,undef,"%",$size,\&hum_hue,0,$type,$lightring,$lightnumber)); } -sub hum_ring { - my ($value,$size) = @_; - $size=80 if (!defined $size); - return(ring($value,0,100,undef,undef,"%",$size,\&hum_hue,0)); -} +sub hum_ring{ + my ($value,$size,$lightring,$lightnumber) = @_; + return(hum_uring($value,$size,undef,$lightring,$lightnumber)); +} + +sub hum_mring{ + my ($value,$size,$lightring,$lightnumber) = @_; + return(hum_uring($value,$size,1,$lightring,$lightnumber)); +} sub temp_hum_ring { - my ($value,$value2,$min,$max,$size) = @_; + my ($value,$value2,$min,$max,$size,$lightring,$lightnumber) = @_; $min=-20 if (!defined $min); $max=60 if (!defined $max); $size=90 if (!defined $size); - return(ring2($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,1,$value2,0,100,0,0,"%",\&hum_hue,0)); + return(ring2($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,1,$value2,0,100,0,0,"%",\&hum_hue,0,$lightring,$lightnumber)); } sub temp_temp_ring { - my ($value,$value2,$min,$max,$size) = @_; + my ($value,$value2,$min,$max,$size,$lightring,$lightnumber) = @_; $min=-20 if (!defined $min); $max=60 if (!defined $max); $size=90 if (!defined $size); - return(ring2($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,1,$value2,$min,$max,undef,undef,"°C",\&temp_hue,1)); + return(ring2($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,1,$value2,$min,$max,undef,undef,"°C",\&temp_hue,1,$lightring,$lightnumber)); } - - - sub ring { - my ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec) = @_; + my ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,$model,$lr,$ln) = @_; my $out; my ($format,$value); + if (defined $lr) { + if (!defined $ln) { + $ln=$lr; + } + } $min=0 if (!defined $min); $max=100 if (!defined $max); @@ -4471,19 +4497,25 @@ sub ring my $y=125-$val1; my $currColor; if (defined $func) { + if (defined($model)) { + $minColor=&{$func}($value); + } $currColor=&{$func}($value); } else { if ($minColor < $maxColor) { - $currColor=$prop*($maxColor-$minColor); + $currColor=$prop*($maxColor-$minColor)+$minColor; } else { - $currColor=(1-$prop)*($minColor-$maxColor); + $currColor=(1-$prop)*($minColor-$maxColor)+$maxColor; + } + if (defined($model)) { + $minColor=$currColor; } } $out.= sprintf('',$size/100*60,$size/100*55); $out.= ''; $out.= ''; - $out.= sprintf('\ - ',$currColor,$minColor,$x1,$y1,$x2,$y2,color($currColor),color($minColor)); + $out.= sprintf('\ + ',$currColor,$minColor,(defined $lr ? $lr:-1),$x1,$y1,$x2,$y2,color($currColor,$lr),color($minColor,$lr)); $out.= '\ '; @@ -4494,35 +4526,53 @@ sub ring $out.=sprintf(''); $out.=describeArc(40, 30, 26, 0, 280); $out.=''; - $out.=sprintf(''); + $out.=sprintf(''); $out.=describeArc(40, 30, 29, 0, 280); $out.=''; - $out.=sprintf(''); + $out.=sprintf(''); $out.=describeArc(40, 30, 23, 0, 280); $out.=''; - $out.=sprintf('',color($minColor)); - $out.=describeArc(40, 30, 26, 0, 10); + #if (!defined($model)) { + # $out.=sprintf('',color($minColor)); + # $out.=describeArc(40, 30, 26, 0, 10); + # $out.=''; + #} + $out.=''; + $out.=describeArc(40, 30, 26, 0, 1); $out.=''; - $out.=sprintf('',color ($maxColor)); - $out.=describeArc(40, 30, 26, 270, 280); + $out.=''; + $out.=describeArc(40, 30, 26, 279, 280); $out.=''; - $out.=sprintf('',$currColor,$minColor); + #$out.=sprintf('',color ($maxColor)); + #$out.=describeArc(40, 30, 26, 270, 280); + #$out.=''; + $out.=sprintf('',$currColor,$minColor,(defined $lr ? $lr:-1)); $out.=describeArc(40, 30, 26, 0, int($prop*280)); $out.=''; - $out.= sprintf('%s',color($currColor),sprintf($format,$val)); - $out.= sprintf('%s',color($currColor),$unit) if (defined $unit); + $out.= sprintf('%s',color($currColor,$ln),sprintf($format,$val)); + $out.= sprintf('%s',color($currColor,$ln),$unit) if (defined $unit); $out.= ''; return ($out); } +sub mring +{ + my ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,$lr,$ln) = @_; + return(ring($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,1,$lr,$ln)); +} + sub ring2 { - my ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,$val2,$min2,$max2,$minColor2,$maxColor2,$unit2,$func2,$dec2) = @_; + my ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,$val2,$min2,$max2,$minColor2,$maxColor2,$unit2,$func2,$dec2,$lr,$ln) = @_; my $out; my ($format,$value); my ($format2,$value2); - + if (defined $lr) { + if (!defined $ln) { + $ln=$lr; + } + } $min=0 if (!defined $min); $max=100 if (!defined $max); $dec=1 if (!defined $dec); @@ -4549,9 +4599,9 @@ sub ring2 $currColor=&{$func}($value); } else { if ($minColor < $maxColor) { - $currColor=$prop*($maxColor-$minColor); + $currColor=$prop*($maxColor-$minColor)+$minColor; } else { - $currColor=(1-$prop)*($minColor-$maxColor); + $currColor=(1-$prop)*($minColor-$maxColor)+$maxColor; } } @@ -4580,20 +4630,20 @@ sub ring2 $currColor2=&{$func2}($value2); } else { if ($minColor2 < $maxColor2) { - $currColor2=$prop2*($maxColor2-$minColor2); + $currColor2=$prop2*($maxColor2-$minColor2)+$minColor2; } else { - $currColor2=(1-$prop2)*($minColor2-$maxColor2); + $currColor2=(1-$prop2)*($minColor2-$maxColor2)+$maxColor2; } } $out.= sprintf('',$size/100*60,$size/100*54); $out.= ''; $out.= ''; - $out.= sprintf('\ - ',$currColor,$minColor,$x1,$y1,$x2,$y2,color($currColor),color($currColor)); + $out.= sprintf('\ + ',$currColor,$minColor,(defined $lr ? $lr:-1),$x1,$y1,$x2,$y2,color($currColor,$lr),color($currColor,$lr)); - $out.= sprintf('\ - ',$currColor2,$minColor2,$x12,$y12,$x22,$y22,color($currColor2),color($currColor2)); + $out.= sprintf('\ + ',$currColor2,$minColor2,(defined $lr ? $lr:-1),$x12,$y12,$x22,$y22,color($currColor2,$lr),color($currColor2,$lr)); $out.= '\ '; @@ -4604,36 +4654,42 @@ sub ring2 $out.=describeArc(40, 30, 25.5, 0, 280); $out.=''; - $out.=sprintf(''); + $out.=sprintf(''); $out.=describeArc(40, 30, 28.5, 0, 280); $out.=''; - $out.=sprintf(''); + $out.=sprintf(''); $out.=describeArc(40, 30, 22, 0, 280); $out.=''; - $out.=sprintf('',$currColor,$minColor); + $out.=sprintf('',$currColor,$minColor,(defined $lr ? $lr:-1)); $out.=describeArc(40, 30, 27, 0, int($prop*280)); $out.=''; - $out.=sprintf('',$currColor2,$minColor2); + $out.=sprintf('',$currColor2,$minColor2,(defined $lr ? $lr:-1)); $out.=describeArc(40, 30, 23.5, 0, int($prop2*280)); $out.=''; - - $out.=sprintf('',color($maxColor)); - $out.=describeArc(40, 30, 27, 273, 280); + $out.=''; + $out.=describeArc(40, 30, 25.2, 0, 1.5); $out.=''; - $out.=sprintf('',color($maxColor2)); - $out.=describeArc(40, 30, 23.5, 273, 280); + $out.=''; + $out.=describeArc(40, 30, 25.2, 279, 280.5); $out.=''; + #$out.=sprintf('',color($maxColor)); + #$out.=describeArc(40, 30, 27, 273, 280); + #$out.=''; + + #$out.=sprintf('',color($maxColor2)); + #$out.=describeArc(40, 30, 23.5, 273, 280); + #$out.=''; - $out.= sprintf('%s',color($currColor),sprintf($format,$val)); - $out.= sprintf('%s',color($currColor),$unit) if (defined $unit); + $out.= sprintf('%s',color($currColor,$ln),sprintf($format,$val)); + $out.= sprintf('%s',color($currColor,$ln),$unit) if (defined $unit); - $out.= sprintf('%s',color($currColor2),sprintf($format2,$val2)); - $out.= sprintf('%s',color($currColor2),$unit2) if (defined $unit2); + $out.= sprintf('%s',color($currColor2,$ln),sprintf($format2,$val2)); + $out.= sprintf('%s',color($currColor2,$ln),$unit2) if (defined $unit2); $out.= ''; return ($out);