MQTT ClientID

Begonnen von dirk.k, 07 Januar 2018, 12:43:06

Vorheriges Thema - Nächstes Thema

dirk.k

Hallo zusammen,
ich habe ein Problem bei der Anbindung von Geräten über einen öffentlichen Broker (broker.hivemq.com)
Ich bekomme im Event-monitor Unmengen von  CONNECTED/DISCONNECTED Meldungen.
2018-01-07 12:36:50 MQTT_DEVICE Sonoff_basic_11 transmission-state: subscription acknowledged
2018-01-07 12:36:50 MQTT mqtt_hivemq DISCONNECTED
2018-01-07 12:36:50 MQTT mqtt_hivemq connection: connecting
2018-01-07 12:36:50 MQTT mqtt_hivemq CONNECTED
2018-01-07 12:36:50 MQTT mqtt_hivemq connection: connected
2018-01-07 12:36:50 MQTT_DEVICE Sonoff_basic_11 transmission-state: subscribe sent
2018-01-07 12:36:50 MQTT mqtt_hivemq connection: active
2018-01-07 12:36:50 MQTT_DEVICE Sonoff_basic_11 transmission-state: subscription acknowledged

In meiner eigenen MQTT Installation hatte ich einen Ähnlichen Effekt bei verwendung der gleichen ClientID durch mehrere Geräte.
Nun die Frage: kann ich die ClientID für die MQTT Verbindung konfigurieren/Anpassen?
Mein Hostname ist einfallslos gewählt und mit Sicherheit nicht einmalig...

 
   

hexenmeister

Moin!

Wenn man in die MQTT-Lib (Datei Connect.pm) reinschaut, sieht man, dass als client_id (wenn nicht direkt angegeben) folgendes verwendet wird:
sub client_id { shift->{client_id} || 'Net::MQTT::Message['.$$.']' }
Basiert also auf Perl-Prozess-ID. Kann an einem Public-Server natürlich zu Kollisionen kommen.
Wäre leicht implementiebar. In 00_MQTT.pm müsste Methode send_connect angepasst werden.

Ich schue mir mal an.

Grüße
Alexander
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

hexenmeister

So, jetzt gibt ein neues optionale Attribut "client-id". Probiere mal aus, ich habe gerade leider keine Zeit zum ausfühlichen Testen.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

dirk.k

Hi,
besten Dank. Das ging ja schnell.
das neue Attribut funktioniert. In Wireshark kann ich die gesetzte ClientID an genau der richtigen Stelle sehen.
Leider wird die Verbindung trotzdem vom Server getrennt.
Ich werde zwar meine Daten los und bekomme auch welche, habe aber jede Sekunde das subscribe/connect/disconnect.
Gibt es eine Möglichkeit hier zu debuggen?
Ich werde mal weiter suchen.


   

hexenmeister

naja, eine große Änderung war das ja nicht.
Schade, dass das nicht geholfen hat. Leider habe ich keine weitere Idee.

Da die Änderung dennoch für einen oder anderen sinnvoll sein könnte, hänge ich hier noch ein entsprechenden Patch ein.

@eisler magst Du den Patch prüfen und übernehmen? Danke :)
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

eisler


hexenmeister

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy