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};
}
}
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.