Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
raspberrypi:linux:mqtt_mosquitto [2022/08/01 18:34] – [4.1 Authentification] phil | raspberrypi:linux:mqtt_mosquitto [2024/05/21 19:34] (Version actuelle) – [6.2.3 Test de Websocket] phil |
---|
===== Raspberry Pi - Installer un broker (serveur) MQTT Mosquitto ===== | ===== Raspberry Pi - Installer un broker (serveur) MQTT Mosquitto ===== |
| |
[Mise à jour le 1/8/2022] <html><span style="color:red">En cours de rédaction</span></html> | [Mise à jour le 21/5/2024] <html><span style="color:red">En cours de rédaction</span></html> |
| |
{{ :raspberrypi:linux:mosquittoraspi.jpg?nolink&250|}} | {{ :raspberrypi:linux:mosquittoraspi.jpg?nolink&250|}} |
| |
* **Lectures connexes** | * **Lectures connexes** |
* [[arduino:clientmqttesp8266|Wiki Arduino - Mettre en œuvre un client MQTT sur un EP8266 (ESP32) Feather Huzzah, MKR1010 ou Arduino Uno Wifi 2]] | * [[microc:iot:clientmqttesp8266|Wiki Arduino - Mettre en œuvre un client MQTT sur un EP8266 (ESP32) Feather Huzzah, MKR1010 ou Arduino Uno Wifi 2]] |
* [[reseaux:outils:mqttlens|Wiki Réseau - Tester un broker Mosquitto avec MQTTlens]] | * [[reseaux:outils:mqttlens|Wiki Réseau - Tester un broker Mosquitto avec MQTTlens]] |
* [[raspberrypi:linux:nodered|Wiki Raspberry Pi sous Linux - Créer un flux de données et une interface utilisateur avec Node-RED]] | * [[raspberrypi:linux:nodered|Wiki Raspberry Pi sous Linux - Créer un flux de données et une interface utilisateur avec Node-RED]] |
* [[web:eclipsepaho|Wiki Web - Créer un client MQTT (Websockets) avec Eclipse Paho]] | * [[web:eclipsepaho|Wiki Web - Créer un client MQTT (Websockets) avec Eclipse Paho]] |
* [[raspberrypi:linux:influxdb_NR|Wiki Raspberry Pi sous Linux - Sauvegarder ses données dans une base TSDB (InfluxdB)]] | * [[raspberrypi:linux:influxdb_NR|Wiki Raspberry Pi sous Linux - Sauvegarder ses données dans une base TSDB (InfluxdB) A venir]] |
| |
* **Mots-clés** | * **Mots-clés** |
**client**((Dans un réseau informatique, un client est le **logiciel** qui envoie des demandes à un serveur.)), **serveur** ((Un serveur informatique est un dispositif informatique (matériel ou logiciel) qui **offre des services**, à un ou plusieurs clients.)), **broker MQTT**((Serveur ou **courtier** des messages. Il se charge de les aiguiller vers les différents clients qui se sont abonnés.)), **subscriber**((**Abonné** à un ou plusieurs topics.)), **publisher**((**Editeur** de messages.)), **topic MQTT**((**Sujet ou canal d'information**. Dans MQTT, le mot topic fait référence à une chaîne UTF-8 que le courtier utilise pour filtrer les messages des clients.)), **payload**((Les messages possèdent un payload, c'est à dire, une propriété contenant les informations les plus utiles.))(charge utile), **joker**((**Caractère générique** utilisé dans le mécanisme de filtrage des messages.)), sécurité, **QoS**((La qualité de service (QDS) ou **quality of service** (QoS) est la capacité à véhiculer dans de bonnes conditions un type de trafic donné.)). | **client**((Dans un réseau informatique, un client est le **logiciel** qui envoie des demandes à un serveur.)), **serveur** ((Un serveur informatique est un dispositif informatique (matériel ou logiciel) qui **offre des services**, à un ou plusieurs clients.)), **broker MQTT**((Serveur ou **courtier** des messages. Il se charge de les aiguiller vers les différents clients qui se sont abonnés.)), **subscriber**((**Abonné** à un ou plusieurs topics.)), **publisher**((**Editeur** de messages.)), **topic MQTT**((**Sujet ou canal d'information**. Dans MQTT, le mot topic fait référence à une chaîne UTF-8 que le courtier utilise pour filtrer les messages des clients.)), **payload**((Les messages possèdent un payload, c'est à dire, une propriété contenant les informations les plus utiles.))(charge utile), **joker**((**Caractère générique** utilisé dans le mécanisme de filtrage des messages.)), sécurité, **QoS**((La qualité de service (QDS) ou **quality of service** (QoS) est la capacité à véhiculer dans de bonnes conditions un type de trafic donné.)). |
| |
| \\ |
| |
| |
===== 1. MQTT (généralités) ===== | ===== 1. MQTT (généralités) ===== |
* Permet une **forte fiabilité** si nécessaire, | * Permet une **forte fiabilité** si nécessaire, |
* Nécessite **peu de ressources** processeurs et de mémoires. | * Nécessite **peu de ressources** processeurs et de mémoires. |
| |
| \\ |
| |
==== 1.1 Historique ==== | ==== 1.1 Historique ==== |
Le protocole MQTT (MQ Telemetry Transport) trouve ses origines en 1999 dans les travaux de **Andy Standford-Clark** et **Arlen Nipper**, alors qu'ils travaillaient pour IBM au développement d'un protocole pour une utilisation industrielle de télémétrie en lien avec l'industrie pétrolière. | Le protocole MQTT (MQ Telemetry Transport) trouve ses origines en 1999 dans les travaux de **Andy Standford-Clark** et **Arlen Nipper**, alors qu'ils travaillaient pour IBM au développement d'un protocole pour une utilisation industrielle de télémétrie en lien avec l'industrie pétrolière. |
| |
| \\ |
| |
==== 1.2 Principes ==== | ==== 1.2 Principes ==== |
{{ :raspberrypi:linux:qos-2.png?nolink&350 |}} | {{ :raspberrypi:linux:qos-2.png?nolink&350 |}} |
<callout type="primary" icon="true">La plupart des courtiers MQTT commerciaux ne prennent pas en charge le niveau de QoS 2 car il est lent et consomme plus de ressources.</callout> | <callout type="primary" icon="true">La plupart des courtiers MQTT commerciaux ne prennent pas en charge le niveau de QoS 2 car il est lent et consomme plus de ressources.</callout> |
| |
| \\ |
| |
==== 1.3 Structure d'un paquet MQTT ==== | ==== 1.3 Structure d'un paquet MQTT ==== |
* **Source** : <html><a href="http://www.steves-internet-guide.com/mqtt-protocol-messages-overview/" target="_blank">Comprendre la structure des paquets du protocole MQTT</a></html> | * **Source** : <html><a href="http://www.steves-internet-guide.com/mqtt-protocol-messages-overview/" target="_blank">Comprendre la structure des paquets du protocole MQTT</a></html> |
| |
{{ :raspberrypi:linux:paquetmqtt.jpg?nolink |}} | {{ :raspberrypi:linux:paquetmqtt.jpg?nolink |}} |
| |
| \\ |
| |
| |
| |
===== 2. Le broker Mosquitto ===== | ===== 2. Le broker Mosquitto ===== |
{{ :raspberrypi:linux:mosquitto-text-side-28.png?nolink&200|}} | {{ :raspberrypi:linux:mosquitto-text-side-28.png?nolink&200|}} |
| |
Mosquitto fait partie de la <html><a href="https://www.eclipse.org/" target="_blank">Fondation Eclipse</a></html> et est un projet de <html><a href="https://iot.eclipse.org/" target="_blank">iot.eclipse.org</a></html>. | Mosquitto fait partie de la <html><a href="https://www.eclipse.org/" target="_blank">Fondation Eclipse</a></html> et est un projet de <html><a href="https://iot.eclipse.org/" target="_blank">iot.eclipse.org</a></html>. |
| |
| \\ |
| |
===== 3. Installation et mise en oeuvre basique ===== | ===== 3. Installation et mise en oeuvre basique ===== |
== 3.1.3.2 Test sur le réseau local == | == 3.1.3.2 Test sur le réseau local == |
* **Ressource** : <html><a href="https://mosquitto.org/man/mosquitto-conf-5.html" target="_blank">Page de manuel de moustique.conf</a</html> | * **Ressource** : <html><a href="https://mosquitto.org/man/mosquitto-conf-5.html" target="_blank">Page de manuel de moustique.conf</a</html> |
<callout type="warning" icon="true">A partir de la **version 2 de Mosquitto** seule la **connexion sur le réseau local** est acceptée par le broker. \\ Pour effectuer le test précédent entre un courtier situé sur une machine (PC, Raspberry Pi,etc.) et un éditeur/abonné situé sur une autre machine (PC, smartphone, etc.) via un réseau local, il est nécessaire de modifier le fichier de configuration **mosquitto.conf** situé dans **/etc/mosquitto/**. \\ Pour cela : \\ | |
| <callout icon="fa fa-hand-stop-o" color="red" title="STOP">A partir de la **version 2 de Mosquitto** seule la **connexion sur le réseau local** est acceptée par le broker. \\ Pour effectuer le test précédent entre un courtier situé sur une machine (PC, Raspberry Pi,etc.) et un éditeur/abonné situé sur une autre machine (PC, smartphone, etc.) via un réseau local, il est nécessaire de modifier le fichier de configuration **mosquitto.conf** situé dans **/etc/mosquitto/**. \\ Pour cela : \\ |
- Ouvrir le fichier mosquitto.conf \\ | - Ouvrir le fichier mosquitto.conf \\ |
- Ajouter les interfaces à l'aide de l'option **listener** | - Ajouter les interfaces à l'aide de l'option **listener** |
//Exemple// : connexion au broker situé sur un Raspberry Pi, sur l'hôte local et sur le réseau local via les interfaces Ethernet et wifi. | //Exemple// : connexion au broker situé sur un Raspberry Pi, sur l'hôte local et sur le réseau local via les interfaces Ethernet et wifi. |
{{ :raspberrypi:linux:mosquittoconf.png?nolink |}} | {{ :raspberrypi:linux:mosquittoconf.png?nolink |}} |
| |
| // Tests // réalisés entre un RaspBerry pi et un smartphone |
| {{ :raspberrypi:linux:mosquittolan.png?nolink&400 |}} |
| Consulter la page [[reseaux:outils:mymqtt|Wiki Réseau - Test d'un broker Mosquitto avec MyMQTT (Android App)]] pour la mise en oeuvre du test. |
| |
| \\ |
| |
==== 3.2. Sous Windows ==== | ==== 3.2. Sous Windows ==== |
Voir ce <html><a href="http://www.steves-internet-guide.com/install-mosquitto-broker/" target="_blank">lien</a></html> pour installer le broker Mosquitto sous Windows, | Voir ce <html><a href="http://www.steves-internet-guide.com/install-mosquitto-broker/" target="_blank">lien</a></html> pour installer le broker Mosquitto sous Windows, |
| |
| \\ |
| |
==== 3.3 Sur un NAS Synology ==== | ==== 3.3 Sur un NAS Synology ==== |
{{ :raspberrypi:linux:synologyico.jpg?nolink&80|}} | {{ :raspberrypi:linux:synologyico.jpg?nolink&80|}} |
* **Source** : <html><a href="https://projetsdiy.fr/installer-mosquitto-nas-synology-fonctionnant-dsm-6-2-docker/" target="_blank">Installer le broker MQTT Mosquitto sur NAS Synology (DSM 6.2+) avec Docker</a></html> | * **Source** : <html><a href="https://www.lesalexiens.fr/actualites/tutoriel-installer-mosquitto-mqtt-sur-nas-synology/" target="_blank">Installer le broker MQTT Mosquitto sur NAS Synology (DSM 6.2+) avec Docker</a></html> |
| |
Le fichier mosquitto.conf se situe dans le dossier **/usr/local/mosquitto/var**. Se connecter en **ssh**. Ouvrir **mosquitto.conf** avec nano et le compléter comme ci-dessous : | Le fichier mosquitto.conf se situe dans le dossier **/usr/local/mosquitto/var**. Se connecter en **ssh**. Ouvrir **mosquitto.conf** avec nano et le compléter comme ci-dessous : |
listener 9001 # A ajouter | listener 9001 # A ajouter |
</code> | </code> |
| |
| \\ |
| |
| |
==== 4.1 Authentification ==== | ==== 4.1 Authentification ==== |
{{ :raspberrypi:linux:security-mqtt.jpg?300|}} | {{ :raspberrypi:linux:security-mqtt.jpg?300|}} |
Ce paragraphe illustre la mise en sécurité de l'installation étudiée dans la partie "Découverte" de la page [[arduino:clientmqttesp8266|Mise en oeuvre d'un client MQTT sur un ESP8266 feather Huzzah]]. | Ce paragraphe illustre la mise en sécurité de l'installation étudiée dans la partie "Découverte" de la page [[microc:iot:clientmqttesp8266|Mise en oeuvre d'un client MQTT sur un ESP8266 feather Huzzah]]. |
La mise en sécurité de cette installation passe par la mise en place d'une authentification. Les clients MQTT doivent s'authentifier avec un **identifiant / mot de passe**. La mise en place de cette authentification doit se faire côté Mosquitto (traitée ci-dessous) et côté client (voir [[arduino:clientmqttesp8266|Mise en oeuvre d'un client MQTT sur un ESP8266 feather Huzzah]]) | La mise en sécurité de cette installation passe par la mise en place d'une authentification. Les clients MQTT doivent s'authentifier avec un **identifiant / mot de passe**. La mise en place de cette authentification doit se faire côté Mosquitto (traitée ci-dessous) et côté client (voir [[microc:iot:clientmqttesp8266|Mise en oeuvre d'un client MQTT sur un ESP8266 feather Huzzah]]) |
| |
**Fichier de configuration de Mosquitto** \\ | **Fichier de configuration de Mosquitto** \\ |
{{ :raspberrypi:linux:mosquittosecur.png?nolink&500 |}} | {{ :raspberrypi:linux:mosquittosecur.png?nolink&500 |}} |
| |
| \\ |
| |
==== 4.2 Chiffrage de la connexion ==== | ==== 4.2 Chiffrage de la connexion ==== |
<html><span style="color:red">A faire</span></html> | <html><span style="color:red">A faire</span></html> |
| |
| \\ |
| |
===== 5 QoS ===== | ===== 5 QoS ===== |
<callout type="primary" icon="true">Mosquitto implémente les trois qualités de service.</callout> | <callout type="primary" icon="true">Mosquitto implémente les trois qualités de service.</callout> |
| |
| \\ |
| |
===== 6. MQTT sur WebSockets avec Mosquitto ===== | ===== 6. MQTT sur WebSockets avec Mosquitto ===== |
| |
Le navigateur Web peut devenir l'INTERFACE pour afficher les données MQTT. Le support JavaScript de MQTT Websocket pour les navigateurs Web est fourni par le **client JavaScript**. | Le navigateur Web peut devenir l'INTERFACE pour afficher les données MQTT. Le support JavaScript de MQTT Websocket pour les navigateurs Web est fourni par le **client JavaScript**. |
| |
| \\ |
| |
==== 6.2 MQTT sur Websockets vs MQTT. ==== | ==== 6.2 MQTT sur Websockets vs MQTT. ==== |
{{ :web:eclipse_paho_logo.png?nolink&100|}} | {{ :web:eclipse_paho_logo.png?nolink&100|}} |
Pour tester les websockets, nous avons besoin d'un client prenant en charge les websockets. Nous utiliserons le **client Javascript Paho** décrit sur la page [[web:eclipsepaho|Créer un client MQTT avec Eclipse Paho]]. | Pour tester les websockets, nous avons besoin d'un client prenant en charge les websockets. Nous utiliserons le **client Javascript Paho** décrit sur la page [[web:eclipsepaho|Créer un client MQTT avec Eclipse Paho]]. |
| |
| \\ |
| |
===== 7. Outils ===== | ===== 7. Outils ===== |
* Enregistrement des messages | * Enregistrement des messages |
| |
==== 7.2 MQTTlens ==== | Consulter la page [[reseaux:outils:mymqtt|Wiki Réseau - Test d'un broker Mosquitto avec MyMQTT (Android App)]] pour sa mise en oeuvre. |
| |
| ==== 7.2 MQTTlens : un client pour navigateur ==== |
{{ :raspberrypi:linux:mqttlensico.png?nolink|}} | {{ :raspberrypi:linux:mqttlensico.png?nolink|}} |
MQTTlens est une application Google Chrome, qui se connecte à un courtier MQTT et peut s'abonner et publier sur des sujets MQTT. | MQTTlens est une application Google Chrome, qui se connecte à un courtier MQTT et peut s'abonner et publier sur des sujets MQTT. |