98_DOIF.pm: svg card: default lightgray, negative/positive area is hidden

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@24236 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Damian 2021-04-13 15:51:14 +00:00
parent 5cf7b91055
commit 02d2d1ba01

View File

@ -4534,7 +4534,6 @@ sub card
my $svg_width=int($size/100*$bwidth); my $svg_width=int($size/100*$bwidth);
my $svg_height=int($size/100*$bheight); my $svg_height=int($size/100*$bheight);
my ($m,$n)=m_n($min,0,$max,50);
my $xpos; my $xpos;
my $nullColor; my $nullColor;
my $nullProp; my $nullProp;
@ -4543,7 +4542,16 @@ sub card
my $bottomVal; my $bottomVal;
my $bottomOpacity; my $bottomOpacity;
my $nullOpacity; my $nullOpacity;
if ($min < 0 and $max > 0) { my $minPlot=($min < 0 and $minValPlot > 0) ? 0:$min;
my $maxPlot=($max > 0 and $maxValPlot < 0) ? 0:$max;
##my $maxPlot=($maxValPlot < $max/2.1) ? $max/2:$max;
my ($m,$n)=m_n($minPlot,0,$maxPlot,50);
($minColor)= get_color($minPlot,$min,$max,$minColor,$maxColor,$func);
($maxColor)= get_color($maxPlot,$min,$max,$minColor,$maxColor,$func);
if ($minPlot < 0 and $maxPlot > 0) {
$xpos=50-int($n*10)/10; $xpos=50-int($n*10)/10;
$topVal=($maxValPlot > 0 ? $maxValPlot : 0); $topVal=($maxValPlot > 0 ? $maxValPlot : 0);
$bottomVal=($minValPlot < 0 ? $minValPlot : 0); $bottomVal=($minValPlot < 0 ? $minValPlot : 0);
@ -4553,9 +4561,9 @@ sub card
$topOpacity=($topVal==0 ? 0 : 0.25); $topOpacity=($topVal==0 ? 0 : 0.25);
$bottomOpacity=($bottomVal==0 ? 0: 0.25); $bottomOpacity=($bottomVal==0 ? 0: 0.25);
$nullOpacity=0.0; $nullOpacity=0.0;
} elsif ($max <= 0) { } elsif ($maxPlot <= 0) {
$xpos=0; $xpos=0;
$topVal=$max; $topVal=$maxPlot;
$topOpacity=0.0; $topOpacity=0.0;
$bottomOpacity=0.25; $bottomOpacity=0.25;
$bottomVal=$minValPlot; $bottomVal=$minValPlot;
@ -4564,7 +4572,7 @@ sub card
$topVal=$maxValPlot; $topVal=$maxValPlot;
$topOpacity=0.25; $topOpacity=0.25;
$bottomOpacity=0.0; $bottomOpacity=0.0;
$bottomVal=$min; $bottomVal=$minPlot;
} }
$ic="$ic\@".color($currColor,$ln) if (defined($icon) and $icon !~ /@/); $ic="$ic\@".color($currColor,$ln) if (defined($icon) and $icon !~ /@/);
@ -4590,7 +4598,7 @@ sub card
$out.= sprintf('<rect x="11" y="0" width="%d" height="%d" rx="2" ry="2" fill="url(#gradcardback)"/>',$bwidth-2,$bheight); $out.= sprintf('<rect x="11" y="0" width="%d" height="%d" rx="2" ry="2" fill="url(#gradcardback)"/>',$bwidth-2,$bheight);
if (defined $header) { if (defined $header) {
$out.= sprintf('<text text-anchor="start" x="14" y="23" style="fill:white; font-size:14px;%s">%s</text>',$header_style,$header_txt); $out.= sprintf('<text text-anchor="start" x="14" y="23" style="fill:lightgray; font-size:14px;%s">%s</text>',$header_style,$header_txt);
if (defined $icon and $icon ne "" and $icon ne " ") { if (defined $icon and $icon ne "" and $icon ne " ") {
my $svg_icon=::FW_makeImage($ic); my $svg_icon=::FW_makeImage($ic);
if(!($svg_icon =~ s/\sheight="[^"]*"/ height="22"/)) { if(!($svg_icon =~ s/\sheight="[^"]*"/ height="22"/)) {
@ -4605,10 +4613,10 @@ sub card
} }
$out.='<polyline points="11,27 169,27" style="stroke:gray; stroke-width:1" />'; $out.='<polyline points="11,27 169,27" style="stroke:gray; stroke-width:1" />';
} }
$out.= sprintf('<g transform="translate(0,%d)">',$htrans); $out.= sprintf('<g transform="translate(0,%d)" style="fill:lightgray">',$htrans);
$out.='<polyline points="11,73 169,73" style="stroke:gray; stroke-width:1" />'; $out.='<polyline points="11,73 169,73" style="stroke:gray; stroke-width:1" />';
$out.= '<svg width="102" height="72">'; $out.= '<svg width="102" height="72">';
$out.= '<g transform="translate(32,8) scale(1) ">'; $out.= '<g transform="translate(32,8)" style="fill:lightgray">';
my $points=""; my $points="";
my $first=1; my $first=1;
@ -4639,14 +4647,14 @@ sub card
$out.=sprintf('<circle cx="%s" cy="%s" r="2" fill="%s" opacity="0.7"/>,',$minValSlot,(50-int((${$a}[$minValSlot]*$m+$n)*10)/10),color($minValColor,$ln)) if (defined $minVal and $minValSlot != 59); $out.=sprintf('<circle cx="%s" cy="%s" r="2" fill="%s" opacity="0.7"/>,',$minValSlot,(50-int((${$a}[$minValSlot]*$m+$n)*10)/10),color($minValColor,$ln)) if (defined $minVal and $minValSlot != 59);
$out.=sprintf('<circle cx="59" cy="%s" r="2" fill="%s" opacity="0.7"> <animate attributeName="opacity" values="0.2;1;0.2" dur="2s" repeatCount="indefinite"/></circle>',(50-int(($val*$m+$n)*10)/10),color($currColor,$ln)); $out.=sprintf('<circle cx="59" cy="%s" r="2" fill="%s" opacity="0.7"> <animate attributeName="opacity" values="0.2;1;0.2" dur="2s" repeatCount="indefinite"/></circle>',(50-int(($val*$m+$n)*10)/10),color($currColor,$ln));
$out.= sprintf('<text text-anchor="end" x="-2" y="3" style="fill:%s;font-size:8px;%s">%s</text>',color($maxColor,$lmm),"",$max); $out.= sprintf('<text text-anchor="end" x="-2" y="3" style="fill:%s;font-size:8px;%s">%s</text>',color($maxColor,$lmm),"",$maxPlot);
$out.= sprintf('<text text-anchor="end" x="-2" y="53" style="fill:%s;font-size:8px;%s">%s</text>',color($minColor,$lmm),"",$min); $out.= sprintf('<text text-anchor="end" x="-2" y="53" style="fill:%s;font-size:8px;%s">%s</text>',color($minColor,$lmm),"",$minPlot);
$out.= sprintf('<text text-anchor="end" x="-2" y="%s" style="fill:%s;font-size:8px;%s">%s</text>',$xpos+3,color($nullColor,$lmm),"",0) if (defined $nullColor); $out.= sprintf('<text text-anchor="end" x="-2" y="%s" style="fill:%s;font-size:8px;%s">%s</text>',$xpos+3,color($nullColor,$lmm),"",0) if (defined $nullColor);
$out.=sprintf('<text text-anchor="middle" x="0" y="61" style="fill:white; font-size:8px">%s</text>',::strftime("%H:%M",localtime($time-$hours*3600))); $out.=sprintf('<text text-anchor="middle" x="0" y="61" style="font-size:8px">%s</text>',::strftime("%H:%M",localtime($time-$hours*3600)));
$out.=sprintf('<text text-anchor="middle" x="29" y="61" style="fill:white; font-size:8px">%s</text>',::strftime("%H:%M",localtime($time-$hours*1800))); $out.=sprintf('<text text-anchor="middle" x="29" y="61" style="font-size:8px">%s</text>',::strftime("%H:%M",localtime($time-$hours*1800)));
$out.=sprintf('<text text-anchor="end" x="69" y="61" style="fill:white; font-size:8px">%s</text>',::strftime("%H:%M",localtime($time))); $out.=sprintf('<text text-anchor="end" x="69" y="61" style="font-size:8px">%s</text>',::strftime("%H:%M",localtime($time)));
$out.= '</g>'; $out.= '</g>';
$out.= '</svg>'; $out.= '</svg>';
$out.='<g transform="translate(105,4)">'; $out.='<g transform="translate(105,4)">';
@ -4654,12 +4662,12 @@ sub card
$out.='</g>'; $out.='</g>';
if (defined $maxVal) { if (defined $maxVal) {
$out.= sprintf('<text text-anchor="start" x="13" y="85" style="fill:white; font-size:10px">▲%s</text>',::strftime("%H:%M",localtime($maxValTime))); $out.= sprintf('<text text-anchor="start" x="13" y="85" style="font-size:10px">▲%s</text>',::strftime("%H:%M",localtime($maxValTime)));
$out.= sprintf('<text text-anchor="end" x="89" y="85" style="fill:%s;font-size:10px;%s">%s</text>',color($maxValColor,$lmm),"",sprintf($format,$maxVal)); $out.= sprintf('<text text-anchor="end" x="85" y="85" style="fill:%s;font-size:10px;%s">%s</text>',color($maxValColor,$lmm),"",sprintf($format,$maxVal));
} }
if (defined $minVal) { if (defined $minVal) {
$out.= sprintf('<text text-anchor="start" x="91" y="85" style="fill:white; font-size:10px">▼%s</text>',::strftime("%H:%M",localtime($minValTime))); $out.= sprintf('<text text-anchor="start" x="89" y="85" style="font-size:10px">▼%s</text>',::strftime("%H:%M",localtime($minValTime)));
$out.= sprintf('<text text-anchor="end" x="166" y="85" style="fill:%s;font-size:10px;%s">%s</text>',color($minValColor,$lmm),"",sprintf($format,$minVal)); $out.= sprintf('<text text-anchor="end" x="165" y="85" style="fill:%s;font-size:10px;%s">%s</text>',color($minValColor,$lmm),"",sprintf($format,$minVal));
} }
$out.='</g>'; $out.='</g>';
$out.= '</svg>'; $out.= '</svg>';