diff --git a/fhem/FHEM/98_JsonList2.pm b/fhem/FHEM/98_JsonList2.pm index b9b752b74..b6968cab6 100644 --- a/fhem/FHEM/98_JsonList2.pm +++ b/fhem/FHEM/98_JsonList2.pm @@ -40,14 +40,16 @@ JsonList2_Escape($) } sub -JsonList2_dumpHash($$$$$) +JsonList2_dumpHash($$$$$$) { - my ($name, $h, $isReading, $si, $next) = @_; + my ($arrp, $name, $h, $isReading, $si, $attr) = @_; my $ret = ""; - $ret .= " \"$name\": {\n"; my @arr = grep { $si || $_ !~ m/^\./ } sort keys %{$h}; @arr = grep { !ref($h->{$_}) } @arr if(!$isReading); + if($attr) { + @arr = grep { $attr eq $_ } @arr; + } for(my $i2=0; $i2 < @arr; $i2++) { my $k = $arr[$i2]; @@ -59,10 +61,10 @@ JsonList2_dumpHash($$$$$) $ret .= "\"".JsonList2_Escape($h->{$k})."\""; } $ret .= "," if($i2 < int(@arr)-1); - $ret .= "\n"; + $ret .= "\n" if(int(@arr)>1); } - $ret .= " }".($next ? ",":"")."\n"; - return $ret; + return if($attr && !$ret); + push(@{$arrp}, " \"$name\": {".(int(@arr)>1 ? "\n" : "")."$ret }"); } ##################################### @@ -74,9 +76,12 @@ CommandJsonList2($$) my $ret; my $cnt=0; my $si = AttrVal("global", "showInternalValues", 0); + my $attr; if($param) { - @d = devspec2array($param); + my @arg = split(" ", $param); + $attr = $arg[1]; + @d = devspec2array($arg[0]); } else { @d = keys %defs; @@ -95,20 +100,22 @@ CommandJsonList2($$) my $h = $defs{$d}; my $n = $h->{NAME}; next if(!$h || !$n); - $cnt++; + my @r; + if(!$attr) { + push(@r," \"PossibleSets\":\"".JsonList2_Escape(getAllSets($n))."\""); + push(@r," \"PossibleAttrs\":\"".JsonList2_Escape(getAllAttr($n))."\""); + } + JsonList2_dumpHash(\@r, "Internals", $h, 0, $si, $attr); + JsonList2_dumpHash(\@r, "Readings", $h->{READINGS}, 1, $si, $attr); + JsonList2_dumpHash(\@r, "Attributes",$attr{$d}, 0, $si, $attr); + + next if(!@r); + $ret .= ",\n" if($cnt); $ret .= " {\n"; - $ret .= " \"Name\":\"".JsonList2_Escape($n)."\",\n"; - $ret .= " \"PossibleSets\":\"".JsonList2_Escape(getAllSets($n))."\",\n"; - $ret .= " \"PossibleAttrs\":\"".JsonList2_Escape(getAllAttr($n))."\",\n"; - - $ret .= JsonList2_dumpHash("Internals", $h, 0, $si, 1); - $ret .= JsonList2_dumpHash("Readings", $h->{READINGS}, 1, $si, 1); - $ret .= JsonList2_dumpHash("Attributes",$attr{$d}, 0, $si, 0); - + $ret .= " \"Name\":\"".JsonList2_Escape($n)."\",\n".join(",\n",@r)."\n"; $ret .= " }"; - $ret .= "," if($i1 < int(@d)-1); - $ret .= "\n"; + $cnt++; } $ret .= " ],\n"; @@ -126,7 +133,7 @@ CommandJsonList2($$)
jsonlist [<devspec>]
+ jsonlist [<devspec>] [<value>]