From a77f712ff926e3630dda201335be3b312426807f Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Sun, 3 Nov 2019 20:57:29 +0000 Subject: [PATCH] 10_MQTT2_DEVICE.pm: add subscriptions Reading (Forum #104992) git-svn-id: https://svn.fhem.de/fhem/trunk@20448 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_MQTT2_DEVICE.pm | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/fhem/FHEM/10_MQTT2_DEVICE.pm b/fhem/FHEM/10_MQTT2_DEVICE.pm index 31dae182f..0940d2c3c 100644 --- a/fhem/FHEM/10_MQTT2_DEVICE.pm +++ b/fhem/FHEM/10_MQTT2_DEVICE.pm @@ -7,6 +7,8 @@ use warnings; use SetExtensions; my $bridgeTimerStarted; +my $subscrCheckTimerStarted; +sub zigbee2mqtt_devStateIcon255($;$$); sub MQTT2_DEVICE_Initialize($) @@ -82,9 +84,33 @@ MQTT2_DEVICE_Define($$) $bridgeTimerStarted = 1; AssignIoPort($hash, $ioname); + + if($init_done) { + MQTT2_DEVICE_checkSubscr(); + } elsif(!$subscrCheckTimerStarted) { + $subscrCheckTimerStarted = 1; + InternalTimer(time()+60, "MQTT2_DEVICE_checkSubscr", undef, 0); + } return undef; } +# Set the subscriptions reading from the corresponding MQTT2_SERVER connection +sub +MQTT2_DEVICE_checkSubscr() +{ + $subscrCheckTimerStarted = 0; + my %conn; + for my $c (devspec2array("TYPE=MQTT2_SERVER")) { + if($defs{$c} && $defs{$c}{cid} && $defs{$c}{subscriptions}) { + $conn{$defs{$c}{cid}} = join(" ", sort keys %{$defs{$c}{subscriptions}}); + } + } + for my $dev (devspec2array("TYPE=MQTT2_DEVICE")) { + next if(!$defs{$dev}{CID} || !$conn{$defs{$dev}{CID}}); + readingsSingleUpdate($defs{$dev},"subscriptions",$conn{$defs{$dev}{CID}},0); + } +} + ############################# sub MQTT2_DEVICE_Parse($$)