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${lt}_LIST>\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});
}