From 24532ab04b45cfaf0b5fe2a89af315a8c79cf558 Mon Sep 17 00:00:00 2001
From: Damian <>
Date: Sat, 8 Apr 2023 19:38:29 +0000
Subject: [PATCH] 98_DOIF.pm: card: unit after number, formatting options for
entries without plot
git-svn-id: https://svn.fhem.de/fhem/trunk@27414 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/FHEM/98_DOIF.pm | 212 ++++++++++++++++++++++++++++---------------
1 file changed, 139 insertions(+), 73 deletions(-)
diff --git a/fhem/FHEM/98_DOIF.pm b/fhem/FHEM/98_DOIF.pm
index d8cacf2fb..40568f2ff 100644
--- a/fhem/FHEM/98_DOIF.pm
+++ b/fhem/FHEM/98_DOIF.pm
@@ -5517,8 +5517,8 @@ sub card
my @value2;
my @unit1;
my @unit2;
- my $colcount=0;
- my $col2count=0;
+ my @colcount=();
+ my @col2count=();
my $hours;
my $time;
@@ -5535,9 +5535,23 @@ sub card
if (ref($col) eq "ARRAY") {
for (my $i=0;$i< @{$col};$i++) {
- if (ref (${$col}[$i]) eq "HASH") {
+ delete $value1[$i]{ring};
+ if (ref (${$col}[$i]) eq "ARRAY") {
+ $value1[$i]{value}=${$col}[$i][0];
+ $value1[$i]{min}=${$col}[$i][1];
+ $value1[$i]{max}=${$col}[$i][2];
+ $value1[$i]{minColor}=${$col}[$i][3];
+ $value1[$i]{maxColor}=${$col}[$i][4];
+ $value1[$i]{unit}=${$col}[$i][5];
+ $value1[$i]{func}=${$col}[$i][6];
+ $value1[$i]{decfont}=${$col}[$i][7];
+ $value1[$i]{model}=${$col}[$i][8];
+ } elsif (ref (${$col}[$i]) eq "HASH") {
$value1[$i]=${$col}[$i];
- $colcount++;
+ if (@colcount < 2) {
+ $value1[$i]{ring}=1;
+ }
+ push(@colcount,$i);
if (!defined $dim) {
$type=$value1[$i]{type};
$hours=$value1[$i]{hours};
@@ -5553,8 +5567,9 @@ sub card
}
}
} elsif (ref ($col) eq "HASH") {
- $colcount++;
$value1[0]=$col;
+ $value1[0]{ring}=1;
+ push(@colcount,0);
if (!defined $dim) {
$type=$value1[0]{type};
$hours=$value1[0]{hours};
@@ -5587,23 +5602,41 @@ sub card
if (defined $col2) {
if (ref($col2) eq "ARRAY") {
for (my $i=0;$i< @{$col2};$i++) {
- if (ref (${$col2}[$i]) eq "HASH") {
- $value2[$i]=${$col2}[$i];
- $col2count++;
- if (!defined $dim) {
- $type=$value2[$i]{type};
- $hours=$value2[$i]{hours};
- $time=$value2[$i]{time};
- $dim=$value2[$i]{dim};
- $period=$value2[$i]{period};
- }
+ delete $value2[$i]{ring};
+ if (ref (${$col2}[$i]) eq "ARRAY") {
+ $value2[$i]{value}=${$col2}[$i][0];
+ $value2[$i]{min}=${$col2}[$i][1];
+ $value2[$i]{max}=${$col2}[$i][2];
+ $value2[$i]{minColor}=${$col2}[$i][3];
+ $value2[$i]{maxColor}=${$col2}[$i][4];
+ $value2[$i]{unit}=${$col2}[$i][5];
+ $value2[$i]{func}=${$col2}[$i][6];
+ $value2[$i]{decfont}=${$col2}[$i][7];
+ $value2[$i]{model}=${$col2}[$i][8];
+ } elsif (ref (${$col2}[$i]) eq "HASH") {
+ $value2[$i]=${$col2}[$i];
+ if (@colcount+@col2count < 2) {
+ $value2[$i]{ring}=1;
+ }
+ push(@col2count,$i);
+ if (!defined $dim) {
+ $type=$value2[$i]{type};
+ $hours=$value2[$i]{hours};
+ $time=$value2[$i]{time};
+ $dim=$value2[$i]{dim};
+ $period=$value2[$i]{period};
+ }
} else {
- $value2[$i]{value}=${$col2}[$i];
+ $value2[$i]{value}=${$col2}[$i];
}
}
} elsif (ref ($col2) eq "HASH") {
- $col2count++;
$value2[0]=$col2;
+ delete $value2[0]{ring};
+ if (@colcount < 2) {
+ $value2[0]{ring}=1;
+ }
+ push(@col2count,0);
if (!defined $dim) {
$type=$value2[0]{type};
$hours=$value2[0]{hours};
@@ -5679,9 +5712,9 @@ sub card
$chart_dim+=8 if ($type eq "bar");
- $chart_dim += $colcount ? 0: 18;
+ $chart_dim += scalar @colcount ? 0: 18;
- $chart_dim -= $col2count ? ($hring eq "1" ? 13 : 15):0;
+ $chart_dim -= scalar @col2count ? ($hring eq "1" ? 15 : 17):0;
my $x_prop=int($chart_dim/$dim*100)/100;
@@ -5788,28 +5821,49 @@ sub card
$out.='';
}
$out.='';
- if ($hring eq "1" or @value1 > 2) {
- my $begin=0;
- $begin= 2 if ($hring eq "" and @value1 > 2);
- for (my $i=$begin;$i<@value1;$i++) {
- $out.=sprintf('',defined $col2 ? $bwidth+7-(@value1+@value2-$i)*43 : $bwidth+7-(@value1-$i)*43);
- my $unitColor=(split(",",$unit1[$i]))[1];
- my $unit=(split(",",$unit1[$i]))[0];
- $decfont="" if (!defined $decfont);
- $out.= ui_Table::ring($value1[$i]{value},$min,$max,$minColor,$maxColor,$unit,"70,1",$func,(defined $unitColor ? $decfont.",,fill:".$unitColor:$decfont),$model,$lightness);
- $out.='';
+ my $j=0;
+ my $count_rings_head = @value1+@value2;
+ $count_rings_head -= (@colcount + @col2count >= 2 ? 2 : @colcount + @col2count) if ($hring ne "1");
+ for (my $i=0;$i<@value1;$i++) {
+ if (!defined $value1[$i]{ring} or $hring eq "1"){
+ $out .= sprintf('',$bwidth+7-($count_rings_head-$j++)*43);
+ my $r_min = defined $value1[$i]{min} ? $value1[$i]{min} : $min;
+ my $r_max = defined $value1[$i]{max} ? $value1[$i]{max} : $max;
+ my $r_minColor = defined $value1[$i]{minColor} ? $value1[$i]{minColor} : $minColor;
+ my $r_maxColor = defined $value1[$i]{maxColor} ? $value1[$i]{maxColor} : $maxColor;
+ my $r_unit = defined $value1[$i]{unit} ? $value1[$i]{unit} : $unit1[$i];
+ my $r_unitColor = (split(",",$r_unit))[1];
+ $r_unit = (split(",",$r_unit))[0];
+ my $r_func = defined $value1[$i]{func} ? $value1[$i]{func} : $func;
+ my $r_decfont = defined $value1[$i]{decfont} ? $value1[$i]{decfont} : $decfont;
+ $r_decfont = "" if (!defined $r_decfont);
+ my $r_model = defined $value1[$i]{model} ? $value1[$i]{model} : $model;
+ $out .= ui_Table::ring($value1[$i]{value},$r_min,$r_max,$r_minColor,$r_maxColor,$r_unit,"70,1",$r_func,(defined $r_unitColor ? $r_decfont.",,fill:".$r_unitColor:$r_decfont),$r_model,$lightness);
+ # my $unitColor = (split(",",$unit1[$i]))[1];
+ # my $unit = (split(",",$unit1[$i]))[0];
+ # $decfont = "" if (!defined $decfont);
+ # $out. = ui_Table::ring($value1[$i]{value},$min,$max,$minColor,$maxColor,$unit,"70,1",$func,(defined $unitColor ? $decfont.",,fill:".$unitColor:$decfont),$model,$lightness);
+ $out .= '';
}
}
- if (defined $col2 and (((@value1+@value2)>2 or $hring eq "1"))) {
- my $begin=0;
- $begin=1 if ($hring eq "" and @value1 == 1);
- for (my $i=$begin;$i<@value2;$i++) {
- $out.=sprintf('',$bwidth+7-(@value2-$i)*43);
- my $unitColor2=(split(",",$unit2[$i]))[1];
- my $unit2=(split(",",$unit2[$i]))[0];
- $decfont2="" if (!defined $decfont2);
- $out.= ui_Table::ring($value2[$i]{value},$min2,$max2,$minColor2,$maxColor2,$unit2,"70,1",$func2,(defined $unitColor2 ? $decfont2.",,fill:".$unitColor2:$decfont2),$model,$lightness);
- $out.='';
+ if (defined $col2) {
+ for (my $i=0;$i<@value2;$i++) {
+ if (!defined $value2[$i]{ring} or $hring eq "1"){
+ $out .= sprintf('',$bwidth+7-($count_rings_head-$j++)*43);
+ my $r_min = defined $value2[$i]{min} ? $value2[$i]{min} : $min2;
+ my $r_max = defined $value2[$i]{max} ? $value2[$i]{max} : $max2;
+ my $r_minColor = defined $value2[$i]{minColor} ? $value2[$i]{minColor} : $minColor2;
+ my $r_maxColor = defined $value2[$i]{maxColor} ? $value2[$i]{maxColor} : $maxColor2;
+ my $r_unit = defined $value2[$i]{unit} ? $value2[$i]{unit} : $unit2[$i];
+ my $r_unitColor = (split(",",$r_unit))[1];
+ $r_unit = (split(",",$r_unit))[0];
+ my $r_func = defined $value2[$i]{func} ? $value2[$i]{func} : $func2;
+ my $r_decfont = defined $value2[$i]{decfont} ? $value2[$i]{decfont} : $decfont2;
+ $r_decfont = "" if (!defined $r_decfont);
+ my $r_model = defined $value2[$i]{model} ? $value2[$i]{model} : $model;
+ $out .= ui_Table::ring($value2[$i]{value},$r_min,$r_max,$r_minColor,$r_maxColor,$r_unit,"70,1",$r_func,(defined $r_unitColor ? $r_decfont.",,fill:".$r_unitColor:$r_decfont),$r_model,$lightness);
+ $out .= '';
+ }
}
}
}
@@ -5817,7 +5871,7 @@ sub card
$out.= sprintf('',$htrans);
$out.='' if (!$noFooter);
$out.= sprintf('