diff --git a/fhem/FHEM/98_DOIF.pm b/fhem/FHEM/98_DOIF.pm
index ef6a44192..50fc4f3ea 100644
--- a/fhem/FHEM/98_DOIF.pm
+++ b/fhem/FHEM/98_DOIF.pm
@@ -4292,24 +4292,32 @@ sub format_value {
sub bar
{
- my ($val,$min,$max,$header,$minColor,$maxColor,$unit,$bwidth,$bheight,$size,$func,$dec) = @_;
+ my ($val,$min,$max,$header,$minColor,$maxColor,$unit,$bwidth,$bheight,$size,$func,$dec,$model,$lr,$ln,$icon) = @_;
my $out;
my $trans=0;
my ($format,$value);
+ my ($ic,$iscale,$ix,$iy);
+ my $minCol=$minColor;
+
+ if (defined $lr) {
+ if (!defined $ln) {
+ $ln=$lr;
+ }
+ }
$unit="" if (!defined $unit);
- $bheight=70 if (!defined $bheight);
+ $bheight=60 if (!defined $bheight);
my $height=$bheight-10;
if (!defined $header or $header eq "") {
$trans = -1;
} else {
- $bwidth= 75 if (!defined $bwidth);
+ $bwidth= 60 if (!defined $bwidth);
$trans = 13;
$bheight += 13;
}
- $bwidth=75 if (!defined $bwidth);
+ $bwidth=60 if (!defined $bwidth);
$min=0 if (!defined $min);
$max=100 if (!defined $max);
@@ -4324,6 +4332,7 @@ sub bar
$minColor=120 if (!defined $minColor);
$maxColor=0 if (!defined $maxColor);
}
+ $minCol=$minColor;
$max=$value if($value>$max);
$min=$value if ($value<$min);
$size=100 if (!defined $size);
@@ -4334,22 +4343,45 @@ sub bar
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;
}
}
+
+ if (defined ($icon)) {
+ ($ic,$iscale,$ix,$iy,)=split(",",$icon);
+ if (defined ($ix)) {
+ $ix+=$bwidth/2+5;
+ } else {
+ $ix=$bwidth/2+5;
+ };
+ if (defined ($iy)) {
+ $iy+=($height/2-12);
+ } else {
+ $iy=($height/2-12);
+ };
+ $iscale=1 if (!defined($iscale));
+ }
+
+
$out.= sprintf ('';
@@ -4382,19 +4425,67 @@ return ($out);
}
sub temp_bar {
- my ($value,$min,$max,$header,$width,$height,$size) = @_;
+ my ($value,$min,$max,$header,$width,$height,$size,$lightbar,$lightnumber) = @_;
$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));
+ return(bar($value,$min,$max,$header,undef,undef,"°C",$width,$height,$size,\&temp_hue,1,undef,$lightbar,$lightnumber));
}
+sub temp_mbar {
+ my ($value,$min,$max,$header,$width,$height,$size,$lightbar,$lightnumber) = @_;
+ $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));
+}
+
+sub icon_temp_bar {
+ my ($icon,$value,$min,$max,$header,$width,$height,$size,$lightbar,$lightnumber) = @_;
+ $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));
+}
+
+sub icon_temp_mbar {
+ my ($icon,$value,$min,$max,$header,$width,$height,$size,$lightbar,$lightnumber) = @_;
+ $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));
+}
+
+
sub hum_bar {
- my ($value,$header,$width,$height,$size) = @_;
-
- $width=60 if (!defined $width);
- return(bar($value,0,100,$header,undef,undef,"%",$width,$height,$size,\&hum_hue,0));
+ 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));
}
+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));
+}
+
+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));
+}
+
+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));
+}
+
+sub icon_bar {
+ my ($icon,$val,$min,$max,$minColor,$maxColor,$unit,$dec,$header,$bwidth,$bheight,$size,$func,$lr,$ln) = @_;
+ return (bar($val,$min,$max,$header,$minColor,$maxColor,$unit,$bwidth,$bheight,$size,$func,$dec,undef,$lr,$ln,$icon));
+}
+
+sub icon_mbar {
+ my ($icon,$val,$min,$max,$minColor,$maxColor,$unit,$dec,$header,$bwidth,$bheight,$size,$func,$lr,$ln) = @_;
+ return (bar($val,$min,$max,$header,$minColor,$maxColor,$unit,$bwidth,$bheight,$size,$func,$dec,1,$lr,$ln,$icon));
+}
sub polarToCartesian {
my ($centerX,$centerY,$radius,$angleInDegrees)=@_;
@@ -4432,11 +4523,11 @@ sub color {
}
sub temp_uring {
- my ($value,$min,$max,$size,$type,$lightring,$lightnumber) = @_;
+ my ($value,$min,$max,$size,$type,$lightring,$lightnumber,$icon) = @_;
$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));
+ return(ring($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,1,$type,$lightring,$lightnumber,$icon));
}
sub temp_ring{
@@ -4448,12 +4539,22 @@ sub temp_mring{
my ($value,$min,$max,$size,$lightring,$lightnumber) = @_;
return(temp_uring($value,$min,$max,$size,1,$lightring,$lightnumber));
}
+sub icon_temp_ring{
+ my ($icon,$value,$min,$max,$size,$lightring,$lightnumber) = @_;
+ $size=100 if (!defined $size);
+ return(temp_uring($value,$min,$max,$size,undef,$lightring,$lightnumber,$icon));
+}
+sub icon_temp_mring{
+ my ($icon,$value,$min,$max,$size,$lightring,$lightnumber) = @_;
+ $size=100 if (!defined $size);
+ return(temp_uring($value,$min,$max,$size,1,$lightring,$lightnumber,$icon));
+}
sub hum_uring {
- my ($value,$size,$type,$lightring,$lightnumber) = @_;
+ my ($value,$size,$type,$lightring,$lightnumber,$icon) = @_;
$size=80 if (!defined $size);
- return(ring($value,0,100,undef,undef,"%",$size,\&hum_hue,0,$type,$lightring,$lightnumber));
+ return(ring($value,0,100,undef,undef,"%",$size,\&hum_hue,0,$type,$lightring,$lightnumber,$icon));
}
sub hum_ring{
@@ -4466,6 +4567,18 @@ sub hum_mring{
return(hum_uring($value,$size,1,$lightring,$lightnumber));
}
+sub icon_hum_ring{
+ my ($icon,$value,$size,$lightring,$lightnumber) = @_;
+ $size=100 if (!defined $size);
+ return(hum_uring($value,$size,undef,$lightring,$lightnumber,$icon));
+}
+
+sub icon_hum_mring{
+ my ($icon,$value,$size,$lightring,$lightnumber) = @_;
+ $size=100 if (!defined $size);
+ return(hum_uring($value,$size,1,$lightring,$lightnumber,$icon));
+}
+
sub temp_hum_ring {
my ($value,$value2,$min,$max,$size,$lightring,$lightnumber) = @_;
$min=-20 if (!defined $min);
@@ -4482,17 +4595,50 @@ sub temp_temp_ring {
return(ring2($value,$min,$max,undef,undef,"°C",$size,\&temp_hue,1,$value2,$min,$max,undef,undef,"°C",\&temp_hue,1,$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));
+}
+
+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));
+}
+
+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 ring
{
- my ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,$model,$lr,$ln) = @_;
+ my ($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,$model,$lr,$ln,$icon) = @_;
my $out;
+
+ my ($ic,$iscale,$ix,$iy);
+
+ if (defined ($icon)) {
+ ($ic,$iscale,$ix,$iy,)=split(",",$icon);
+ if (defined ($ix)) {
+ $ix+=29;
+ } else {
+ $ix=29;
+ };
+ if (defined ($iy)) {
+ $iy+=9;
+ } else {
+ $iy=9;
+ };
+ $iscale=1 if (!defined($iscale));
+ }
+
my ($format,$value);
if (defined $lr) {
if (!defined $ln) {
$ln=$lr;
}
}
-
$min=0 if (!defined $min);
$max=100 if (!defined $max);
@@ -4529,58 +4675,56 @@ sub ring
if (defined($model)) {
$minColor=$currColor;
}
- }
- $out.= sprintf('';
return ($out);
@@ -4767,13 +4911,14 @@ sub cylinder
$dec=1 if (!defined $dec);
my $format='%1.'.$dec.'f';
- $height=10+@values*10 if (!defined $height or $height eq "");
-
+ if (!defined $height or $height eq "") {
+ $height=10+@values*10 if (!defined $height or $height eq "");
+ }
if (!defined $header or $header eq "") {
$trans=5;
$bheight=$height-26;
} else {
- $trans=21;
+ $trans=22;
$bheight=$height-10;
}
my $width=30;
@@ -4794,13 +4939,13 @@ sub cylinder
$out.= '';
for (my $i=0;$i<@values;$i+=3){
my $color=$values[$i+1];
- $out.= sprintf('',$color,hsl_color($color),hsl_color($color));
+ $out.= sprintf('',$color,hsl_color($color),hsl_color($color));
}
$out.= '';
$out.= '';
- $out.= sprintf('',$bwidth, $bheight+40);
- $out.= sprintf('%s',$bwidth/2+11,$header) if ($header ne "");
+ $out.= sprintf('',$bwidth-2, $bheight+40);
+ $out.= sprintf('%s',$bwidth/2+11,$header) if ($header ne "");
$out.= sprintf('',$trans);
@@ -4808,9 +4953,9 @@ sub cylinder
$out.= sprintf('',$height,$width);
$out.= sprintf('',$width);
- $out.= sprintf('',$width,$height+4);
+ ##$out.= sprintf('',$width,$height+4);
- $out.= sprintf('',$height,$width);
+ ##$out.= sprintf('',$height,$width);
# $out.= sprintf('',$null,$width) if (defined $null);
@@ -4834,18 +4979,19 @@ sub cylinder
my $text=$values[$i+2];
($y,$val1,$null)=y_h($value,$min,$max,$height);
+ $out.= sprintf('',$y,$width);#,hsl_color($color,0));
$out.= sprintf('',$y,$width,$val1,$color);
#$out.= sprintf('',$y,$width);
- $out.= sprintf('',$y,$width,hsl_color($color,0));
+
if (defined $text and $text ne "") {
$out.= sprintf('%s',$yBegin+$i*10,hsl_color($color),$text.":");
$yValue+=7;
}
- $out.= sprintf('%s%s',$bwidth+5, $yValue+$i*10,hsl_color ($color),($val eq "N/A" ? $val:sprintf($format,$val)),$unit);
+ $out.= sprintf('%s%s',$bwidth+5, $yValue+$i*10,hsl_color ($color),($val eq "N/A" ? $val:sprintf($format,$val)),$unit);
}
- $out.= sprintf('',$width);
+ ##$out.= sprintf('',$width);
$out.= '';
$out.= '';
return ($out);