Partage
  • Partager sur Facebook
  • Partager sur Twitter

Besoin d'un peu d'aide en MQTT

... parce que là, je ne comprends pas tout

    30 mars 2021 à 16:23:33

    Bonjour,

    J'essaye d'utiliser le MQTT pour un projet IoT de récupération de données d'un capteur. Je veux récupérer des données d'un capteur distant par internet en utilisant le protocole MQTT. Je souhaite tout d'abord tester mon réseau. J'utilise pour cela 2 ordis sous Ubuntu.

     - Le 1er ordi est connecté à Internet via un routeur 4G. Son adresse IP sur le réseau LAN est IP_LAN_Ordi1. Son adresse IP sur internet (récupérée sur whatismyIP) est IP_INT_Ordi1. Cette ordinateur me sert de broker et à recevoir les messages MQTT. J'ai ouvert un bash avec l'instruction: mosquitto_sub -h 127.0.0.1 -t "#"

     - Le 2e ordi est connecté à internet via le partage de connexion de mon téléphone. J'essaye d'envoyer un message avec l'instruction suivante dans le bash: mosquitto_pub -h IP_INT_Ordi1 -t "test" -m "Hello world". Cependant, quand j'envoie cette instruction, je reçois comme réponse "Error: connection refused".

    J'ai ensuite refait le même test en connectant le premier ordi à Internet par l'intermédiaire d'un autre partage de connexion. Dans ce cas, en lançant un message sur l'ordi 2, rien ne se passe jusqu'au Timeout...

    Je précise que j'avais fait un premier test en écoutant et en envoyant mes message sur test.mosquitto.org, et j'ai bien réussi à envoyer et recevoir des messages sans problèmes. Quelqu'un pourrait-il m'aider avec mon problème?

    Merci et bonne journée.

    -
    Edité par matthieurodier 30 mars 2021 à 16:29:32

    • Partager sur Facebook
    • Partager sur Twitter
      31 mars 2021 à 8:16:11

      Je te vois parler de 4G et de partage de connexion internet donc je me permet de poser une question : as tu un forfait permettant d'avoir une IP dédiée et l'ensemble des ports attribués à cette IP ? (ce n'est pas systématiquement le cas)

      Parfois, dans le cas d'une connexion 4G, l'adresse IP internet correspond à l'adresse IP internet du relais de l'opérateur et non à l'adresse IP de ton propre téléphone ou routeur.

      Tous les clients 4G connectés sur ce relais ont la même adresse IP internet et c'est le relais qui se charge de répartir le trafic correctement.

      C'est exactement le même principe que sur le réseau local d'une box internet : tous les ordinateurs connectés sur cette box ont une adresse IP local et partagent la même adresse IP internet : l'adresse IP de la box.

      Lorsque quelqu'un se connecte sur cette adresse IP internet, la connexion arrive sur la box qui va la refuser, sauf si tu as ouvert un port pour spécifier sur quel ordinateur du réseau local il faut rediriger cette connexion.

      Dans le cadre d'une connexion 4G, c'est la même chose : la connexion arrive sur le relais de l'opérateur et celui-ci la refuse car il ne sait absolument pas sur quel téléphone ou autre périphérique la rediriger parmi les centaines de clients connectés.

      Si l'adresse IP t'es dédiée, alors les connexions entrantes sur l'adresse IP internet arrive sur ton routeur 4G et c'est lui qui choisis ou non de les accepter.

      Par défaut, il va les refuser car il ne sait pas sur quel ordinateur rediriger la connexion (même si pour le moment il n'y a qu'un seul ordinateur, il pourrait très bien y avoir 10 ordinateurs connectés sur le réseau de ce routeur, donc impossible de savoir à qui renvoyer la connexion).

      Il va donc falloir que tu aille dans les pages de configuration de ton routeur pour rediriger les ports 1883 et 8883 sur ces même ports avec l'IP local de IP_LAN_Ordi1.

      -
      Edité par lorrio 31 mars 2021 à 8:24:48

      • Partager sur Facebook
      • Partager sur Twitter
        31 mars 2021 à 14:09:17

        Bonjour Iorrio,

        Merci pour la réponse, c'est très clair. Je n'ai pas fait de transfert de ports, non, et je n'ai pas non plus de forfait me permettant d'avoir une adresse IP dédiée. Je sens bien que c'est dans mes adresses IP et les ouvertures/transferts de port qu'il y a un souci. Ce que je ne comprends pas, c'est qu'en utilisant test.mosquitto.org copmme broker, j'arrive sans problème à faire transiter mes messages. Par contre, quand j'utilise un de mes ordinateurs comme broker, là ça ne passe plus.

        Est-ce que cela signifie que quand je me connecte à un broker distant, ce n'est pas le port 1883 qui est utilisé?

        Je vais faire un nouveau test en installant un broker sur un Raspberry connecté à un box internet et en lui attribuant le port 1883, pour voir si j'arrive à faire transiter mes messages.

        Autre question: je conclue de ta dernière phrase que quand j'utilise un téléphone en partage de connexion c'est lui qui fait routeur. J'ai cherché une application pour faire un transfert de port depuis un téléphone Android en partage de connexion (et donc dedier mon port 1883 à mon ordinateur), mais je n'ai rien trouvé. En connais-tu une permettant de faire cela? Cela ne résoudra cependant pas le problème entre mon téléphone et le relais si le problème se trouve là...

        Merci et bonne journée.

        -
        Edité par matthieurodier 31 mars 2021 à 14:09:36

        • Partager sur Facebook
        • Partager sur Twitter
          31 mars 2021 à 17:32:01

          Le brocker correspond au serveur centralisé qui se charge de faire le lien entre les publieurs et les souscripteurs (je ne sais pas si c'est vraiment ces mots là qu'il faut employer mais le principe est là).

          Qu'un client soit publieurs ou souscripteurs, il va se connecter sur le port 1883 de l'IP correspondant à l'IP du broker.

          Il n'y a aucun problème à faire cela car les routeurs, les boxes internet et autres fournisseurs d'accès à internet autorisent toujours les demandes de connexion sortante (je dis bien "sortante" car c'est le client sur le PC à l’intérieur du réseau local qui demande à sortir de ce réseau local pour aller ce connecter à un PC distant).

          En revanche, le problème se pose pour les connexions entrantes car celles-ci sont bloquées par défaut (je dis bien "entrante" dans le cas où un PC extérieur chercherait à rentrer sur le réseau local).

          A noter qu'une fois la connexion établie, le dialogue est opérationnel dans les 2 sens (tu peux envoyer des données à internet et internet peut te répondre), c'est juste l'établissement de la connexion qui ne peut se faire que dans un sens par défaut.

          Si ce brocker se trouve derrière une box ou derrière un routeur, il faut donc ouvrir le port 1883 de la box pour le rediriger sur le port 1883 de l'IP local du brocker car sinon, la connexion sera refusée.

          Dans le cas de test.mosquitto.org, les administrateurs ont du faire le nécessaire pour que cette redirection soit mise en place, ou bien ils ont tout simplement loué un serveur dédié disposant de sa propre IP internet soit passer par un routeur.

          Mais dans ton cas, ta raspebrry-pi et/ou ton PC faisant tourner le brocker n'ont pas d'adresse IP internet publique dédié car ils passent par un routeur 4G ou par une box.

          Du coup, il va te falloir ouvrir ce port 1883 et le rediriger le brocker local pour que cela fonctionne.

          Pour répondre à ta dernière question, je doute fort qu'il soit possible d'ouvrir un port sur une connexion de téléphone portable car ce n'est pas un cas d'utilisation habituel.

          Dans la grande majorité des cas, l'utilisateur demande à consulter une page internet donc c'est le téléphone qui va se connecter au serveur pour lui demander le contenu de la page (connexion sortante du téléphone) et non le serveur qui va de son plein grès chercher à se connecter spontanément au téléphone pour lui envoyer un truc aléatoire (connexion entrante sur le téléphone).

          • Partager sur Facebook
          • Partager sur Twitter

          Besoin d'un peu d'aide en MQTT

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown