Autor Thema: MQTT ClientID  (Gelesen 1129 mal)

Offline dirk.k

  • Full Member
  • ***
  • Beiträge: 193
MQTT ClientID
« am: 07 Januar 2018, 12:43:06 »
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...

 
   
« Letzte Änderung: 07 Januar 2018, 13:34:20 von dirk.k »

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4593
    • tech_LogBuch
Antw:MQTT ClientID
« Antwort #1 am: 07 Januar 2018, 17:20:33 »
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
In Verwendung: HM, EnOcean, 1wire, Firmata, MySensors, ESPEasy, MQTT*, NodeRED, Alexa, Telegram,..
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy
Kaffeekasse: https://www.paypal.me/s6z

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4593
    • tech_LogBuch
Antw:MQTT ClientID
« Antwort #2 am: 07 Januar 2018, 17:27:44 »
So, jetzt gibt ein neues optionale Attribut "client-id". Probiere mal aus, ich habe gerade leider keine Zeit zum ausfühlichen Testen.
In Verwendung: HM, EnOcean, 1wire, Firmata, MySensors, ESPEasy, MQTT*, NodeRED, Alexa, Telegram,..
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy
Kaffeekasse: https://www.paypal.me/s6z

Offline dirk.k

  • Full Member
  • ***
  • Beiträge: 193
Antw:MQTT ClientID
« Antwort #3 am: 07 Januar 2018, 19:51:03 »
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.


   

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4593
    • tech_LogBuch
Antw:MQTT ClientID
« Antwort #4 am: 07 Januar 2018, 21:56:22 »
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 :)
In Verwendung: HM, EnOcean, 1wire, Firmata, MySensors, ESPEasy, MQTT*, NodeRED, Alexa, Telegram,..
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy
Kaffeekasse: https://www.paypal.me/s6z

Offline eisler

  • Developer
  • Full Member
  • ****
  • Beiträge: 240
Antw:MQTT ClientID
« Antwort #5 am: 19 Februar 2018, 19:28:15 »
@hexenmeister done. https://svn.fhem.de/trac/changeset/16223/trunk/fhem

Grüße
Stephan

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4593
    • tech_LogBuch
Antw:MQTT ClientID
« Antwort #6 am: 19 Februar 2018, 21:32:56 »
Danke :)
In Verwendung: HM, EnOcean, 1wire, Firmata, MySensors, ESPEasy, MQTT*, NodeRED, Alexa, Telegram,..
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy
Kaffeekasse: https://www.paypal.me/s6z

 

decade-submarginal