mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-22 08:11:44 +00:00
00_MQTT2_CLIENT.pm: implament disconnectAfter (Forum #114299)
git-svn-id: https://svn.fhem.de/fhem/trunk@22787 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
4e0785ecfb
commit
172c136dae
@ -41,6 +41,7 @@ MQTT2_CLIENT_Initialize($)
|
|||||||
clientId
|
clientId
|
||||||
disable:1,0
|
disable:1,0
|
||||||
disabledForIntervals
|
disabledForIntervals
|
||||||
|
disconnectAfter
|
||||||
ignoreRegexp
|
ignoreRegexp
|
||||||
lwt
|
lwt
|
||||||
lwtRetain
|
lwtRetain
|
||||||
@ -164,6 +165,12 @@ MQTT2_CLIENT_doinit($)
|
|||||||
MQTT2_CLIENT_doPublish($hash, $r->[0], $r->[1], $r->[2], 0);
|
MQTT2_CLIENT_doPublish($hash, $r->[0], $r->[1], $r->[2], 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if($hash->{sendHash}) {
|
||||||
|
map { MQTT2_CLIENT_doPublish($hash,$_->[1],$_->[2],$_->[3]) }
|
||||||
|
@{$hash->{sendHash}};
|
||||||
|
delete($hash->{sendHash});
|
||||||
|
}
|
||||||
|
MQTT2_CLIENT_updateDisconnectTimer($hash);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,8 +218,32 @@ MQTT2_CLIENT_Disco($;$$)
|
|||||||
}
|
}
|
||||||
$isUndef ? DevIo_CloseDev($hash) : DevIo_Disconnected($hash);
|
$isUndef ? DevIo_CloseDev($hash) : DevIo_Disconnected($hash);
|
||||||
delete($hash->{BUF});
|
delete($hash->{BUF});
|
||||||
|
|
||||||
|
if($hash->{disconnectTimerHash}) {
|
||||||
|
readingsSingleUpdate($hash, "state", "disconnected", 1);
|
||||||
|
RemoveInternalTimer($hash->{disconnectTimerHash});
|
||||||
|
delete($hash->{disconnectTimerHash});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub
|
||||||
|
MQTT2_CLIENT_updateDisconnectTimer($)
|
||||||
|
{
|
||||||
|
my ($hash) = @_;
|
||||||
|
return if(!$hash->{FD} || $hash->{connecting});
|
||||||
|
if($hash->{disconnectTimerHash}) {
|
||||||
|
RemoveInternalTimer($hash->{disconnectTimerHash});
|
||||||
|
delete($hash->{disconnectTimerHash});
|
||||||
|
delete($hash->{disconnectAt});
|
||||||
|
}
|
||||||
|
my $to = AttrVal($hash->{NAME}, "disconnectAfter", 0);
|
||||||
|
return if(!$to);
|
||||||
|
$to += time();
|
||||||
|
$hash->{disconnectAt} = FmtDateTime($to);
|
||||||
|
$hash->{disconnectTimerHash} = { h=>$hash };
|
||||||
|
InternalTimer($to, sub{ MQTT2_CLIENT_Disco($_[0]->{h},1) },
|
||||||
|
$hash->{disconnectTimerHash}, 0);
|
||||||
|
}
|
||||||
|
|
||||||
sub
|
sub
|
||||||
MQTT2_CLIENT_Delete($@)
|
MQTT2_CLIENT_Delete($@)
|
||||||
@ -270,6 +301,16 @@ MQTT2_CLIENT_Attr(@)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($attrName eq "disconnectAfter") {
|
||||||
|
$hash->{devioLoglevel} = ($type eq "set" ? 5 : 0);
|
||||||
|
return undef if(!$init_done);
|
||||||
|
InternalTimer(0, sub {
|
||||||
|
MQTT2_CLIENT_updateDisconnectTimer($hash);
|
||||||
|
MQTT2_CLIENT_connect($hash)
|
||||||
|
if(!$hash->{FD} && ($type ne "set" || $param[0] eq "0"));
|
||||||
|
}, undef, 0);
|
||||||
|
}
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -403,6 +444,7 @@ MQTT2_CLIENT_Read($@)
|
|||||||
}
|
}
|
||||||
$val = substr($pl, $off);
|
$val = substr($pl, $off);
|
||||||
MQTT2_CLIENT_send($hash, pack("CCnC*", 0x40, 2, $pid)) if($qos); # PUBACK
|
MQTT2_CLIENT_send($hash, pack("CCnC*", 0x40, 2, $pid)) if($qos); # PUBACK
|
||||||
|
MQTT2_CLIENT_updateDisconnectTimer($hash);
|
||||||
|
|
||||||
if(!IsDisabled($name)) {
|
if(!IsDisabled($name)) {
|
||||||
$val = "" if(!defined($val));
|
$val = "" if(!defined($val));
|
||||||
@ -442,6 +484,15 @@ MQTT2_CLIENT_doPublish($@)
|
|||||||
return if(IsDisabled($name));
|
return if(IsDisabled($name));
|
||||||
$val = "" if(!defined($val));
|
$val = "" if(!defined($val));
|
||||||
|
|
||||||
|
if((!$hash->{FD} || $hash->{connecting}) &&
|
||||||
|
AttrVal($name, "disconnectAfter", undef)) {
|
||||||
|
$hash->{sendHash} = [] if(!defined($hash->{sendHash}));
|
||||||
|
push(@{$hash->{sendHash}}, \@_);
|
||||||
|
MQTT2_CLIENT_connect($hash) if(!$hash->{connecting});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
MQTT2_CLIENT_updateDisconnectTimer($hash);
|
||||||
|
|
||||||
my $hdr = 0x30;
|
my $hdr = 0x30;
|
||||||
my $pi = "";
|
my $pi = "";
|
||||||
$hdr += 1 if($retain);
|
$hdr += 1 if($retain);
|
||||||
@ -629,6 +680,13 @@ MQTT2_CLIENT_getStr($$)
|
|||||||
disable dispatching of messages.
|
disable dispatching of messages.
|
||||||
</li><br>
|
</li><br>
|
||||||
|
|
||||||
|
<a name="MQTT2_CLIENTdisconnectAfter"></a>
|
||||||
|
<li>disconnectAfter <seconds><br>
|
||||||
|
if set, the connection will be closed after <seconds> of inactivity
|
||||||
|
on the connection, and will be automatically reopened when sending a
|
||||||
|
command.
|
||||||
|
</li>
|
||||||
|
|
||||||
<a name="MQTT2_CLIENTignoreRegexp"></a>
|
<a name="MQTT2_CLIENTignoreRegexp"></a>
|
||||||
<li>ignoreRegexp<br>
|
<li>ignoreRegexp<br>
|
||||||
if $topic:$message matches ignoreRegexp, then it will be silently ignored.
|
if $topic:$message matches ignoreRegexp, then it will be silently ignored.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user