Problème connexion à broker sous jeedom Docker

Bonjour à tous,

J’ai des soucis avec le plugin jMQTT pour me connecter à mon broker MQTT.

Mon jeedom tourne dans un conteneur Docker de mon NAS Synology avec un réseau macvlan et il écoute sur le port 80 avec une adresse IP dédié (192.168.1.243).
Mon broker MQTT tourne dans un autre conteneur Docker en mode host (192.168.1.39:1883) et je peux me connecter avec MQTT Explorer sans souci.

J’ai installé le plugin jMQTT et tout a bien marché et le daemon démarre correctement. Ensuite, j’ai crée un broker avec l’adresse de mon broker et là, le statut s’affiche « POK Le Démon jMQTT n’arrive pas à se connecter à ce Broker ».

Dans le log jMQTTd je trouve cette erreur :

[2024-03-13 22:22:25,942][DEBUG] JMsg.Snd        SockOut           _loopSnd() : Sending a heartbeat to Jeedom, nothing sent since 45s (max 45s)
[2024-03-13 22:22:25,980][DEBUG] JMsg.Snd        SndNoBlkHb            send() : Sent TO Jeedom 1 messages handled in 38.448811ms (qToJ size 0): [{'cmd': 'hb'}]
[2024-03-13 22:23:02,109][DEBUG] Main            MainThread             run() : Heartbeat received from Jeedom
[2024-03-13 22:23:02,209][INFO] Main            MainThread     h_newClient() : Client already exists for Broker 1. Restarting it.
[2024-03-13 22:23:02,210][DEBUG] Client1         MainThread            stop() : jMqttClient ended
[2024-03-13 22:23:05,214][ERROR] Client1         MainThread           start() : jMqttClient.start() Exception
Traceback (most recent call last):
File "/var/www/html/plugins/jMQTT/resources/jmqttd/jMqttClient.py", line 315, in start
self.mqttclient.connect(self.mqtthostname, self.mqttport, 30)
File "/var/www/html/plugins/jMQTT/resources/jmqttd/venv/lib/python3.7/site-packages/paho/mqtt/client.py", line 914, in connect
return self.reconnect()
File "/var/www/html/plugins/jMQTT/resources/jmqttd/venv/lib/python3.7/site-packages/paho/mqtt/client.py", line 1044, in reconnect
sock = self._create_socket_connection()
File "/var/www/html/plugins/jMQTT/resources/jmqttd/venv/lib/python3.7/site-packages/paho/mqtt/client.py", line 3685, in _create_socket_connection
return socket.create_connection(addr, timeout=self._connect_timeout, source_address=source)
File "/usr/lib/python3.7/socket.py", line 727, in create_connection
raise err
File "/usr/lib/python3.7/socket.py", line 716, in create_connection
sock.connect(sa)
OSError: [Errno 113] No route to host

Je joins une capture d’écran avec la configuration du plugin.

Edit : en creusant je me rends compte que mosquitto n’a pas été installé par jMQTT (mosquitto: command not found). Est-ce que c’est peut-être ça ? Comment lancer l’installation avec jMQTT ?

Merci infiniment d’avance pour votre aide !

Juan

Hello,

Pas besoin, tu as déjà un broker fonctennel en dehors de Jeedom.

L’erreur est assez explicite : jMQTT n’arrive pas à joindre le container où se trouve Mosquitto.
Il y a probablement un souci dans la config réseau ou du filtrage.

Bad

Y a-t-il une raison spécifique à fonctionner en mode host ? Normallement pour mosquitto il suffit d’ouvrir le port 1883.

Je n’utilise pas de réseau macvlan pour le container jeedom, mais je mets tout le monde sur le même « sous-réseau » avec network_mode: bridge. Là, jeedom a comme adresse 172.17.0.3 et le container mosquitto 172.17.0.2. Puis comme adresse de brocker je mets 172.17.0.1.

Cela me semble logique puisqu’il est installé dans un container séparé, non ?

Merci à vous deux !
J’ai réussi à trouver le problème. En fait, Synology empêche les conteneurs Docker de contacter l’IP du propre NAS pour des raisons de sécurité. La solution je l’ai trouvée ici : [Tuto] Installation d’une antenne BLEA sur Synology avec Docker.

Pour répondre à seb821, « l’architechture » réseau je l’ai fait à partir du tuto de Didier3L [Tuto] Installation de Jeedom sur Synology / docker / debian buster / réseau macvlan.

Oui, tout à fait. C’est moi qui a fait la confusion de penser que jMQTT avait besoin de mosquitto pour le client MQTT.

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.