################################################################ # $Id$ ################################################################ package main; use strict; use warnings; use POSIX; sub CommandJsonList2($$); ##################################### sub JsonList2_Initialize($$) { my %lhash = ( Fn=>"CommandJsonList2", Hlp=>"[],list definitions as JSON" ); $cmds{jsonlist2} = \%lhash; } ##################################### sub JsonList2_Escape($) { my $a = shift; return "null" if(!defined($a)); $a=~ s/([\x00-\x19\x22\x5c])/sprintf '\u%04x', ord($1)/ge; # Forum 57377 my $b = "x$a"; $a = "" if(!utf8::decode($b)); # Forum #55318 return $a; } sub JsonList2_dumpHash($$$$$$) { my ($arrp, $name, $h, $isReading, $si, $attr) = @_; my $ret = ""; 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]; $ret .= " \"".JsonList2_Escape($k)."\": "; if($isReading) { $ret .= "{ \"Value\":\"".JsonList2_Escape($h->{$k}{VAL})."\","; $ret .= " \"Time\":\"".JsonList2_Escape($h->{$k}{TIME})."\" }"; } else { $ret .= "\"".JsonList2_Escape($h->{$k})."\""; } $ret .= "," if($i2 < int(@arr)-1); $ret .= "\n" if(int(@arr)>1); } return if($attr && !$ret); push(@{$arrp}, " \"$name\": {".(int(@arr)>1 ? "\n" : "")."$ret }"); } ##################################### sub CommandJsonList2($$) { my ($cl, $param) = @_; my @d; my $ret; my $cnt=0; my $si = AttrVal("global", "showInternalValues", 0); my $attr; if($param) { my @arg = split(" ", $param); $attr = $arg[1]; @d = devspec2array($arg[0],$cl); } else { @d = devspec2array(".*", $cl); # Needed for Authorization $param=""; } $ret = "{\n"; $ret .= " \"Arg\":\"".JsonList2_Escape($param)."\",\n", $ret .= " \"Results\": [\n"; for(my $i1 = 0; $i1 < int(@d); $i1++) { my $d = $d[$i1]; next if(IsIgnored($d)); my $h = $defs{$d}; my $n = $h->{NAME}; next if(!$h || !$n); 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".join(",\n",@r)."\n"; $ret .= " }"; $cnt++; } $ret .= " ],\n"; $ret .= " \"totalResultsReturned\":$cnt\n"; $ret .= "}\n"; return $ret; } 1; =pod =item command =item summary show device data in JSON format =item summary_DE zeigt Gerätedaten in JSON Format an =begin html

JsonList2

=end html =begin html_DE

JsonList2

=end html_DE =cut