From f23c8550281132dcc94e9715b98b1589f3687384 Mon Sep 17 00:00:00 2001 From: Damian <> Date: Tue, 18 May 2021 13:42:50 +0000 Subject: [PATCH] 98_DOIF.pm: ring: half ring option git-svn-id: https://svn.fhem.de/fhem/trunk@24473 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_DOIF.pm | 48 +++++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/fhem/FHEM/98_DOIF.pm b/fhem/FHEM/98_DOIF.pm index e15b100a3..b66caea60 100644 --- a/fhem/FHEM/98_DOIF.pm +++ b/fhem/FHEM/98_DOIF.pm @@ -5282,9 +5282,16 @@ sub icon_temp_temp_ring { sub ring { - my ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$decfont,$mode,$lightness,$lnum,$icon) = @_; + my ($val,$min,$max,$minColor,$maxColor,$unit,$sizeHalf,$func,$decfont,$mode,$lightness,$lnum,$icon) = @_; my $out; + my ($size,$half); + ($size,$half)=split (/,/,$sizeHalf) if (defined $sizeHalf); + $size=100 if (!defined $size or $size eq ""); + $half="" if (!defined $half); + + + my ($monochrom,$minMax,$innerRing,$pointer); ($monochrom,$minMax,$innerRing,$pointer)=split (/,/,$mode) if (defined $mode); @@ -5337,7 +5344,7 @@ sub ring $value=$max if ($value>$max); $value=$min if ($value<$min); - $size=100 if (!defined $size); + my $prop=0; $prop=($value-$min)/($max-$min) if ($max-$min); @@ -5376,9 +5383,26 @@ sub ring if (defined $icon and $icon ne "") { $ic="$ic\@".color($currColor,$li) if ($ic !~ /@/); } + my ($div,$maxArc,$minArc,$yNum,$yUnit,$high); + + if ($half eq "1") { + $div=2; + $maxArc=230; + $minArc=50; + $yNum=27; + $yUnit=14; + $high=29; + } else { + $div=1; + $maxArc=280; + $minArc=0; + $yNum=34; + $yUnit=47; + $high=58; + } my $width=int($size/100*63); my $height=int($size/100*58); - $out.= sprintf('',$width,$height,$width,$height); + $out.= sprintf('',$high,$width,$height/$div,$width,$height/$div); $out.= ''; $out.= ''; if (!defined $pointer) { @@ -5394,25 +5418,25 @@ sub ring $out.=''; $out.=''; $out.=''; - $out.=describeArc(41, 30, 28, 0, 280); + $out.=describeArc(41, 30, 28, $minArc, $maxArc); $out.=''; if (defined $pointer) { $out.=''; - $out.=describeArc(41, 30, 28, int($prop*280-$pointer/2), int($prop*280+$pointer/2)); + $out.=describeArc(41, 30, 28, int(($prop*($maxArc-$minArc)+$minArc-$pointer/2)*10)/10, int(($prop*($maxArc-$minArc)+$minArc+$pointer/2)*10)/10); } else { $out.=sprintf('',$currColor,$minColor,(defined $lr ? $lr:0)); - $out.=describeArc(41, 30, 28, 0, int($prop*280)); + $out.=describeArc(41, 30, 28, $minArc, int(($prop*($maxArc-$minArc)+$minArc)*10)/10); } $out.=''; if (defined $innerRing and $innerRing) { if (ref($func) eq "ARRAY"){ - my $from=0; + my $from=$minArc; my $diff=$max-$min; for (my $i=0;$i<@{$func};$i+=2) { my $curr=${$func}[$i]; my $color=${$func}[$i+1]; - my $to=int(($curr-$min)/$diff*280); + my $to=int((($curr-$min)/$diff*($maxArc-$minArc)+$minArc)*10)/10; $out.=sprintf('',color($color,$lir),($innerRing eq "1" ? "":$innerRing)); $out.=describeArc(41, 30, 25.5, $from, $to); $out.=''; @@ -5421,7 +5445,7 @@ sub ring } else { $out.=''; $out.=sprintf('',$minCol,$maxColor,(defined $lir ? $lir:0),($innerRing eq "1" ? "":$innerRing)); - $out.=describeArc(41, 30, 25.5, 0, 280); + $out.=describeArc(41, 30, 25.5, $minArc, $maxArc); $out.=''; } } @@ -5441,13 +5465,13 @@ sub ring my ($valInt,$valDec)=split(/\./,sprintf($format,$val)); if (defined $valDec) { $out.= sprintf('%s.%s', - ($icflag ? 41:34),color($currColor,$ln),(defined ($icon) ? 15:18),$fontformat,$valInt,$valDec); + ($icflag ? 41:$yNum),color($currColor,$ln),(defined $icon or $half eq "1") ? 15:18,$fontformat,$valInt,$valDec); } else { $out.= sprintf('%s', - ($icflag ? 41:34),color($currColor,$ln),(defined ($icon) ? 15:18),$fontformat,$valInt); + ($icflag ? 41:$yNum),color($currColor,$ln),(defined $icon or $half eq "1") ? 15:18,$fontformat,$valInt); } $out.= sprintf('%s', - ($icflag ? 50.5:47),color($currColor,$lu),($icflag ? 8:10),$unitformat,$unit) if (defined $unit); + ($icflag ? 50.5:$yUnit),color($currColor,$lu),($icflag or $half eq "1") ? 8:10,$unitformat,$unit) if (defined $unit); if (defined $minMax and $minMax) { $out.= sprintf('%s',color($minCol,$lmm),($minMax eq "1" ? "":$minMax),$min);