MQTT_DEVICE attr subscribeReading_.* Fehler beim Ändern der Topic

Begonnen von vknie, 04 September 2017, 17:23:33

Vorheriges Thema - Nächstes Thema

vknie

Ich habe festgestellt, dass beim Ändern einer Topic zu einem bereits angelegten Reading ein "unsubscribe" der alten Topic nicht stattfindet. Dadurch treten nach dem Ändern auch noch durch die alte Topic Events auf. Auch ein Löschen des Readings führt nicht komplett zum Ziel, da die Löschroutine nach dem ersten Match abbricht und somit ggf. nicht alle zum Reading eingetragenen Topics löscht.

Betrifft: $Id: 10_MQTT_DEVICE.pm 14964 2017-08-26 22:15:46Z eisler $

Lösungsvorschlag - sollte vom Autor des Moduls mal geprüft werden, da ich nicht den Überblick habe, ob dies komplett Nebenwirkungsfrei ist!

In Modul 10_MQTT_DEVICE.pm habe ich in sub Attr ($$$$) nach der Zeile

        if(!defined($mtopic)) {return "topic may not be empty";}

den Abschnitt hinzugefügt

        # zuerst evtl. vorhandene alte topic ermitteln zu $0=Reading-Name, unsubscribe durchfuehren
        # und topic aus hash entfernen
        foreach my $topic (keys %{$hash->{subscribeReadings}}) {
          if ($hash->{subscribeReadings}->{$topic}->{name} eq $1) {
            client_unsubscribe_topic($hash,$topic);
            delete $hash->{subscribeReadings}->{$topic};
          }
        }




hexenmeister

Ich habe zwar einiges im Modul geändert, aber von dem Durchblick bin ich weit entfernt.
Soweit ich da beurteilen kann, sieht die Änderung gut aus und sollte nebenwirkungsfrei sein.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy