diff --git a/fhem/FHEM/00_MQTT2_CLIENT.pm b/fhem/FHEM/00_MQTT2_CLIENT.pm index 048ee4f4e..81d2f673d 100644 --- a/fhem/FHEM/00_MQTT2_CLIENT.pm +++ b/fhem/FHEM/00_MQTT2_CLIENT.pm @@ -48,6 +48,7 @@ MQTT2_CLIENT_Initialize($) lwt lwtRetain keepaliveTimeout + maxNrConnects msgAfterConnect msgBeforeDisconnect mqttVersion:3.1.1,3.1 @@ -94,6 +95,7 @@ MQTT2_CLIENT_Define($$) $hash->{DeviceName} = $host; $hash->{clientId} = AttrVal($hash->{NAME}, "clientId", $hash->{NAME}); $hash->{connecting} = 1; + $hash->{nrConnects} = 0; InternalTimer(1, "MQTT2_CLIENT_connect", $hash, 0); # need attributes return undef; @@ -103,7 +105,14 @@ sub MQTT2_CLIENT_connect($) { my ($hash) = @_; - return if($hash->{authError} || AttrVal($hash->{NAME}, "disable", 0)); + my $me = $hash->{NAME}; + return if($hash->{authError} || AttrVal($me, "disable", 0)); + my $mc = AttrVal($me, "maxNrConnects", -1); + if($mc ne -1 && $hash->{nrConnects} >= $mc) { + Log3 $me, 2, "maxNrConnects ($mc) reached, no more reconnect attemtps"; + delete($readyfnlist{"$me.".$hash->{DeviceName}}); # Source of retry + return; + } my $disco = (DevIo_getState($hash) eq "disconnected"); $hash->{connecting} = 1 if($disco && !$hash->{connecting}); $hash->{nextOpenDelay} = 5; @@ -124,6 +133,7 @@ MQTT2_CLIENT_doinit($) ############################## CONNECT if($hash->{connecting} == 1) { + $hash->{nrConnects}++; my $usr = AttrVal($name, "username", ""); my ($err, $pwd) = getKeyValue($name); $pwd = undef if($usr eq ""); @@ -872,6 +882,15 @@ MQTT2_CLIENT_feedTheList($$$) necessary for some MQTT servers in robotic vacuum cleaners. + +