From 39ca7054ffdac677557b66152f7f64c1f6887e49 Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Wed, 20 Jan 2010 08:47:08 +0000 Subject: [PATCH] Fixes for bugs reported by Martin git-svn-id: https://fhem.svn.sourceforge.net/svnroot/fhem/trunk/fhem@553 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- FHEM/98_structure.pm | 4 +++- FHEM/99_XmlList.pm | 21 ++++++++++----------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/FHEM/98_structure.pm b/FHEM/98_structure.pm index 303c5adca..c6a6bcb27 100755 --- a/FHEM/98_structure.pm +++ b/FHEM/98_structure.pm @@ -48,7 +48,9 @@ structure_Define($$) my %list; foreach my $a (@a) { - $list{$a} = 1; + foreach my $d (devspec2array($a)) { + $list{$d} = 1; + } } $hash->{CONTENT} = \%list; $hash->{STATE} = join(" ", sort(keys %{$hash->{CONTENT}})); diff --git a/FHEM/99_XmlList.pm b/FHEM/99_XmlList.pm index beff4e0fc..6fe335898 100644 --- a/FHEM/99_XmlList.pm +++ b/FHEM/99_XmlList.pm @@ -22,7 +22,7 @@ sub XmlEscape($) { my $a = shift; - return "" if(!$a); + return "" if(!defined($a)); $a =~ s/\\\n/
/g; # Multi-line $a =~ s/&/&/g; $a =~ s/"/"/g; @@ -41,26 +41,25 @@ CommandXmlList($$) my $lt = ""; delete($modules{""}) if(defined($modules{""})); - for my $d (sort { my $x = $modules{$defs{$a}{TYPE}}{ORDER} cmp - $modules{$defs{$b}{TYPE}}{ORDER}; + for my $d (sort { my $x = $defs{$a}{TYPE}.$modules{$defs{$a}{TYPE}}{ORDER} cmp + $defs{$b}{TYPE}.$modules{$defs{$b}{TYPE}}{ORDER}; $x = ($a cmp $b) if($x == 0); $x; } keys %defs) { next if(IsIgnored($d)); my $p = $defs{$d}; my $t = $p->{TYPE}; - if($t ne $lt) { $str .= "\t\n" if($lt); $str .= "\t<${t}_LIST>\n"; } $lt = $t; - + my $a1 = XmlEscape($p->{STATE}); my $a2 = XmlEscape(getAllSets($d)); my $a3 = XmlEscape(getAllAttr($d)); - + $str .= "\t\t<$t name=\"$d\" state=\"$a1\" sets=\"$a2\" attrs=\"$a3\">\n"; - + foreach my $c (sort keys %{$p}) { next if(ref($p->{$c})); $str .= sprintf("\t\t\t\n", @@ -68,18 +67,18 @@ CommandXmlList($$) } $str .= sprintf("\t\t\t\n", $p->{IODev}{NAME}) if($p->{IODev}); - + foreach my $c (sort keys %{$attr{$d}}) { $str .= sprintf("\t\t\t\n", XmlEscape($c), XmlEscape($attr{$d}{$c})); } - + my $r = $p->{READINGS}; if($r) { foreach my $c (sort keys %{$r}) { my $h = $r->{$c}; - next if(!$h->{VAL} || !$h->{TIME}); - $str .= + next if(!defined($h->{VAL}) || !defined($h->{TIME})); + $str .= sprintf("\t\t\t\n", XmlEscape($c), XmlEscape($h->{VAL}), $h->{TIME}); }