diff --git a/fhem/FHEM/98_expandJSON.pm b/fhem/FHEM/98_expandJSON.pm index 127264f26..84d29c441 100644 --- a/fhem/FHEM/98_expandJSON.pm +++ b/fhem/FHEM/98_expandJSON.pm @@ -22,7 +22,7 @@ # ################################################################################ -my $module_version = "1.12"; +my $module_version = "1.13"; package main; @@ -132,7 +132,7 @@ sub expandJSON_Notify($$) { return "" if(IsDisabled($name)); my $events = deviceEvents($dhash, AttrVal($name, "addStateEvent", 0)); - return if( !grep { m/{.*}\s*$/s } @{ $events } ); #there is no JSON content + return if( !grep { m/\{.*}\s*$/s } @{ $events } ); #there is no JSON content for (my $i = 0; $i < int(@{$events}); $i++) { my $event = $events->[$i]; @@ -145,13 +145,13 @@ sub expandJSON_Notify($$) { my $type = $hash->{TYPE}; Log3 $name, 5, "$type $name: Found $devName:$event"; - my ($reading,$value) = $event =~ m/^\s*{.*}\s*$/s + my ($reading,$value) = $event =~ m/^\s*\{.*}\s*$/s ? ("state", $event) : split(": ", $event, 2); $hash->{STATE} = $dhash->{NTFY_TRIGGERTIME}; - if ($value !~ m/^\s*{.*}\s*$/s) { # eg. state with an invalid json + if ($value !~ m/^\s*\{.*}\s*$/s) { # eg. state with an invalid json Log3 $name, 5, "$type $name: Invalid JSON: $value"; return; } @@ -182,9 +182,9 @@ sub expandJSON_decode($$$$) { Log3 $name, 2, "$type $name: $@"; return undef; } - my $sPrefix = $hash->{helper}{addReadingsPrefix} ? $dreading."_" : ""; readingsBeginUpdate($dhash); +# readingsBulkUpdate($dhash, "expandJSON_".$dreading, $h); expandJSON_expand($hash,$dhash,$sPrefix,$h); readingsEndUpdate($dhash, AttrVal($name,"do_not_notify",0) ? 0 : 1); @@ -200,12 +200,25 @@ sub expandJSON_expand($$$$;$$) { $suffix = "" if( !$suffix ); $suffix = "_$suffix" if( $suffix ); +# if( ref( $ref ) eq "ARRAY" ) { +# while( my ($key,$value) = each @{ $ref } ) { +# expandJSON_expand($hash,$dhash,$sPrefix,$value, +# $prefix.sprintf("%02i",$key+1)."_"); +# } +# } if( ref( $ref ) eq "ARRAY" ) { while( my ($key,$value) = each @{ $ref } ) { - expandJSON_expand($hash,$dhash,$sPrefix,$value, - $prefix.sprintf("%02i",$key+1)."_"); + if( ref( $value ) ) { + expandJSON_expand($hash,$dhash,$sPrefix,$value,$prefix.sprintf("%02i",$key+1)."_"); + } + else { + (my $reading = $sPrefix.$prefix.sprintf("%02i",$key+1)) =~ s/[^A-Za-z\d_\.\-\/]/_/g; + readingsBulkUpdate($dhash, $reading, $value) + if $reading =~ m/^$hash->{t_regexp}$/; + } } } + elsif( ref( $ref ) eq "HASH" ) { while( my ($key,$value) = each %{ $ref } ) { if( ref( $value ) ) { @@ -256,7 +269,7 @@ sub expandJSON_isPmInstalled($$)
Expand a JSON string from a reading into individual readings
+Expand a JSON object from a reading into individual readings
- device:{.*} #state without attribute addStateEvent
- device:state:.{.*} #state with attribute addStateEvent
- device:reading:.{.*}
- Sonoff.*:ENERGY.*:.{.*}
- .*wifiIOT.*:.*sensor.*:.{.*}
- (?i)dev.*:(sensor1|sensor2|teleme.*):.{.*}
- (devX:{.*}|devY.*:jsonY:.{.*Wifi.*{.*SSID.*}.*})
+ device:\{.*} #state without attribute addStateEvent
+ device:state:.\{.*} #state with attribute addStateEvent
+ device:reading:.\{.*} #regular reading (typical application)
(Power|Current|Voltage|.*day)
define ej1 expandJSON device:sourceReading:.{.*} targetReading
+ define ej expandJSON device:reading:.\{.*} targetReading
- define ej2 expandJSON Sonoff.*:ENERGY.*:.{.*} (Power|.*day)
+ define ej expandJSON Sonoff.*:ENERGY.*:.\{.*} (Power|.*day)
- define ej3 expandJSON (?i).*_sensordev_.*:.*:.{.*}
-