Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
raspberrypi:linux:mqtt_mosquitto [2024/07/09 07:10] – [Raspberry Pi - Installer un broker (serveur) MQTT Mosquitto] phil | raspberrypi:linux:mqtt_mosquitto [2024/07/09 08:31] (Version actuelle) – [2.4.1 MyMQTT : un client pour Androïd] phil | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
[[raspberrypi: | [[raspberrypi: | ||
- | ===== Raspberry Pi - Installer un broker (serveur) MQTT Mosquitto ===== | + | ====== Raspberry Pi - Installer un broker (serveur) MQTT Mosquitto |
- | [Mise à jour le 9/ | + | [Mise à jour le 9/7/2024] |
{{ : | {{ : | ||
Ligne 28: | Ligne 28: | ||
- | ===== 1. MQTT (généralités) ===== | + | ====== 1. MQTT (généralités) |
Pour répondre à la problématique du nombre grandissant d’objets connectés qui vont faire leur apparition sur la toile (selon une étude Gartner : près de 26 milliards d’objets connectés seront sur Internet d’ici 2020), l’IoT (Internet Of Things), s’est doté d’un nouveau standard : **MQTT** (**M**essage **Q**ueuing **T**elemetry **T**ransport). | Pour répondre à la problématique du nombre grandissant d’objets connectés qui vont faire leur apparition sur la toile (selon une étude Gartner : près de 26 milliards d’objets connectés seront sur Internet d’ici 2020), l’IoT (Internet Of Things), s’est doté d’un nouveau standard : **MQTT** (**M**essage **Q**ueuing **T**elemetry **T**ransport). | ||
Ligne 44: | Ligne 44: | ||
\\ | \\ | ||
- | ==== 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' | 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' | ||
\\ | \\ | ||
- | ==== 1.2 Principes ==== | + | ===== 1.2 Principes |
- | === 1.2.1 Organisation et communication === | + | ==== 1.2.1 Organisation et communication |
<callout type=" | <callout type=" | ||
Ligne 68: | Ligne 68: | ||
{{ : | {{ : | ||
- | === 1.2.2 Les topics === | + | \\ |
- | <callout type=" | + | |
+ | ==== 1.2.2 Les topics | ||
+ | <callout type=" | ||
__Exemple__ \\ | __Exemple__ \\ | ||
Ligne 79: | Ligne 81: | ||
<callout type=" | <callout type=" | ||
- | **Le caractère joker +** \\ | + | __**Le caractère joker +**__ \\ |
**+** est le joker pour un **unique niveau hiérarchique**. Un client souscrivant à " | **+** est le joker pour un **unique niveau hiérarchique**. Un client souscrivant à " | ||
Ligne 89: | Ligne 91: | ||
* " | * " | ||
- | * " | + | * " |
- | **Le caractère joker #** \\ | + | __**Le caractère joker #**__ \\ |
Le **#** est un joker **multiniveau** s' | Le **#** est un joker **multiniveau** s' | ||
Ligne 103: | Ligne 105: | ||
* " | * " | ||
- | **Le caractère joker $** \\ | + | __**Le caractère joker $**__ \\ |
Le joker **$** ne peut pas être utilisé pour publier. Il précède les topics concernant les **statistiques** internes du broker. Son utilisation est illustrée au paragraphe [[#Le broker Mosquitto|Le broker Mosquitto]]. | Le joker **$** ne peut pas être utilisé pour publier. Il précède les topics concernant les **statistiques** internes du broker. Son utilisation est illustrée au paragraphe [[#Le broker Mosquitto|Le broker Mosquitto]]. | ||
- | <callout type="warning" icon=" | + | <callout type="info" icon=" |
- | === 1.2.3 Sécurité === | + | \\ |
+ | |||
+ | ==== 1.2.3 Sécurité | ||
Les données IoT échangées peuvent s’avérer très critiques, c’est pourquoi il est possible de sécuriser les échanges à plusieurs niveaux : | Les données IoT échangées peuvent s’avérer très critiques, c’est pourquoi il est possible de sécuriser les échanges à plusieurs niveaux : | ||
* Transport en SSL/TLS, | * Transport en SSL/TLS, | ||
Ligne 114: | Ligne 118: | ||
* Authentification par login/mot de passe. | * Authentification par login/mot de passe. | ||
- | === 1.2.4 Qualité de service (QoS) === | + | \\ |
+ | |||
+ | ==== 1.2.4 Qualité de service (QoS) ==== | ||
MQTT intègre en natif la notion de QoS. En effet, le publisher à la possibilité de définir la qualité de son message. | MQTT intègre en natif la notion de QoS. En effet, le publisher à la possibilité de définir la qualité de son message. | ||
Ligne 140: | Ligne 146: | ||
\\ | \\ | ||
- | ==== 1.3 Structure d'un paquet MQTT ==== | + | ===== 1.3 Structure d'un paquet MQTT ===== |
* **Source** : < | * **Source** : < | ||
- | Le format de paquet ou de message MQTT se compose d'un en- tête fixe de 2 octets (toujours présent) + en -tête | + | Le format de paquet ou de message MQTT se compose d'un en-tête fixe de 2 octets (toujours présent) + en-tête variable (pas toujours présent) + charge utile (pas toujours présent). |
{{ : | {{ : | ||
Ligne 149: | Ligne 155: | ||
\\ | \\ | ||
- | + | ====== 2. Le broker Mosquitto | |
- | + | ||
- | ===== 2. Le broker Mosquitto ===== | + | |
{{ : | {{ : | ||
- | Eclipse Mosquitto est un **courtier de messages** (**broker**) open source (sous licence EPL / EDL) qui implémente les versions 3.1 et 3.1.1 du protocole MQTT. Mosquitto est léger et convient à une utilisation sur tous les appareils, des ordinateurs monocarte basse consommation aux serveurs complets. | + | Eclipse Mosquitto est un **courtier de messages** (**broker**) open source (sous licence EPL / EDL) qui implémente les versions |
Le protocole MQTT fournit une méthode légère pour effectuer la messagerie en utilisant un modèle de publication / abonnement. Cela le rend approprié pour la **messagerie Internet of Things**, par exemple avec des capteurs de faible puissance ou des appareils mobiles tels que des téléphones, | Le protocole MQTT fournit une méthode légère pour effectuer la messagerie en utilisant un modèle de publication / abonnement. Cela le rend approprié pour la **messagerie Internet of Things**, par exemple avec des capteurs de faible puissance ou des appareils mobiles tels que des téléphones, | ||
Ligne 163: | Ligne 167: | ||
\\ | \\ | ||
- | ===== 3. Installation et mise en oeuvre sur le réseau local ===== | + | ===== 2.1 Installation et mise en oeuvre sur le réseau local ===== |
- | ==== 3.1 Sur un Raspberry Pi ==== | + | ==== 2.1.1 Sur un Raspberry Pi ==== |
- | === 3.1.1 Installation === | + | === 2.1.1.1 Installation === |
- | * **Mise à jour** | + | * **Mise à jour de l'OS** |
<code bash *.bash> | <code bash *.bash> | ||
sudo apt update && sudo apt upgrade -y | sudo apt update && sudo apt upgrade -y | ||
Ligne 206: | Ligne 210: | ||
|" | |" | ||
- | === 3.1.2 Arrêt, démarrage, redémarrage === | + | === 2.1.1.2 Arrêt, démarrage, redémarrage === |
<callout type=" | <callout type=" | ||
Ligne 215: | Ligne 219: | ||
</ | </ | ||
- | === 3.1.3 Tests === | + | === 2.1.1.3 Tests === |
<callout type=" | <callout type=" | ||
- | == 3.1.3.1 Test sur le RaspBerry Pi (localhost) == | + | == 2.1.1.3.1 Test sur le RaspBerry Pi (localhost) == |
Pour tester le bon fonctionnement du broker, nous allons publier le message (payload) "// | Pour tester le bon fonctionnement du broker, nous allons publier le message (payload) "// | ||
Ligne 241: | Ligne 245: | ||
\\ | \\ | ||
- | == 3.1.3.2 Tests sur le réseau local == | + | == 2.1.1.3.2 Tests sur le réseau local == |
* **Ressource** : < | * **Ressource** : < | ||
- | <callout icon=" | + | <callout icon=" |
- | - d' | + | - d' |
- d' | - d' | ||
</ | </ | ||
- | * **Utilisateurs | + | * **Autoriser les utilisateurs |
- | <code bash *.bash> | + | Le fichier mosquitto.conf |
- | # Ouvrir le fichier mosquitto.conf | + | |
- | sudo nano / | + | |
- | </ | + | |
- | //Exemple// : connexion au broker situé sur un Raspberry Pi, sur l' | ||
<code bash *.bash> | <code bash *.bash> | ||
# Place your local configuration in / | # Place your local configuration in / | ||
Ligne 269: | Ligne 269: | ||
log_dest file / | log_dest file / | ||
- | include_dir / | + | include_dir / |
+ | </ | ||
- | allow_anonymous | + | <callout type=" |
- | listener 1883 # A ajouter | + | <code bash *.bash> |
+ | # Exemple | ||
+ | # Créer/ | ||
+ | sudo nano / | ||
+ | </ | ||
+ | Ajouter les lignes ci-dessous dans mon_mosquitto.conf | ||
+ | |||
+ | <code bash *.bash> | ||
+ | allow_anonymous true # A modifier : false -> true | ||
+ | listener 1883 | ||
</ | </ | ||
- | <callout type=" | + | <callout type=" |
// Tests // réalisés entre un RaspBerry pi et un smartphone | // Tests // réalisés entre un RaspBerry pi et un smartphone | ||
Ligne 283: | Ligne 293: | ||
Consulter la page [[reseaux: | Consulter la page [[reseaux: | ||
+ | * **Autoriser des utilisateurs authentifiés** | ||
<callout type=" | <callout type=" | ||
\\ | \\ | ||
- | ==== 3.2. Sous Windows ==== | + | ==== 2.1.2. Sous Windows ==== |
Voir ce < | Voir ce < | ||
\\ | \\ | ||
- | ==== 3.3 Sur un NAS Synology ==== | + | ==== 2.1.3 Sur un NAS Synology ==== |
{{ : | {{ : | ||
* **Source** : < | * **Source** : < | ||
Ligne 313: | Ligne 324: | ||
\\ | \\ | ||
- | + | ===== 2.2 Sécurité ===== | |
- | + | ||
- | ===== 4 Sécurité ===== | + | |
<callout type=" | <callout type=" | ||
- | ==== 4.1 Authentification ==== | + | ==== 2.2.1 Authentification ==== |
{{ : | {{ : | ||
Ce paragraphe illustre la mise en sécurité de l' | Ce paragraphe illustre la mise en sécurité de l' | ||
Ligne 422: | Ligne 431: | ||
\\ | \\ | ||
- | ==== 4.2 Chiffrage de la connexion ==== | + | ==== 2.2.2 Chiffrage de la connexion ==== |
< | < | ||
\\ | \\ | ||
- | ===== 5 QoS ===== | + | ==== 2.2.3 QoS ==== |
- | <callout type=" | + | <callout type=" |
\\ | \\ | ||
- | ===== 6. MQTT sur WebSockets avec Mosquitto ===== | + | ===== 2.3. MQTT sur WebSockets avec Mosquitto ===== |
- | ==== 6.1 Pourquoi utiliser MQTT sur Websockets ? ==== | + | ==== 2.3.1 Pourquoi utiliser MQTT sur Websockets ? ==== |
{{ : | {{ : | ||
<callout type=" | <callout type=" | ||
Ligne 442: | Ligne 451: | ||
\\ | \\ | ||
- | ==== 6.2 MQTT sur Websockets vs MQTT. ==== | + | ==== 2.3.2 MQTT sur Websockets vs MQTT. ==== |
- | === 6.2.1 Présentation === | + | === 2.3.2.1 Présentation === |
Dans le cas de MQTT sur Websockets, la connexion websockets constitue un canal externe pour le protocole MQTT. Le courtier MQTT place le paquet MQTT dans un paquet websockets et l' | Dans le cas de MQTT sur Websockets, la connexion websockets constitue un canal externe pour le protocole MQTT. Le courtier MQTT place le paquet MQTT dans un paquet websockets et l' | ||
{{ : | {{ : | ||
Ligne 449: | Ligne 458: | ||
<callout type=" | <callout type=" | ||
- | === 6.2.2 Configuration du fichier mosquitto.conf === | + | === 2.3.2.2 Configuration du fichier mosquitto.conf === |
MQTT sur Websockets utilise généralement le port **9001** mais il n'est pas fixé. | MQTT sur Websockets utilise généralement le port **9001** mais il n'est pas fixé. | ||
Ligne 472: | Ligne 481: | ||
</ | </ | ||
- | === 6.2.3 Test de Websocket === | + | === 2.3.2.3 Test de Websocket === |
{{ : | {{ : | ||
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: | 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: | ||
Ligne 478: | Ligne 487: | ||
\\ | \\ | ||
- | ===== 7. Outils ===== | + | ===== 2.4. Outils ===== |
{{ : | {{ : | ||
- | ==== 7.1 MyMQTT : un client pour Androïd ==== | + | ==== 2.4.1 MyMQTT : un client pour Androïd ==== |
- | En installant un **client pour Androïd** tel que **MyMQTT** | + | En installant un **client pour Androïd** |
* ** Fonctionnalités ** | * ** Fonctionnalités ** | ||
* Connection à un courtier MQTT v3.1 (facultatif avec nom d' | * Connection à un courtier MQTT v3.1 (facultatif avec nom d' | ||
Ligne 491: | Ligne 500: | ||
Consulter la page [[reseaux: | Consulter la page [[reseaux: | ||
- | ==== 7.2 MQTTlens | + | \\ |
+ | |||
+ | ==== 2.4.2 MQTTLens | ||
{{ : | {{ : | ||
MQTTlens est une application Google Chrome, qui se connecte à un courtier MQTT et peut s' | MQTTlens est une application Google Chrome, qui se connecte à un courtier MQTT et peut s' |