diff --git a/fhem/FHEM/10_MQTT_GENERIC_BRIDGE.pm b/fhem/FHEM/10_MQTT_GENERIC_BRIDGE.pm index 1354bf442..2f10b7c13 100644 --- a/fhem/FHEM/10_MQTT_GENERIC_BRIDGE.pm +++ b/fhem/FHEM/10_MQTT_GENERIC_BRIDGE.pm @@ -30,6 +30,10 @@ # # CHANGE LOG # +# 31.01.2021 1.3.1 +# cleanup : Bereinigung der Konstruktionen wie my $... if / unless ... +# (patch von Beta-User) +# # 19.01.2021 1.3.0 # feature : supports attrTemplate (thanks to Beta-User) # @@ -386,7 +390,7 @@ use AttrTemplate; #my $DEBUG = 1; my $cvsid = '$Id$'; -my $VERSION = "version 1.3.0 by hexenmeister\n$cvsid"; +my $VERSION = "version 1.3.1 by hexenmeister\n$cvsid"; my %sets = ( ); @@ -1185,17 +1189,16 @@ sub getDevicePublishRecIntern($$$$$$$) { my $globalPublishMap = $globalMap->{':publish'}; # reading map - my $readingMap = $publishMap->{$readingKey} if defined $publishMap; - my $wildcardReadingMap = $publishMap->{'*'} if defined $publishMap; + my $readingMap = $publishMap->{$readingKey} // {}; + my $wildcardReadingMap = $publishMap->{'*'} // {}; #my $defaultReadingMap = $devMap->{':defaults'} if defined $devMap; # global reading map my $globalReadingMap = undef; if (defined $globalPublishMap) { - $globalReadingMap = $globalPublishMap->{$readingKey}; - $globalReadingMap = $globalPublishMap->{$reading} unless defined $globalReadingMap; + $globalReadingMap = $globalPublishMap->{$readingKey} // $globalPublishMap->{$reading}; } - my $globalWildcardReadingsMap = $globalPublishMap->{'*'} if defined $globalPublishMap; + my $globalWildcardReadingsMap = $globalPublishMap->{'*'} // {}; #Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE:DEBUG:> [$hash->{NAME}] getDevicePublishRec> readingMap ".Dumper($readingMap)); #Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE:DEBUG:> [$hash->{NAME}] getDevicePublishRec> wildcardReadingMap ".Dumper($wildcardReadingMap)); @@ -1629,7 +1632,8 @@ sub CreateSingleDeviceTableAttrSubscribe($$$$) { my $combined = computeDefaults($hash, 'sub:', $globalMap, $devMap, {'device'=>$dev,'reading'=>'#reading','name'=>'#name','mode'=>$rmap->{'mode'}}); #Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE:DEBUG:> [$hash->{NAME}] sub: Defaults: ".Dumper($combined)); - my $topic = _evalValue2($hash->{NAME},$val,{'device'=>$dev,'reading'=>'#reading','name'=>'#name',%$combined}) if defined $val; + my $topic; + $topic = _evalValue2($hash->{NAME},$val,{'device'=>$dev,'reading'=>'#reading','name'=>'#name',%$combined}) if defined $val; if(!defined($topic)) { Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE: [$hash->{NAME}] subscribe: error while interpret topic: $val"); } else { @@ -2362,20 +2366,24 @@ sub isTypeDevReadingExcluded($$$$$) { return 1 if (defined($gExcludesReadingMap) and ($gExcludesReadingMap->{$reading})); # types - my $exType=$gExcludesTypeMap->{$type} if defined $gExcludesTypeMap; - if(defined $exType) { - return 1 if ($exType eq "*"); - return 1 if ($exType eq $reading); + if (defined $gExcludesTypeMap) { + my $exType=$gExcludesTypeMap->{$type}; + if(defined $exType) { + return 1 if ($exType eq "*"); + return 1 if ($exType eq $reading); + } } # devices - my $exDevName=$gExcludesDevMap->{$devName} if defined $gExcludesDevMap; - if(defined $exDevName) { - return 1 if ($exDevName eq "*"); - return 1 if ($exDevName eq $reading); + if (defined $gExcludesDevMap) { + my $exDevName=$gExcludesDevMap->{$devName}; + if(defined $exDevName) { + return 1 if ($exDevName eq "*"); + return 1 if ($exDevName eq $reading); + } } - return undef; + return; } # Prueft, ob per MQTT ankommende Nachrichten ggf. per MQTT weiter geleitet werden duerfen. @@ -2584,10 +2592,9 @@ sub publishDeviceUpdate($$$$$) { my $r = doPublish($hash,$devn,$reading,$key,$val,$qos,$retain,$resendOnConnect); $updated = 1 unless defined $r; } - } else { - #Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE:DEBUG:> DEBUG: publish: Topic: $topic Msg: $message"); - my $r = doPublish($hash,$devn,$reading,$topic,$message,$qos,$retain,$resendOnConnect) if defined $topic and defined $message; - $updated = 1 unless defined $r; + } elsif (defined $topic and defined $message) { + my $r = doPublish($hash,$devn,$reading,$topic,$message,$qos,$retain,$resendOnConnect); + $updated = 1 unless defined $r; } if($updated) { updatePubTime($hash,$devn,$reading);