diff --git a/fhem/FHEM/33_readingsGroup.pm b/fhem/FHEM/33_readingsGroup.pm index 1c77c93d7..07eefecd1 100644 --- a/fhem/FHEM/33_readingsGroup.pm +++ b/fhem/FHEM/33_readingsGroup.pm @@ -17,7 +17,7 @@ sub readingsGroup_Initialize($) $hash->{UndefFn} = "readingsGroup_Undefine"; #$hash->{SetFn} = "readingsGroup_Set"; $hash->{GetFn} = "readingsGroup_Get"; - $hash->{AttrList} = "mapping separator style nameStyle valueStyle valueFormat timestampStyle noheading:1 notime:1 nostate:1"; + $hash->{AttrList} = "nameIcons mapping separator style nameStyle valueStyle valueFormat timestampStyle noheading:1 notime:1 nostate:1"; $hash->{FW_detailFn} = "readingsGroup_detailFn"; $hash->{FW_summaryFn} = "readingsGroup_detailFn"; @@ -113,6 +113,30 @@ sub readingsGroup_Undefine($$) return undef; } +sub lookup($$$$$) +{ + my($mapping,$name,$alias,$reading,$default) = @_; + + if( $mapping ) { + if( ref($mapping) eq 'HASH' ) { + $default = $mapping->{$name} if( defined($mapping) && defined($mapping->{$name}) ); + $default = $mapping->{$reading} if( defined($mapping) && defined($mapping->{$reading}) ); + $default = $mapping->{$name.".".$reading} if( defined($mapping) && defined($mapping->{$name.".".$reading}) ); + } else { + $default = $mapping; + } + + $default =~ s/\%ALIAS/$alias/g; + $default =~ s/\%DEVICE/$name/g; + $default =~ s/\%READING/$reading/g; + + $default =~ s/\$ALIAS/$alias/g; + $default =~ s/\$READING/$name/g; + $default =~ s/\$DEVICE/$reading/g; + } + + return $default; +} sub readingsGroup_2html($) { @@ -143,6 +167,11 @@ readingsGroup_2html($) $mapping = eval $mapping if( $mapping =~ m/^{.*}$/ ); #$mapping = undef if( ref($mapping) ne 'HASH' ); + my $nameIcons = AttrVal( $d, "nameIcons", ""); + $nameIcons = eval $nameIcons if( $nameIcons =~ m/^{.*}$/ ); + #$nameIcons = undef if( ref($nameIcons) ne 'HASH' ); + + my $devices = $hash->{DEVICES}; my $ret; @@ -173,9 +202,6 @@ readingsGroup_2html($) my $v = FW_htmlEscape($val); - $ret .= sprintf("", ($row&1)?"odd":"even"); - $row++; - my $name_style = $name_style; if(defined($name_style) && $name_style =~ m/^{.*}$/) { my $DEVICE = $name; @@ -206,29 +232,24 @@ readingsGroup_2html($) my $VALUE = $v; $value_format = eval $value_format; } + + next if( !defined($value_format) ); + $v = sprintf( $value_format, $v ) if( $value_format ); } my $a = AttrVal($name, "alias", $name); my $m = "$a$separator$n"; + my $txt = lookup($mapping,$name,$a,$n,$m); - if( $mapping ) { - if( ref($mapping) eq 'HASH' ) { - $m = $mapping->{$n} if( defined($mapping) && defined($mapping->{$n}) ); - $m = $mapping->{$name.".".$n} if( defined($mapping) && defined($mapping->{$name.".".$n}) ); - } else { - $m = $mapping; - } - $m =~ s/\%DEVICE/$name/g; - $m =~ s/\%READING/$n/g; - $m =~ s/\%ALIAS/$a/g; - - $m =~ s/\$DEVICE/$name/g; - $m =~ s/\$READING/$n/g; - $m =~ s/\$ALIAS/$a/g; + if( my $icon = lookup($nameIcons,$name,$a,$n,$m) ) { + $txt = FW_makeImage( $icon, $txt, "icon" ); } - $ret .= "
$m
"; + $ret .= sprintf("", ($row&1)?"odd":"even"); + $row++; + + $ret .= "
$txt
"; $ret .= "
$v
"; $ret .= "
$fmtDateTime" if( $show_time ); } @@ -244,9 +265,6 @@ readingsGroup_2html($) $v = FW_htmlEscape($v); $t = "" if(!$t); - $ret .= sprintf("", ($row&1)?"odd":"even"); - $row++; - my $name_style = $name_style; if(defined($name_style) && $name_style =~ m/^{.*}$/) { my $DEVICE = $name; @@ -277,29 +295,24 @@ readingsGroup_2html($) my $VALUE = $v; $value_format = eval $value_format; } + + next if( !defined($value_format) ); + $v = sprintf( $value_format, $v ) if( $value_format ); } my $a = AttrVal($name, "alias", $name); my $m = "$a$separator$n"; + my $txt = lookup($mapping,$name,$a,$n,$m); - if( $mapping ) { - if( ref($mapping) eq 'HASH' ) { - $m = $mapping->{$n} if( defined($mapping) && defined($mapping->{$n}) ); - $m = $mapping->{$name.".".$n} if( defined($mapping) && defined($mapping->{$name.".".$n}) ); - } else { - $m = $mapping; - } - $m =~ s/\%DEVICE/$name/g; - $m =~ s/\%READING/$n/g; - $m =~ s/\%ALIAS/$a/g; - - $m =~ s/\$DEVICE/$name/g; - $m =~ s/\$READING/$n/g; - $m =~ s/\$ALIAS/$a/g; + if( my $icon = lookup($nameIcons,$name,$a,$n,$m) ) { + $txt = FW_makeImage( $icon, $txt, "icon" ); } - $ret .= "
$m
"; + $ret .= sprintf("", ($row&1)?"odd":"even"); + $row++; + + $ret .= "
$txt
"; $ret .= "
$v
"; $ret .= "
$t
" if( $show_time ); } @@ -539,7 +552,8 @@ readingsGroup_Get($@) Specify an HTML style for the reading values, e.g.:
attr temperatures valueStyle style="text-align:right"
  • valueFormat
    - Specify an sprintf style format string used to display the reading values. Can be given as a string, + Specify an sprintf style format string used to display the reading values. If the format string is undef + this reading will be skipped. Can be given as a string, a perl expression returninga hash or a perl expression returning a string, e.g.:
    attr temperatures valueFormat %.1f °C
    attr temperatures valueFormat { temperature => "%.1f °C", humidity => "%.1f %" }