====== MQTT avec Mosquitto ====== ===== Vos premiers messages MQTT avec Mosquitto sous Ubuntu ===== Pour échanger vos premiers messages en utilisant le protocole MQTT, vous pouvez installer un serveur aussi appelé courtier de messages (message broker) ainsi que les clients éditeur (publisher) et abonné (subscriber) adéquats en procédant comme suit : - ouvrez un terminal ; - exécutez la commande sudo apt-get install mosquitto pour installer le serveur Mosquitto proposé par la fondation Eclipse ; - exécutez la commande sudo apt-get install mosquitto-clients pour installer les clients mosquitto_pub et mosquitto_sub, respectivements éditeur et abonné ; - exécutez la commande mosquitto_sub -t 'this/is/a/topic' pour créer un client abonné qui va écouter sur la queue de messages passée avec le paramètre t — pour topic, ou thème en français ; - ouvrez un autre terminal ; - exécutez la commande mosquitto_pub -t 'this/is/a/topic' -m 'Hello World!' pour créer un client éditeur qui va publier la chaîne de caractères de votre choix passée avec le paramètre m — pour message ; L’abonné mosquitto_sub qui écoutait sur la queue de message dans le premier terminal devrait avoir reçu et affiché le texte envoyé depuis le second terminal par l’éditeur mosquitto_pub. Lorsque vous aurez fini de jouer avec ces deux clients, vous pourrez stopper l’exécution de l’abonné mosquitto_sub à l’aide d’un simple CTRL+C ou CTRL+Z. Pour écouter tous les "topics" présent sur le Broker il faut lancer la commande :\\ mosquitto_sub -t "#" On voit passer tous les topics mais sans voir desquels il s'agit, on a juste le message. ===== MQTT authentifié ===== Le courtier Mosquitto MQTT peut être configuré pour exiger l'authentification du client à l' aide d'un nom d'utilisateur et d'un mot de passe valides avant qu'une connexion ne soit autorisée.\\ La combinaison nom d'utilisateur et mot de passe est transmise en texte clair et n'est pas sécurisée sans une forme de cryptage de transport . (SSL)\\ Cependant, l'utilisation de l'authentification par nom d'utilisateur et par mot de passe offre un moyen simple de restreindre l'accès à un courtier.\\ Remarque : le nom d'utilisateur utilisé pour l'authentification peut également être utilisé pour restreindre l'accès aux rubriques . Dans ce didacticiel, nous examinons comment configurer les restrictions de nom d'utilisateur et de mot de passe sur le courtier mosquitto, et comment cela fonctionne en examinant quelques exemples de connexion à l'aide de simples scripts de test Python.\\ ==== Configuration du courtier Mosquitto ==== Toutes les formes de restrictions, à savoir l'identifiant du client, le nom d'utilisateur / mot de passe, le sujet, etc. sont implémentées sur le courtier MQTT.\\ Une fois implémenté sur le courtier, il appartient au client de se conformer à ces restrictions afin de se connecter, de s'abonner et de publier.\\ Pour configurer le courtier Mosquitto, vous devrez:\\ * Créer un fichier de mot de passe * Modifiez le fichier mosquitto.conf pour forcer l'utilisation du mot de passe. Pour créer un fichier de mot de passe, vous devez utiliser l' utilitaire mosquitto_passwd fourni avec les outils client lors de l' installation du courtier mosquitto .\\ Il existe plusieurs façons de procéder: \\ === Méthode 1 === Créez un fichier texte simple et entrez le nom d'utilisateur et les mots de passe, un pour chaque ligne, avec le nom d'utilisateur et le mot de passe séparés par deux points comme indiqué ci-dessous.\\ user:mot de passe Maintenant, vous devez convertir le fichier de mot de passe qui crypte les mots de passe, accédez à une ligne de commande et tapez:\\ mosquitto_passwd -U passwordfile Maintenant, si vous ouvrez à nouveau le fichier de mot de passe, vous devriez voir ceci: \\ user:(plein de caractères...) Le fichier de mots de passe est maintenant prêt à être utilisé. === Méthode 2 === Vous créez le fichier de mot de passe à l'aide de la commande mosquitto_passwd -c passwordfile utilisateur Notez que vous devez entrer un nom d'utilisateur pour que cela fonctionne. Cela ajoute l'utilisateur au fichier de mots de passe.\\ Vous serez invité à entrer un mot de passe pour l'utilisateur.\\ Faites attention car le mot de passe n'est pas renvoyé et il ne semble pas avoir été accepté, mais c'est le cas.\\ Vous pouvez maintenant utiliser la commande\\ mosquitto_passwd -b passwordfile mot de passe utilisateur pour ajouter des utilisateurs supplémentaires au fichier. Vous pouvez également supprimer des utilisateurs du fichier de mots de passe à l'aide de la commande\\ mosquitto_passwd -D utilisateur du fichier de mot de passe Remarque importante: Le mosquitto_passwd utilitaire n'a pas fonctionné sur Windows XP, et je devais utiliser l'utilitaire sur mon installation Linux. Cependant, cela fonctionnait sous Windows 7 et 10, mais j'avais besoin d'ajouter le fichier msvcr100.dll . Voir Installation des scripts client Mosquitto Broker \\ === Utilisation du fichier de mot de passe === Vous devrez copier le fichier de mot de passe dans le dossier etc \ mosquitto (linux) ou le dossier mosquitto (windows), puis éditer le fichier mosquiito.conf pour l'utiliser.\\ Les deux modifications que vous effectuez normalement dans le fichier mosquiito.conf consistent à définir allow anonymous sur false et à définir le chemin password_file .\\ == Exemples de paramètres : == /etc/mosquitto/passwd user:$6$lHwLOzxLiPPolGzi$h6..... /etc/mosquitto/conf.d/user allow_anonymous false password_file /etc/mosquitto/passwd Si vous modifiez les fichiers de configuration, y compris le fichier de mot de passe, vous pouvez redémarrer le courtier mosquitto.\\ Cependant, sous Linux, vous pouvez recharger les fichiers de configuration sans redémarrer le courtier en utilisant les éléments suivants:\\ kill-HUP PID # où PID est l'ID de processus comme indiqué ci-dessous: relancer mosquitto ou systemctl restart mosquitto Pour un IOT il faudra mettre l'user et le password au moment de la conexion.\\ ex : \\ // Attempt to connect if (client.connect("ESP8266Client", mqttUser, mqttPassword )) { if (debug ) { Serial.println("connected"); } // Once connected, publish an announcement... client.publish("mod_lum", "hello world"); // ... and resubscribe client.subscribe("#"); ... ... ... Pour vous connecter à un courtier qui implémente des restrictions de nom d'utilisateur / mot de passe, vous devez utiliser la méthode d'assistance username_pw_set () du client Paho.\\ Vous devez l'appeler avant d'établir la connexion .\\ Le format est:\\ username_pw_set (nom d'utilisateur = "roger", mot de passe = "mot de passe") === Détection des erreurs d'authentification === Si vous essayez de vous connecter à un courtier sans les détails d'authentification corrects, la connexion sera rejetée.\\ Pour détecter cela, vous devrez examiner le rappel on_connect .\\ Si vous examinez la documentation de la méthode de rappel on_connect , vous verrez qu'elle accepte 4 paramètres.\\ on_connect (client, données utilisateur, drapeaux, rc): Le paramètre rc est le code de retour et doit être égal à 0 pour une bonne connexion.\\ Un code retour de 5 indique une erreur d'authentification .\\ La méthode de rappel on_connect illustrée ci-dessous imprime simplement le code de retour et ressemble à ceci:\\ def on_connect (client, données utilisateur, drapeaux, rc): print ("Indicateurs connectés", str (indicateurs), "code résultat", str (rc)) [/ contour]