MQTT2 Client - Zwei FHEM Instanzen an einem Mosquitto Server

Begonnen von gloob, 03 August 2019, 16:43:56

Vorheriges Thema - Nächstes Thema

gloob

Hat jemand schon einmal probiert 2 FHEM Instanzen mit einem Mosquitto Server über MQTT2 Client zu verbinden?

Sobald ich ein MQTT2 Client im zweiten FHEM definierte:
defmod MQTT2 MQTT2_CLIENT 192.168.1.15:1883
attr MQTT2 room Gateways,MQTT


scheint eine der beiden Instanzen sich nicht richtig verbinden zu können:
2019.08.03 16:38:53 1: 192.168.1.15:1883 disconnected, waiting to reappear (MQTT2)
2019.08.03 16:38:53 1: 192.168.1.15:1883 reappeared (MQTT2)
2019.08.03 16:40:23 1: 192.168.1.15:1883 disconnected, waiting to reappear (MQTT2)
2019.08.03 16:40:23 1: 192.168.1.15:1883 reappeared (MQTT2)
2019.08.03 16:41:53 1: 192.168.1.15:1883 disconnected, waiting to reappear (MQTT2)
2019.08.03 16:41:53 1: 192.168.1.15:1883 reappeared (MQTT2)
2019.08.03 16:43:23 1: 192.168.1.15:1883 disconnected, waiting to reappear (MQTT2)
2019.08.03 16:43:23 1: 192.168.1.15:1883 reappeared (MQTT2)
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

gloob

Verbose 5 Log hilft mir zumindest nicht weiter:

FHEM 1:
2019.08.03 20:02:53 1: 192.168.1.15:1883 disconnected, waiting to reappear (MQTT2)
2019.08.03 20:02:53 5: HttpUtils url=http://192.168.1.15:1883/
2019.08.03 20:02:53 4: IP: 192.168.1.15 -> 192.168.1.15
2019.08.03 20:02:53 1: 192.168.1.15:1883 reappeared (MQTT2)
2019.08.03 20:04:23 1: 192.168.1.15:1883 disconnected, waiting to reappear (MQTT2)
2019.08.03 20:04:23 5: HttpUtils url=http://192.168.1.15:1883/
2019.08.03 20:04:23 4: IP: 192.168.1.15 -> 192.168.1.15
2019.08.03 20:04:23 1: 192.168.1.15:1883 reappeared (MQTT2)


FHEM 2:
2019.08.03 20:04:24 5: MQTT2: keepalive 30
2019.08.03 20:04:24 5: MQTT2: sending PINGREQ (192)(0)
2019.08.03 20:04:24 5: MQTT2: received PINGRESP
2019.08.03 20:04:54 5: MQTT2: keepalive 30
2019.08.03 20:04:54 5: MQTT2: sending PINGREQ (192)(0)
2019.08.03 20:04:54 5: MQTT2: received PINGRESP
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

DasQ

#2
was für ein port hat der mosquitto? (wenn der 1883 ist, ist das dein problem) gib den clients mal andere ports
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

TomLee

Ist
Zitat von: gloob am 03 August 2019, 16:43:56
Mosquitto Server

denn ein MQTT2_SERVER ?


Bei mir klappt das einwandfrei:

FHEM 1:

defmod MQTT2_Server MQTT2_SERVER 1883 global
attr MQTT2_Server autocreate complex
attr MQTT2_Server room MQTT2_DEVICE


wobei autocreate simple schon ausreichen wäre

FHEM 2:

defmod myMQTT2_CLIENT MQTT2_CLIENT 192.168.188.26:1883
attr myMQTT2_CLIENT username Thomas

gloob

Zitat von: DasQ am 03 August 2019, 20:31:48
was für ein port hat der mosquitto? (wenn der 1883 ist, ist das dein problem) gib den clients mal andere ports

Wie soll ich dem Client einen anderen Port geben? Er besitzt kein Reading oder Attribut dafür.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

gloob

Zitat von: TomLee am 03 August 2019, 20:33:09
Ist
denn ein MQTT2_SERVER ?


Bei mir klappt das einwandfrei:

FHEM 1:

defmod MQTT2_Server MQTT2_SERVER 1883 global
attr MQTT2_Server autocreate complex
attr MQTT2_Server room MQTT2_DEVICE


wobei autocreate simple schon ausreichen wäre

FHEM 2:

defmod myMQTT2_CLIENT MQTT2_CLIENT 192.168.188.26:1883
attr myMQTT2_CLIENT username Thomas


Mosquitto Server ist ein externer MQTT Server. Es handelt sich nicht um einen "FHEM MQTT2 Server".
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

DasQ

#6
So?

Zitat von: gloob am 03 August 2019, 16:43:56

defmod MQTT2 MQTT2_CLIENT 192.168.1.15:1884


Ich hab das selber nicht am laufen, war mir nur so als ob der Server nicht am selben Port wie er lauscht antworten kann.

Wie ist die ip vom mosquitto?
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

gloob

Zitat von: DasQ am 03 August 2019, 21:12:55
So?

Der Mosquitto Server läuft doch auf 1883. Wie soll sich der Client dann mit 1884 Verbinden können?
Ändere ich den Port ab bekomme ich nur ein "Disconnected"
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

DasQ

#8
Ja ne ich war auf dem Holzweg da ich dachte mit dem Define gibst du dem client seine Konfiguration mit auf den Weg und konfigurierst den Server über Attribute.

Was sagt den der mosquitto?
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

DasQ

Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

gloob

Zitat von: DasQ am 03 August 2019, 21:27:32
Momentmal, heißen die Clients beide gleich?

Daran habe ich auch schon gedacht und hatte die ClientId unterschiedlich gesetzt sowie den Devicenamen:

defmod MQTT2_Mosquitto_Client MQTT2_CLIENT 192.168.1.15:1883
attr MQTT2_Mosquitto_Client clientId mqtt2client3
attr MQTT2_Mosquitto_Client room Gateways,MQTT


defmod MQTT2 MQTT2_CLIENT 192.168.1.15:1883
attr MQTT2 clientId mqtt2client1
attr MQTT2 room Gateways,MQTT
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

TomLee

Zitat von: WikiIO-Module für externe MQTT-Server

Damit FHEM mit dem MQTT-Server kommuniziert, muss noch ein IO-Device angelegt werden. Dabei stehen zwei Varianten zur Wahl, das Modul MQTT oder seit Ende 2018 MQTT2_CLIENT.

Beide Module können auch dazu genutzt werden, um Daten zwischen zwei FHEM-Installationen auszutauschen, wenn auf einer der beiden Installationen MQTT2_SERVER installiert ist.

Unterstelle dem Autor das bewusst so beschrieben zu haben  :P und meine Vermutung bestätigt das mit externem Mosquitto dann MQTT_GENERIC_BRIDGE verwendet werden sollte.

gloob

Zitat von: TomLee am 03 August 2019, 23:36:52
Unterstelle dem Autor das bewusst so beschrieben zu haben  :P und meine Vermutung bestätigt das mit externem Mosquitto dann MQTT_GENERIC_BRIDGE verwendet werden sollte.

Nutze ich eine FHEM Instanz und greife auf den Mosquitto Server zu funktioniert es ohne Probleme. Es kann also nicht ein generelles Problem des MQTT2_Client sein.
Ich habe nur ein Problem wenn eine zweite, unabhängige FHEM Instanz auch auf den Mosquitto über MQTT2_Client zugreifen will.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

hexenmeister

So, wie du es beschreibst, müsste eigentlich funktionieren.
Ein MQTT-Server kann eine beliebige Anzahl Clients bedienen. Wichtig ist eine eindeutige ClientID, aber das hast Du ja schon. Die Definitionen für MQTT2_CLIENT könne ansonsten natürlich gleich sein.
Die oben erwähnte MQTT_GENERIC_BRIDGE hilft natürlich hier nicht weiter, sie ist für die Verteilung der Nahrichten in die Geräte zuständig, nicht für die Verbindung als solche.
Ich betreibe eine weitaus größere Anzahl der FHEM-Instanzen an einem Mosquitto-Server, nutze allerdings das alte MQTT-Modul. Habe jedoh testweise auch schon mehrere MQTT2_CLIENTS parallel betrieben. Kann leider keine Probleme in deiner Beschreibung finden. :(
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

rudolfkoenig

Ich kann das erwaehnte Problem (disconnect Schleife) reproduzieren, wenn beide MQTT2_CLIENT Instanzen identisch definiert sind.

Und ich sehe keine Probleme, wenn ich die beiden MQTT2_CLIENT Instanzen unterschiedlich bennene, z.Bsp:define m2c MQTT2_CLIENT localhost:1883
...
define m2c2 MQTT2_CLIENT localhost:1883

hexenmeister

Was könnte der Grund für die Probleme sein? Wenn ClientID definiert ist, dürfte doch der Name überhaupt keine Rolle spielen?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

gloob

Ich hatte gestern Abend nochmal alles neu gestartet und jetzt scheint das Problem weg zu sein. Zumindest sehe ich log keine reconnects mehr.

Ich denke das setzen der ClientId war die Lösung.

Ich baue nachher mal ein MQTT Device und teste mal ob die messages in beiden Instanzen sauber angekommen
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

rudolfkoenig

ZitatWas könnte der Grund für die Probleme sein? Wenn ClientID definiert ist, dürfte doch der Name überhaupt keine Rolle spielen?
Ich gehe davon aus, dass nur eine Verbindung pro ClientId zugelassen wird, was bei kaputten TCP/MQTT-Implementierungen durchaus eine Berechtigung hat.

Sonoff (oder Tasmota?) Geraete vergessen gerne, dass sie eine funktionierende TCP-Verbindung zum Server haben, und oeffnen eine Neue, um danach die Alte zu schliessen. Damit nicht alle ueberrascht sind, veroeffentlicht in solchen Fallen MQTT2_SERVER kein LWT.

Beta-User

Zitat von: TomLee am 03 August 2019, 23:36:52
Unterstelle dem Autor das bewusst so beschrieben zu haben  :P und meine Vermutung bestätigt das mit externem Mosquitto dann MQTT_GENERIC_BRIDGE verwendet werden sollte.
:-* Ganz so weit hatte "der Autor" nicht gedacht, das im Wiki ist ausdrücklich noch "Baustelle"...

Hab mal versucht, noch klarer zu formulieren (danach stand schon, dass man (fast) alles mit allem kombinieren kann):
ZitatBeide Module können auch dazu genutzt werden, um Daten zwischen zwei FHEM-Installationen auszutauschen, insbesondere kann auch 00_MQTT.pm als Client für einen MQTT2_SERVER eingesetzt werden, der auf der anderen Installation als MQTT-Serverdienst eingerichtet ist. Darüber hinaus bestehen eine Vielzahl von Kombinationsmöglichkeiten der diversen IO-Module, wenn die Installation auf mehrere Server verteilt ist. Auf einer FHEM-Installation wird jedoch in der Regel nur eines der IO-Module benötigt.
(Das ist zwar immer noch ungenau, weil es auch ein MQTT2_SERVER in derselben Installation täte, aber diese Konstruktion macht sachlich wenig Sinn...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files