diff --git a/fhem/FHEM/98_DOIF.pm b/fhem/FHEM/98_DOIF.pm
index b6ae714e4..e7b4986ae 100644
--- a/fhem/FHEM/98_DOIF.pm
+++ b/fhem/FHEM/98_DOIF.pm
@@ -4301,13 +4301,19 @@ sub format_value {
sub bar
{
- my ($val,$min,$max,$header,$minColor,$maxColor,$unit,$bwidth,$bheight,$size,$func,$dec,$model,$lr,$ln,$icon) = @_;
+ my ($val,$min,$max,$header,$minColor,$maxColor,$unit,$bwidth,$bheight,$size,$func,$decfont,$model,$lr,$ln,$icon) = @_;
my $out;
my $trans=0;
my ($format,$value);
- my ($ic,$iscale,$ix,$iy);
+ my ($ic,$iscale,$ix,$iy,$rotate);
my $minCol=$minColor;
+ my ($dec,$fontformat);
+
+ ($dec,$fontformat)=split (/,/,$decfont) if (defined $decfont);
+ $fontformat="" if (!defined $fontformat);
+
+
if (defined $lr) {
if (!defined $ln) {
$ln=$lr;
@@ -4368,7 +4374,7 @@ sub bar
}
if (defined ($icon)) {
- ($ic,$iscale,$ix,$iy,)=split(",",$icon);
+ ($ic,$iscale,$ix,$iy,$rotate)=split(",",$icon);
if (defined ($ix)) {
$ix+=$bwidth/2+5;
} else {
@@ -4379,7 +4385,9 @@ sub bar
} else {
$iy=($height/2-12);
};
- $iscale=1 if (!defined($iscale));
+ $rotate=0 if (!defined $rotate);
+ $iscale=1 if (!defined $iscale);
+ $ic="" if (!defined($ic));
}
@@ -4414,10 +4422,9 @@ sub bar
$out.= sprintf('%s',$height+9,color($minCol,$ln),sprintf($format,$min));
$out.= sprintf('',$y,$val1,$currColor,$minColor,(defined $lr ? $lr:-1));
$out.= sprintf('',$height);
- ##$out.= sprintf('',$height);
$out.= sprintf('',$null,$null) if ($min < 0 and $max > 0);;
- if (defined $icon and $icon ne "") {
+ if (defined $icon and $icon ne "" and $icon ne " ") {
my $svg_icon=::FW_makeImage($ic);
if(!($svg_icon =~ s/\sheight="[^"]*"/ height="22"/)) {
$svg_icon =~ s/svg/svg height="22"/
@@ -4425,75 +4432,79 @@ sub bar
if(!($svg_icon =~ s/\swidth="[^"]*"/ width="22"/)) {
$svg_icon =~ s/svg/svg width="22"/
}
- $out.='';
+ $out.='';
$out.= $svg_icon;
$out.='';
-
-## $out.='';
-## $out.= ::FW_makeImage($ic);
-## $out.='';
-## $out.='';#height="18" width="18"
-## $out.='';
}
+ my ($valInt,$valDec)=split(/\./,sprintf($format,$val));
- $out.= sprintf('%s%s',$bwidth+6,(defined ($icon) ? $height/2+23:$height/2+12),color($currColor,$ln),sprintf($format,$val),$unit);
-
+ if (defined $valDec) {
+ $out.= sprintf('%s.%s%s',
+ $bwidth+6,(defined ($icon) ? $height/2+23:$height/2+12),color($currColor,$ln),$fontformat,$valInt,$valDec,$unit);
+ } else {
+ $out.= sprintf('%s%s',
+ $bwidth+6,(defined ($icon) ? $height/2+23:$height/2+12),color($currColor,$ln),$fontformat,$valInt,$unit);
+ }
$out.= '';
$out.= '';
return ($out);
}
sub temp_bar {
- my ($value,$min,$max,$header,$width,$height,$size,$lightbar,$lightnumber) = @_;
+ my ($value,$min,$max,$header,$width,$height,$size,$lightbar,$lightnumber,$decfont) = @_;
$min=-20 if (!defined $min or $min eq "");
$max=60 if (!defined $max or $max eq "");
- return(bar($value,$min,$max,$header,undef,undef,"°C",$width,$height,$size,\&temp_hue,1,undef,$lightbar,$lightnumber));
+ $decfont=1 if (!defined $decfont);
+ return(bar($value,$min,$max,$header,undef,undef,"°C",$width,$height,$size,\&temp_hue,$decfont,undef,$lightbar,$lightnumber));
}
sub temp_mbar {
- my ($value,$min,$max,$header,$width,$height,$size,$lightbar,$lightnumber) = @_;
+ my ($value,$min,$max,$header,$width,$height,$size,$lightbar,$lightnumber,$decfont) = @_;
$min=-20 if (!defined $min or $min eq "");
$max=60 if (!defined $max or $max eq "");
- return(bar($value,$min,$max,$header,undef,undef,"°C",$width,$height,$size,\&temp_hue,1,1,$lightbar,$lightnumber));
+ $decfont=1 if (!defined $decfont);
+ return(bar($value,$min,$max,$header,undef,undef,"°C",$width,$height,$size,\&temp_hue,$decfont,1,$lightbar,$lightnumber));
}
sub icon_temp_bar {
- my ($icon,$value,$min,$max,$header,$width,$height,$size,$lightbar,$lightnumber) = @_;
+ my ($icon,$value,$min,$max,$header,$width,$height,$size,$lightbar,$lightnumber,$decfont) = @_;
$min=-20 if (!defined $min or $min eq "");
$max=60 if (!defined $max or $max eq "");
- return(bar($value,$min,$max,$header,undef,undef,"°C",$width,$height,$size,\&temp_hue,1,undef,$lightbar,$lightnumber,$icon));
+ $decfont=1 if (!defined $decfont);
+ return(bar($value,$min,$max,$header,undef,undef,"°C",$width,$height,$size,\&temp_hue,$decfont,undef,$lightbar,$lightnumber,$icon));
}
sub icon_temp_mbar {
- my ($icon,$value,$min,$max,$header,$width,$height,$size,$lightbar,$lightnumber) = @_;
+ my ($icon,$value,$min,$max,$header,$width,$height,$size,$lightbar,$lightnumber,$decfont) = @_;
$min=-20 if (!defined $min or $min eq "");
$max=60 if (!defined $max or $max eq "");
- return(bar($value,$min,$max,$header,undef,undef,"°C",$width,$height,$size,\&temp_hue,1,1,$lightbar,$lightnumber,$icon));
+ $decfont=1 if (!defined $decfont);
+ return(bar($value,$min,$max,$header,undef,undef,"°C",$width,$height,$size,\&temp_hue,$decfont,1,$lightbar,$lightnumber,$icon));
}
sub hum_bar {
- my ($value,$header,$width,$height,$size,$lightbar,$lightnumber) = @_;
-## $width=50 if (!defined $width);
- return(bar($value,0,100,$header,undef,undef,"%",$width,$height,$size,\&hum_hue,0,undef,$lightbar,$lightnumber));
+ my ($value,$header,$width,$height,$size,$lightbar,$lightnumber,$decfont) = @_;
+ $decfont=0 if (!defined $decfont);
+ return(bar($value,0,100,$header,undef,undef,"%",$width,$height,$size,\&hum_hue,$decfont,undef,$lightbar,$lightnumber));
}
sub hum_mbar {
- my ($value,$header,$width,$height,$size,$lightbar,$lightnumber) = @_;
-## $width=50 if (!defined $width);
- return(bar($value,0,100,$header,undef,undef,"%",$width,$height,$size,\&hum_hue,0,1,$lightbar,$lightnumber));
+ my ($value,$header,$width,$height,$size,$lightbar,$lightnumber,$decfont) = @_;
+ $decfont=0 if (!defined $decfont);
+ return(bar($value,0,100,$header,undef,undef,"%",$width,$height,$size,\&hum_hue,$decfont,1,$lightbar,$lightnumber));
}
sub icon_hum_bar {
- my ($icon,$value,$header,$width,$height,$size,$lightbar,$lightnumber) = @_;
-## $width=50 if (!defined $width);
- return(bar($value,0,100,$header,undef,undef,"%",$width,$height,$size,\&hum_hue,0,undef,$lightbar,$lightnumber,$icon));
+ my ($icon,$value,$header,$width,$height,$size,$lightbar,$lightnumber,$decfont) = @_;
+ $decfont=0 if (!defined $decfont);
+ return(bar($value,0,100,$header,undef,undef,"%",$width,$height,$size,\&hum_hue,$decfont,undef,$lightbar,$lightnumber,$icon));
}
sub icon_hum_mbar {
- my ($icon,$value,$header,$width,$height,$size,$lightbar,$lightnumber) = @_;
-## $width=50 if (!defined $width);
- return(bar($value,0,100,$header,undef,undef,"%",$width,$height,$size,\&hum_hue,0,1,$lightbar,$lightnumber,$icon));
+ my ($icon,$value,$header,$width,$height,$size,$lightbar,$lightnumber,$decfont) = @_;
+ $decfont=0 if (!defined $decfont);
+ return(bar($value,0,100,$header,undef,undef,"%",$width,$height,$size,\&hum_hue,$decfont,1,$lightbar,$lightnumber,$icon));
}
sub icon_bar {
@@ -4542,103 +4553,139 @@ sub color {
}
sub temp_uring {
- my ($value,$min,$max,$size,$type,$lightring,$lightnumber,$icon) = @_;
+ my ($value,$min,$max,$size,$type,$lightring,$lightnumber,$icon,$decfont) = @_;
$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,$type,$lightring,$lightnumber,$icon));
+ $decfont=1 if (!defined $decfont);
+ return(ring($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,$decfont,$type,$lightring,$lightnumber,$icon));
}
sub temp_ring{
- my ($value,$min,$max,$size,$lightring,$lightnumber) = @_;
- return(temp_uring($value,$min,$max,$size,undef,$lightring,$lightnumber));
+ my ($value,$min,$max,$size,$lightring,$lightnumber,$decfont) = @_;
+ return(temp_uring($value,$min,$max,$size,undef,$lightring,$lightnumber,undef,$decfont));
}
sub temp_mring{
- my ($value,$min,$max,$size,$lightring,$lightnumber) = @_;
- return(temp_uring($value,$min,$max,$size,1,$lightring,$lightnumber));
+ my ($value,$min,$max,$size,$lightring,$lightnumber,$decfont) = @_;
+ return(temp_uring($value,$min,$max,$size,1,$lightring,$lightnumber,undef,$decfont));
}
sub icon_temp_ring{
- my ($icon,$value,$min,$max,$size,$lightring,$lightnumber) = @_;
+ my ($icon,$value,$min,$max,$size,$lightring,$lightnumber,$decfont) = @_;
$size=100 if (!defined $size);
- return(temp_uring($value,$min,$max,$size,undef,$lightring,$lightnumber,$icon));
+ return(temp_uring($value,$min,$max,$size,undef,$lightring,$lightnumber,$icon,$decfont));
}
sub icon_temp_mring{
- my ($icon,$value,$min,$max,$size,$lightring,$lightnumber) = @_;
+ my ($icon,$value,$min,$max,$size,$lightring,$lightnumber,$decfont) = @_;
$size=100 if (!defined $size);
- return(temp_uring($value,$min,$max,$size,1,$lightring,$lightnumber,$icon));
+ return(temp_uring($value,$min,$max,$size,1,$lightring,$lightnumber,$icon,$decfont));
}
sub hum_uring {
- my ($value,$size,$type,$lightring,$lightnumber,$icon) = @_;
+ my ($value,$size,$type,$lightring,$lightnumber,$icon,$decfont) = @_;
$size=80 if (!defined $size);
- return(ring($value,0,100,undef,undef,"%",$size,\&hum_hue,0,$type,$lightring,$lightnumber,$icon));
+ $decfont=0 if (!defined $decfont);
+ return(ring($value,0,100,undef,undef,"%",$size,\&hum_hue,$decfont,$type,$lightring,$lightnumber,$icon));
}
sub hum_ring{
- my ($value,$size,$lightring,$lightnumber) = @_;
- return(hum_uring($value,$size,undef,$lightring,$lightnumber));
+ my ($value,$size,$lightring,$lightnumber,$decfont) = @_;
+ return(hum_uring($value,$size,undef,$lightring,$lightnumber,undef,$decfont));
}
sub hum_mring{
- my ($value,$size,$lightring,$lightnumber) = @_;
- return(hum_uring($value,$size,1,$lightring,$lightnumber));
+ my ($value,$size,$lightring,$lightnumber,$decfont) = @_;
+ return(hum_uring($value,$size,1,$lightring,$lightnumber,undef,$decfont));
}
sub icon_hum_ring{
- my ($icon,$value,$size,$lightring,$lightnumber) = @_;
+ my ($icon,$value,$size,$lightring,$lightnumber,$decfont) = @_;
$size=100 if (!defined $size);
- return(hum_uring($value,$size,undef,$lightring,$lightnumber,$icon));
+ return(hum_uring($value,$size,undef,$lightring,$lightnumber,$icon,$decfont));
}
sub icon_hum_mring{
- my ($icon,$value,$size,$lightring,$lightnumber) = @_;
+ my ($icon,$value,$size,$lightring,$lightnumber,$decfont) = @_;
$size=100 if (!defined $size);
- return(hum_uring($value,$size,1,$lightring,$lightnumber,$icon));
+ return(hum_uring($value,$size,1,$lightring,$lightnumber,$icon,$decfont));
}
sub temp_hum_ring {
- my ($value,$value2,$min,$max,$size,$lightring,$lightnumber) = @_;
+ my ($value,$value2,$min,$max,$size,$lightring,$lightnumber,$decfont1,$decfont2) = @_;
$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,$lightring,$lightnumber));
+ $decfont1=1 if (!defined $decfont1);
+ $decfont2=0 if (!defined $decfont2);
+ return(ring2($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,$decfont1,$value2,0,100,0,0,"%",\&hum_hue,$decfont2,$lightring,$lightnumber));
}
sub temp_temp_ring {
- my ($value,$value2,$min,$max,$size,$lightring,$lightnumber) = @_;
+ my ($value,$value2,$min,$max,$size,$lightring,$lightnumber,$decfont1,$decfont2) = @_;
$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,$lightring,$lightnumber));
+ $decfont1=1 if (!defined $decfont1);
+ $decfont2=1 if (!defined $decfont2);
+ return(ring2($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,$decfont1,$value2,$min,$max,undef,undef,"°C",\&temp_hue,$decfont2,$lightring,$lightnumber));
}
sub icon_ring {
- my ($icon,$val,$min,$max,$minColor,$maxColor,$unit,$dec,$size,$func,$lr,$ln) = @_;
- return(ring ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,undef,$lr,$ln,$icon));
+ my ($icon,$val,$min,$max,$minColor,$maxColor,$unit,$decfont,$size,$func,$lr,$ln) = @_;
+ return(ring ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$decfont,undef,$lr,$ln,$icon));
}
sub icon_mring {
- my ($icon,$val,$min,$max,$minColor,$maxColor,$unit,$dec,$size,$func,$lr,$ln) = @_;
- return(ring ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,1,$lr,$ln,$icon,$icon));
+ my ($icon,$val,$min,$max,$minColor,$maxColor,$unit,$decfont,$size,$func,$lr,$ln) = @_;
+ return(ring ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$decfont,1,$lr,$ln,$icon,$icon));
}
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));
+ my ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$decfont,$lr,$ln) = @_;
+ return(ring($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$decfont,1,$lr,$ln));
}
+sub icon_ring2 {
+ my ($icon,$val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,$val2,$min2,$max2,$minColor2,$maxColor2,$unit2,$func2,$dec2,$lr,$ln) = @_;
+ return (ring2($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,$val2,$min2,$max2,$minColor2,$maxColor2,$unit2,$func2,$dec2,$lr,$ln,$icon));
+}
+
+sub icon_temp_hum_ring {
+ my ($icon,$value,$value2,$min,$max,$size,$lightring,$lightnumber,$decfont1,$decfont2) = @_;
+ $min=-20 if (!defined $min);
+ $max=60 if (!defined $max);
+ $size=100 if (!defined $size);
+ $decfont1=1 if (!defined $decfont1);
+ $decfont2=0 if (!defined $decfont2);
+ return(ring2($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,$decfont1,$value2,0,100,0,0,"%",\&hum_hue,$decfont2,$lightring,$lightnumber,$icon));
+}
+
+sub icon_temp_temp_ring {
+ my ($icon,$value,$value2,$min,$max,$size,$lightring,$lightnumber,$decfont1,$decfont2) = @_;
+ $min=-20 if (!defined $min);
+ $max=60 if (!defined $max);
+ $size=100 if (!defined $size);
+ $decfont1=1 if (!defined $decfont1);
+ $decfont2=1 if (!defined $decfont2);
+ return(ring2($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,$decfont1,$value2,$min,$max,undef,undef,"°C",\&temp_hue,$decfont2,$lightring,$lightnumber,$icon));
+}
+
sub ring
{
- my ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,$model,$lr,$ln,$icon) = @_;
+ my ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$decfont,$model,$lr,$ln,$icon) = @_;
my $out;
- my ($ic,$iscale,$ix,$iy)=();
+ my ($dec,$fontformat);
+
+ ($dec,$fontformat)=split (/,/,$decfont) if (defined $decfont);
+ $fontformat="" if (!defined $fontformat);
+
+ my ($ic,$iscale,$ix,$iy,$rotate)=();
if (defined ($icon)) {
- ($ic,$iscale,$ix,$iy,)=split(",",$icon);
+ ($ic,$iscale,$ix,$iy,$rotate)=split(",",$icon);
if (defined ($ix)) {
$ix+=30;
} else {
@@ -4649,7 +4696,8 @@ sub ring
} else {
$iy=8;
};
- $iscale=1 if (!defined($iscale));
+ $rotate=0 if (!defined $rotate);
+ $iscale=1 if (!defined $iscale);
$ic="" if (!defined($ic));
}
@@ -4723,32 +4771,64 @@ sub ring
$svg_icon =~ s/svg/svg height="22"/ }
if(!($svg_icon =~ s/\swidth="[^"]*"/ width="22"/)) {
$svg_icon =~ s/svg/svg width="22"/ }
- $out.='';
+ $out.='';
$out.= $svg_icon;
$out.='';
-## my $svg_icon=::FW_makeImage($ic);
-## $svg_icon =~ s/height="[^"]*"/height="22"/;
-## $svg_icon =~ s/width="[^"]*"/width="22"/;
-## my $viewBox= ($svg_icon =~ /(viewBox="[^"]*")/) ? $1 : 'viewBox = "0 0 640 640"';
-## my $viewBox='viewBox = "0 0 640 640"';
-## $out.='';
-## $out.= $svg_icon;
-## $out.='';
-## $out.='';
-## $out.='';
}
- $out.= sprintf('%s',((defined ($icon) and $icon ne "") ? 43:34),color($currColor,$ln),(defined ($icon) ? 14:18),sprintf($format,$val));
- $out.= sprintf('%s',((defined ($icon) and $icon ne "") ? 53:47),color($currColor,$ln),$unit) if (defined $unit);
+ my $icflag = (defined ($icon) and $icon ne "") ? 1:0;
+
+ my ($valInt,$valDec)=split(/\./,sprintf($format,$val));
+ if (defined $valDec) {
+ $out.= sprintf('%s.%s',
+ ($icflag ? 43:34),color($currColor,$ln),(defined ($icon) ? 14:20),$fontformat,$valInt,$valDec);
+
+ } else {
+ $out.= sprintf('%s',
+ ($icflag ? 43:34),color($currColor,$ln),(defined ($icon) ? 14:20),$fontformat,$valInt);
+ }
+ $out.= sprintf('%s',
+ ($icflag ? 53:47),color($currColor,$ln),($icflag ? 9:12),$unit) if (defined $unit);
$out.= '';
return ($out);
}
sub ring2
{
- my ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,$val2,$min2,$max2,$minColor2,$maxColor2,$unit2,$func2,$dec2,$lr,$ln) = @_;
+ my ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$decfont,$val2,$min2,$max2,$minColor2,$maxColor2,$unit2,$func2,$decfont2,$lr,$ln,$icon) = @_;
my $out;
my ($format,$value);
my ($format2,$value2);
+
+ my ($dec,$fontformat);
+
+ ($dec,$fontformat)=split (/,/,$decfont) if (defined $decfont);
+ $fontformat="" if (!defined $fontformat);
+
+ my ($dec2,$fontformat2);
+
+ ($dec2,$fontformat2)=split (/,/,$decfont2) if (defined $decfont2);
+ $fontformat2="" if (!defined $fontformat2);
+
+
+ my ($ic,$iscale,$ix,$iy,$rotate)=();
+
+ if (defined ($icon)) {
+ ($ic,$iscale,$ix,$iy,$rotate)=split(",",$icon);
+ if (defined ($ix)) {
+ $ix+=19.5;
+ } else {
+ $ix=19.5;
+ };
+ if (defined ($iy)) {
+ $iy+=22;
+ } else {
+ $iy=22;
+ };
+ $rotate=0 if (!defined $rotate);
+ $iscale=1 if (!defined $iscale);
+ $ic="" if (!defined($ic));
+ }
+
if (defined $lr) {
if (!defined $ln) {
$ln=$lr;
@@ -4815,6 +4895,10 @@ sub ring2
}
}
+ if (defined $icon and $icon ne "") {
+ $ic="$ic\@".color($currColor,$ln) if ($icon !~ /@/);
+ }
+
$out.= sprintf('';
return ($out);
}
+sub dec
+{
+ my ($format,$value)=@_;
+ return(split(/\./,sprintf($format,$value)));
+}
+
sub y_h
{
my ($value,$min,$max,$height,$mode) = @_;