From e976200de38595e9bc17e1ef28915baee2317e11 Mon Sep 17 00:00:00 2001 From: betateilchen <> Date: Mon, 22 May 2017 18:16:57 +0000 Subject: [PATCH] ./contrib/statistics/98_fheminfo2.pm: do not use JSON module for encode git-svn-id: https://svn.fhem.de/fhem/trunk@14347 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/contrib/statistics/98_fheminfo2.pm | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/fhem/contrib/statistics/98_fheminfo2.pm b/fhem/contrib/statistics/98_fheminfo2.pm index edaeda5ca..0f812ca6f 100644 --- a/fhem/contrib/statistics/98_fheminfo2.pm +++ b/fhem/contrib/statistics/98_fheminfo2.pm @@ -40,9 +40,6 @@ sub CommandFheminfo2($$) { $args[0] = defined($args[0]) ? lc($args[0]) : ""; my $doSend = ($args[0] eq 'send') ? 1 : 0; - eval("use JSON"); - return "Please install perl module JSON to use fheminfo." if($@); - return "Unknown argument $args[0], usage: fheminfo2 [send]" if($args[0] ne "send" && $args[0] ne ""); @@ -95,7 +92,8 @@ sub _fi2_Count() { } sub _fi2_Send() { - my $json = encode_json(\%fhemInfo); + my $json = _fi2_to_json(\%fhemInfo); + Log3("fheminfo",4,"fheminfo: $json"); my %hu_hash = (); @@ -190,6 +188,22 @@ sub _fi2_Div($$) { return (int($p1/$p2), $p1 % $p2); } +sub _fi2_to_json { + my $val = shift; + if (not defined $val) { + return "null"; + } elsif (not ref $val) { + $val =~ s/([\0-\x1f\"\\])/sprintf "\\u%04x", ord $1/eg; + return '"' . $val . '"'; + } elsif (ref $val eq 'ARRAY') { + return '[' . join(',', map to_json($_), @$val) . ']'; + } elsif (ref $val eq 'HASH') { + return '{' . join(',', map to_json($_) . ":" . to_json($val->{$_}), sort keys %$val) . '}'; + } else { + return "Cannot encode $val as JSON!\n"; + } +} + 1; =pod