From 68b1a74a349f14c22e4a4eeedd70e01145979c4d Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Tue, 5 Mar 2019 10:56:08 +0000 Subject: [PATCH] MQTT2*: change autocreate to simple/complex (Forum #98130) git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@18794 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- FHEM/00_MQTT2_CLIENT.pm | 27 ++++++++++++++++++--------- FHEM/00_MQTT2_SERVER.pm | 19 ++++++++++++++----- FHEM/10_MQTT2_DEVICE.pm | 19 +++++++++++-------- 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/FHEM/00_MQTT2_CLIENT.pm b/FHEM/00_MQTT2_CLIENT.pm index debb44ce4..e17cf28cf 100644 --- a/FHEM/00_MQTT2_CLIENT.pm +++ b/FHEM/00_MQTT2_CLIENT.pm @@ -36,7 +36,7 @@ MQTT2_CLIENT_Initialize($) no warnings 'qw'; my @attrList = qw( - autocreate:1,0 + autocreate:no,simple,complex clientId disable:1,0 disabledForIntervals @@ -341,10 +341,12 @@ MQTT2_CLIENT_Read($@) if(!IsDisabled($name)) { $val = "" if(!defined($val)); - my $ac = AttrVal($name, "autocreate", undef) ? "autocreate\0":""; + my $ac = AttrVal($name, "autocreate", "no"); + $ac = $ac eq "1" ? "simple" : ($ac eq "0" ? "no" : $ac); # backward comp. + my $cid = $hash->{clientId}; $tp =~ s/:/_/g; # 96608 - Dispatch($hash, "$ac$cid\0$tp\0$val", undef, !$ac); + Dispatch($hash, "autocreate=$ac\0$cid\0$tp\0$val", undef, $ac eq "no"); my $re = AttrVal($name, "rawEvents", undef); DoTrigger($name, "$tp:$val") if($re && $tp =~ m/$re/); @@ -516,12 +518,19 @@ MQTT2_CLIENT_getStr($$) diff --git a/FHEM/10_MQTT2_DEVICE.pm b/FHEM/10_MQTT2_DEVICE.pm index a0cc91ad2..7e0cd61d7 100644 --- a/FHEM/10_MQTT2_DEVICE.pm +++ b/FHEM/10_MQTT2_DEVICE.pm @@ -95,10 +95,10 @@ MQTT2_DEVICE_Parse($$) } } - my $autocreate; - if($msg =~ m/^autocreate\0(.*)$/s) { - $msg = $1; - $autocreate = 1; + my $autocreate = "no"; + if($msg =~ m/^autocreate=([^\0]+)\0(.*)$/s) { + $autocreate = $1; + $msg = $2; } my ($cid, $topic, $value) = split("\0", $msg, 3); @@ -150,8 +150,8 @@ MQTT2_DEVICE_Parse($$) } ################################################# - # autocreate and/or expand readingList - if($autocreate && !%fnd) { + # IODevs autocreate and/or expand readingList + if($autocreate ne "no" && !%fnd) { return "" if($cid && $cid =~ m/mosqpub.*/); ################## bridge stuff @@ -180,7 +180,10 @@ MQTT2_DEVICE_Parse($$) my $ret = json2nameValue($value); if(keys %{$ret}) { $topic =~ m,.*/([^/]+),; - $add = "{ json2nameValue(\$EVENT) }"; + my $ltopic = makeReadingName($1)."_"; + $add = $autocreate eq "simple" ? + "{ json2nameValue(\$EVENT) }" : + "{ json2nameValue(\$EVENT, '$ltopic', \$JSONMAP) }"; } } if(!$add) { @@ -206,7 +209,7 @@ MQTT2_DEVICE_Parse($$) for my $ch (@{$cidArr}) { my $nn = $ch->{NAME}; - next if(!AttrVal($nn, "autocreate", 1)); + next if(!AttrVal($nn, "autocreate", 1)); # device autocreate my $rl = AttrVal($nn, "readingList", ""); $rl .= "\n" if($rl); my $regex = ($cid eq $newCid ? "$cid:" : "").$topic.":.*";