Node-RED

Node-RED MQTT ne se connecte pas : guide de dépannage

Un guide pas à pas pour le cas où le nœud MQTT de Node-RED reste bloqué sur connecting ou se déconnecte sans cesse : lire les logs, tester hors de Node-RED et corriger ports, TLS, noms d'hôte, client IDs en double, identifiants, quotas et réseau des conteneurs.

Nœud MQTT de Node-RED affichant un statut jaune connecting pendant le dépannage d'un Node-RED MQTT qui ne se connecte pas
Essayez-le sur votre propre broker MQTTObtenez un broker MQTT privé et managé avec l’offre Free et partez d’exemples de code prêts à l’emploi.
Essayer gratuitement Exemples de code Aucune carte bancaire requise

Lorsque Node-RED MQTT ne se connecte pas, le nœud reste généralement sur un anneau jaune « connecting » ou alterne entre connecté et déconnecté, et le reste de votre flow devient muet. Ce guide vous donne une méthode rapide et ordonnée pour trouver la cause : lire les bons logs, prouver que le broker est joignable en dehors de Node-RED, puis passer en revue ports, TLS, noms d'hôte, client IDs, identifiants et réseau des conteneurs jusqu'à ce que le statut passe au vert.

Reconnaître les symptômes

Le statut affiché sous un nœud mqtt in ou mqtt out est votre premier indice :

Statut Signification habituelle
Anneau jaune, « connecting » indéfiniment Node-RED n'arrive pas du tout à établir la connexion : mauvais hôte ou port, incohérence TLS, pare-feu, DNS
Anneau rouge, « disconnected » Le broker a refusé ou fermé la connexion ; vérifiez les identifiants et les logs
Vert puis rouge toutes les quelques secondes Un autre client utilise le même client ID, ou problème de keepalive
Vert, mais aucun message La connexion fonctionne ; le problème vient du topic, de la QoS ou de l'éditeur
Gris ou aucun statut Le nœud n'est pas relié à une configuration de broker, ou le flow n'est pas déployé

Retenez les deux derniers cas. Un statut vert signifie que la connexion fonctionne : passez directement aux topics. Beaucoup de signalements « ne se connecte pas » sont en réalité des problèmes d'abonnement.

Étape 1 : lire le log de Node-RED

L'éditeur n'affiche qu'un statut succinct. Le log de Node-RED contient la véritable erreur. Son emplacement dépend de la façon dont vous lancez Node-RED :

# Lancé depuis un terminal : le log est dans ce terminal

# Installé comme service systemd (p. ex. script Raspberry Pi)
journalctl -u nodered -f

# Docker
docker logs -f nodered

Cherchez les lignes du nœud broker MQTT telles que Connection failed to broker: .... Le texte après les deux-points, par exemple Connection refused: Not authorized, getaddrinfo ENOTFOUND, ECONNREFUSED ou une erreur de certificat, vous oriente directement vers l'une des sections ci-dessous.

Étape 2 : tester en dehors de Node-RED

Avant de modifier quoi que ce soit dans Node-RED, prouvez que la machine peut joindre le broker. Les clients Mosquitto sont le moyen le plus rapide. Essayez d'abord le serveur MQTT public gratuit, qui ne demande aucun identifiant et sert aux tests, pas aux données de production :

mosquitto_sub -h broker.connectmq.com -p 1883 -i nr-test-6b0e \
  -t "connectmq/demo/6b0e/#" -v

Dans un second terminal :

mosquitto_pub -h broker.connectmq.com -p 1883 -i nr-test-pub-6b0e \
  -t "connectmq/demo/6b0e/ping" -m "hello"

Si hello apparaît, le MQTT sortant fonctionne depuis cette machine. Testez maintenant votre broker privé exactement comme Node-RED s'y connectera, avec TLS et identifiants :

mosquitto_sub -h YOUR_BROKER_HOST -p 8883 \
  --capath /etc/ssl/certs \
  -u YOUR_USERNAME -P YOUR_PASSWORD -i YOUR_CLIENT_ID \
  -t "test/#" -v -d

L'option -d affiche les paquets CONNECT et CONNACK. Si cette commande échoue, le problème vient du réseau, du certificat ou des identifiants, pas de Node-RED. Si elle réussit et que Node-RED échoue toujours, comparez les réglages de Node-RED champ par champ avec cette commande. Arrêtez le client de test avant de lancer Node-RED, car il utilise le même client ID.

Étape 3 : vérifier ensemble serveur, port et TLS

La plupart des boucles de connexion proviennent d'une incohérence entre le port et les réglages TLS. La plupart des brokers utilisent ces ports standard :

Port Transport Réglages du nœud broker Node-RED
1883 MQTT sur TCP Use TLS décoché
8883 MQTT sur TLS Use TLS coché
8083 MQTT sur WebSocket Serveur ws://host:8083/mqtt
8084 MQTT sur WebSocket sécurisé Serveur wss://host:8084/mqtt

Erreurs fréquentes :

  1. Port 8883 sans TLS. Node-RED envoie du MQTT en clair vers un port TLS ; le broker attend une négociation TLS et le nœud se reconnecte en boucle.
  2. Port 1883 avec TLS coché. Node-RED lance une négociation TLS sur un port en clair et échoue.
  3. Schéma dans le champ serveur. Saisissez uniquement le nom d'hôte, comme broker.connectmq.com, pour TCP et TLS. N'utilisez une URL ws:// ou wss:// que si vous comptez vous connecter via WebSocket.
  4. Fautes de frappe et espaces. Un espace en fin de nom d'hôte produit des erreurs DNS difficiles à repérer.

Pour TLS, vérifiez aussi que Verify server certificate est activé et que le nom du serveur correspond au certificat. ConnectMQ utilise un certificat Let's Encrypt, auquel Node.js fait confiance par défaut : vous n'avez donc pas besoin d'importer de fichier CA. Si vous avez ajouté une configuration TLS personnalisée avec un ancien fichier CA, supprimez-la. La configuration complète figure dans Node-RED MQTT TLS.

Étape 4 : écarter les client IDs en double

Les brokers MQTT n'autorisent qu'une connexion par client ID. Lorsqu'un second client se connecte avec le même identifiant, le broker déconnecte le premier. Si les deux clients se reconnectent automatiquement, ils s'éjectent mutuellement sans fin, ce qui se traduit par un statut qui alterne entre connecté et déconnecté.

Sources typiques de doublons :

  • Deux instances Node-RED, par exemple un ordinateur portable et un Raspberry Pi, déployées avec le même flow.
  • Un mosquitto_sub de test resté actif avec le client ID de Node-RED.
  • Un conteneur Docker recréé alors que l'ancien tourne encore.
  • Deux nœuds de configuration de broker dans un même Node-RED avec le même identifiant.

Donnez un identifiant unique à chaque instance. Sur le broker public, n'importe quelle chaîne unique non vide convient. Sur les brokers privés ConnectMQ, les client IDs sont liés aux identifiants délivrés : utilisez le client ID affiché dans le portail et ne réutilisez pas ce jeu d'identifiants sur une seconde instance ; créez plutôt un autre identifiant pour celle-ci.

Étape 5 : vérifier les identifiants et les limites du compte

Une connexion refusée juste après la connexion signale généralement un problème d'authentification. Avec MQTT 3.1.1, vous verrez les codes de retour 4 ou 5 (nom d'utilisateur ou mot de passe incorrect, non autorisé) ; avec MQTT 5, des reason codes comme 0x86 ou 0x87. Ressaisissez le nom d'utilisateur et le mot de passe dans l'onglet Security du nœud broker, puis déployez. Les identifiants sont stockés séparément des flows : importer un flow sur une nouvelle machine apporte les réglages du broker, mais pas le mot de passe.

Deux causes moins évidentes :

  • Échecs de connexion répétés. ConnectMQ bloque une adresse IP après des tentatives de connexion échouées répétées. Si vous avez déployé un mauvais mot de passe et que Node-RED a réessayé de nombreuses fois, corrigez les identifiants et laissez le blocage se lever avant de conclure que le nouveau mot de passe est faux lui aussi.
  • Quotas de connexions. Chaque offre a une limite de connexions ; l'offre gratuite Serverless autorise jusqu'à 25 connexions. Au-delà, un broker MQTT 5 peut refuser avec le reason code 0x97 (quota exceeded). Comptez tous vos équipements, tableaux de bord et instances Node-RED.

Étape 6 : corriger le réseau, le DNS et les conteneurs

Si le log affiche ENOTFOUND, ETIMEDOUT ou ECONNREFUSED :

  • Pare-feu. Les réseaux d'entreprise et certains réseaux invités bloquent les ports sortants 1883 et 8883. Essayez le WebSocket sécurisé sur le port 8084, qui passe souvent là où le MQTT brut est bloqué.
  • localhost dans Docker. Dans un conteneur, localhost désigne le conteneur lui-même. Utilisez le nom d'hôte du broker, un nom de service Compose ou host.docker.internal ; voir Node-RED avec Docker.
  • DNS. Exécutez nslookup YOUR_BROKER_HOST sur l'hôte Node-RED. Les passerelles dont le DNS est mal configuré échouent d'abord ici.
  • Proxys. Le client MQTT de Node-RED ne passe pas par un proxy HTTP pour le TCP brut ; les connexions WebSocket s'accommodent souvent mieux des proxys.

Étape 7 : vérifier le keepalive et les réglages de session

Si la connexion tombe toutes les une ou deux minutes sur un réseau par ailleurs sain, regardez le keepalive. Une valeur de 60 secondes convient à la plupart des liaisons. Des valeurs très longues laissent les routeurs NAT supprimer silencieusement les connexions inactives. Vérifiez aussi que les réglages Clean session et la version du protocole correspondent à ce qu'attend votre flow. Utiliser des fonctionnalités MQTT 5 avec un nœud broker réglé en 3.1.1 n'empêche pas la connexion, mais peut expliquer des comportements étranges une fois connecté.

Check-list de dépannage rapide

  1. Le flow est-il déployé et le nœud MQTT relié à une configuration de broker ?
  2. Le log de Node-RED affiche-t-il une erreur précise ?
  3. mosquitto_sub se connecte-t-il depuis la même machine avec les mêmes réglages ?
  4. Les réglages de port et de TLS concordent-ils (1883 en clair, 8883 en TLS) ?
  5. Le champ serveur contient-il un simple nom d'hôte, sans faute de frappe ?
  6. Le client ID est-il unique parmi tous les clients en cours d'exécution ?
  7. Le nom d'utilisateur et le mot de passe sont-ils corrects, et votre IP n'est-elle pas temporairement bloquée ?
  8. Êtes-vous sous la limite de connexions de votre offre ?
  9. Le DNS résout-il le nom et le port est-il ouvert depuis ce réseau ou ce conteneur ?

Si le statut est vert mais que les messages n'arrivent pas, vérifiez les topics et les wildcards, et consultez le tutoriel Node-RED MQTT pour un flow éprouvé. La documentation officielle des nœuds MQTT de Node-RED explique aussi chaque réglage du broker.

Choisissez un broker facile à déboguer

Le dépannage va plus vite lorsque vous voyez le côté broker. ConnectMQ est un broker MQTT managé dont le portail inclut un client MQTT dans le navigateur et un explorateur de topics en direct, pour vérifier si les messages de Node-RED arrivent. Vous pouvez aussi vous abonner à $SYS/broker/connection/{clientId}/state pour savoir si un client précis est connecté. Créez gratuitement un broker Serverless sur app.connectmq.com, sans carte bancaire, et copiez dans Node-RED l'hôte, le port, le nom d'utilisateur, le mot de passe et le client ID exacts. Pour aller plus loin, lisez comment choisir un broker MQTT cloud.

Questions fréquentes

Pourquoi mon nœud MQTT Node-RED reste-t-il bloqué sur connecting ?

Le plus souvent, l'hôte ou le port est incorrect, le TLS ne correspond pas au port, ou un pare-feu bloque la connexion. Consultez le log de Node-RED pour l'erreur exacte et testez les mêmes réglages avec mosquitto_sub.

Pourquoi mon nœud MQTT Node-RED se connecte-t-il et se déconnecte-t-il sans arrêt ?

La cause la plus fréquente est un client ID en double : un autre client avec le même identifiant reprend sans cesse la session. Donnez un client ID unique à chaque instance Node-RED et à chaque outil de test.

Dois-je importer un certificat CA pour me connecter à ConnectMQ ?

Non. ConnectMQ utilise un certificat Let's Encrypt auquel Node.js fait confiance par défaut. Cochez Use TLS, utilisez le port 8883 et laissez la vérification du certificat activée.

Node-RED peut-il se connecter à MQTT à travers un pare-feu d'entreprise ?

Si les ports 1883 et 8883 sont bloqués, essayez MQTT sur WebSocket sécurisé via le port 8084 avec le chemin /mqtt, qui a plus de chances d'être autorisé.

Articles liés

Node-RED Dashboard 2.0 avec MQTT : jauges, graphiques et commandes

Un tutoriel pratique Node-RED Dashboard 2.0 : abonnez-vous à une télémétrie MQTT en direct, affichez-la sur des jauges et un graphique en courbe, et pilotez un appareil avec un interrupteur qui publie des commandes et reflète l'état réel.

9 min de lecture

Client Node-RED OPC UA vers MQTT avec des topics ISA-95

Utilisez node-red-contrib-opcua pour vous abonner aux variables OPC UA d'un automate ou d'un serveur de simulation, associer les node IDs à des topics MQTT de style ISA-95 et publier les valeurs avec leur qualité et leur horodatage.

10 min de lecture

Historique des graphiques Node-RED : conserver les données MQTT après un redémarrage

Les graphiques du Dashboard oublient tout quand Node-RED redémarre. Ce guide présente deux méthodes fiables pour conserver l'historique des graphiques Node-RED pour les données MQTT : le stockage de contexte sur fichier et une petite table SQLite, toutes deux rejouées dans Dashboard 2.0 au démarrage.

8 min de lecture

Tous les articles →

Votre broker MQTT privé, à quelques clics

Créez un compte, récupérez les identifiants de votre broker et connectez votre premier appareil — aucun serveur à installer, mettre à jour ou dimensionner.