From 35b8482891cbf842c4da8f90bb1411fdb65c90de Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Sat, 10 Nov 2018 17:43:12 +0000 Subject: [PATCH] 00_MQTT2_CLIENT.pm: fix connect message, add onConnect attribtute (Forum #92946) git-svn-id: https://svn.fhem.de/fhem/trunk@17725 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_MQTT2_CLIENT.pm | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/fhem/FHEM/00_MQTT2_CLIENT.pm b/fhem/FHEM/00_MQTT2_CLIENT.pm index cf4b73ff5..0180e1c23 100644 --- a/fhem/FHEM/00_MQTT2_CLIENT.pm +++ b/fhem/FHEM/00_MQTT2_CLIENT.pm @@ -40,6 +40,7 @@ MQTT2_CLIENT_Initialize($) lwt lwtRetain mqttVersion:3.1.1,3.1 + onConnect rawEvents subscriptions SSL @@ -285,14 +286,16 @@ MQTT2_CLIENT_Read($@) #################################### if($cpt eq "CONNACK") { - my $rc = ord(substr($fb,1,1)); + my $rc = ord(substr($pl,1,1)); if($rc == 0) { + my $onc = AttrVal($name, "onConnect", ""); + MQTT2_CLIENT_doPublish($hash, split(" ", $onc, 2)) if($onc); MQTT2_CLIENT_doinit($hash); } else { my @txt = ("Accepted", "bad proto", "bad id", "server unavailable", "bad user name or password", "not authorized"); - Log3 1, $name, "$name: Connection refused, ". + Log3 $name, 1, "$name: Connection refused, ". ($rc <= int(@txt) ? $txt[$rc] : "unknown error $rc"); MQTT2_CLIENT_Disco($hash); return; @@ -314,13 +317,15 @@ MQTT2_CLIENT_Read($@) $val = substr($pl, $off); addToWritebuffer($hash, pack("CCnC*", 0x40, 2, $pid)) if($qos); # PUBACK - $val = "" if(!defined($val)); - my $ac = AttrVal($name, "autocreate", undef) ? "autocreate:":""; - my $cid = $hash->{clientId}; - Dispatch($hash, "$ac$cid:$tp:$val", undef, !$ac); + if(!IsDisabled($name)) { + $val = "" if(!defined($val)); + my $ac = AttrVal($name, "autocreate", undef) ? "autocreate:":""; + my $cid = $hash->{clientId}; + Dispatch($hash, "$ac$cid:$tp:$val", undef, !$ac); - my $re = AttrVal($name, "rawEvents", undef); - DoTrigger($name, "$tp:$val") if($re && $tp =~ m/$re/); + my $re = AttrVal($name, "rawEvents", undef); + DoTrigger($name, "$tp:$val") if($re && $tp =~ m/$re/); + } } else { Log 1, "M2: Unhandled packet $cpt, disconneting $name"; @@ -483,6 +488,11 @@ MQTT2_CLIENT_getStr($$) set the MQTT protocol version in the CONNECT header, default is 3.1
+ +
  • onConnect topic message
    + publish the topic after each connect or reconnect. +

  • +
  • rawEvents <topic-regexp>
    send all messages as events attributed to this MQTT2_CLIENT instance.