Quand et pourquoi utiliser le protocole MQTT?

34

Je développe un appareil qui mesure la température, l'humidité et la masse. Actuellement, il utilise HTTPS pour télécharger des données sur un serveur distant. Maintenant, je sais qu’il existe un protocole appelé MQTT qui est censé être le "protocole de l’Internet des objets".

Dans quel cas et pourquoi devrais-je passer de HTTPS à MQTT?

Bence Kaulics
la source

Réponses:

32

MQTT est un "messager" entre périphériques:

  • votre appareil mesure au temps T une température de X degrés
  • il se connecte (lui-même ou via le hub zwave) au courtier MQTT
  • il crée un message avec le sujet /domotics/myplace/mydevice/temperature
  • dans le message qu'il met juste X(comme "charge utile")

Ailleurs dans votre maison:

  • votre Raspberry Pi est connecté au courtier MQTT (il peut s'agir de l'instance MQTT elle-même)
  • il s'abonne à la rubrique /domotics/+/+/temperaturepour recevoir TOUTES les informations de température de tous les périphériques utilisant ce format de rubrique. Consultez la spécification MQTT pour plus d'informations sur les caractères génériques de rubrique MQTT ( +et #).
  • il recevra un message avec la charge utile Xet fera tout ce qu'il voudra!

Ailleurs dans votre maison:

  • votre ordinateur est connecté au courtier MQTT et s'abonne à la rubrique /domotics/myplace/mydevice/#pour obtenir TOUTES les informations de votre appareil et les consigner
  • il recevra un message avec la charge utile Xet fera tout ce qu'il voudra!

MQTT est très utile pour éviter de placer des services Web et des sockets tout autour de vos serveurs. Node-RED utilise MQTT et Domoticz peut être configuré pour recevoir inet définir des outsignaux.

J'utilise personnellement MQTT chez moi pour éteindre des ordinateurs: /house/computers/mycomputercharge utile:0

Goufalite
la source
Bon point que je n'ai pas à m'embêter avec les sockets et autres services Web.
Bence Kaulics
Pouvez-vous commenter les aspects de sécurité? Le trafic est-il du texte en clair?
Mawg
1
Une autre réponse indique que MQTT prend en charge TLS; iot.stackexchange.com/a/69/39
Goufalite
20

Le protocole de transport de télémesure MQ, appelé MQTT, est conçu pour les périphériques fonctionnant à faible consommation d'énergie et à faible bande passante. C'est un protocole de messagerie publication / abonnement allégé qui permet à tout autre appareil de s'abonner à un sujet particulier.

HTTP / HTTPS est conçu comme un protocole de requête-réponse pour l'informatique client-serveur, qui ne se préoccupe jamais de la consommation d'énergie et qui nécessite beaucoup de données.

Utilisez MQTT si:

  • Le périphérique que vous utilisez fonctionne sur une cellule de batterie et vous ne souhaitez pas le remplacer tous les x jours (MQTT est optimisé pour une utilisation de la batterie, contrairement à HTTP / S).
  • Besoin d'une réponse plus rapide
  • Besoin d'avoir un mécanisme pub / sous (Si vous voulez envoyer des messages à plusieurs clients)
  • Besoin d'envoyer des données de manière fiable avec différents niveaux de QoS

MQTT offre-t-il autant de sécurité que HTTPS?

MQTT s'appuie sur TCP comme protocole de transport, ce qui signifie que par défaut, la connexion n'utilise pas de communication cryptée. Pour chiffrer la totalité de la communication MQTT, la plupart des courtiers MQTT, tels que HiveMQ, autorisent l’utilisation du protocole TLS au lieu du protocole TCP simple.

Ref: HiveMQ

bravokeyl
la source
1
MQTT offre-t-il autant de sécurité que HTTPS?
Bence Kaulics
2
Il pourrait utiliser SSL / TLS, il devrait donc être aussi sécurisé que HTTPS.
Ghanima
1
Exactement comme @Ghanima a dit, j'ai mis à jour la réponse avec l'article de référence pour vérifier qui parle de la sécurisation de MQTT.
bravokeyl
11

MQTT (transport de télémesure de file d'attente de messages) semble bien convenir à l'application proposée.

Il est léger à la fois en ce qui concerne la bande passante (la plus petite taille de paquet avec un en-tête de seulement 2 octets) et l’empreinte au code client (lui permettant de s’exécuter sur des clients légers comme l’ESP8266, client IoT typique). La réduction des données transmises est bénéfique pour prolonger la durée de vie de la batterie pour les clients hors réseau alimentés par batterie, tels que les capteurs.

MQTT propose également des méthodes simples ( verbes ) qui conviennent parfaitement aux tâches IoT, telles que les abonnements durables qui restaurent les connexions après des déconnexions inattendues de clients. Comparé à HTTP / HTTPS, il est également plus simple d’extraire des données du paquet (aucun analyseur n’est nécessaire).

Ghanima
la source
5

Ici, j’ai écrit un article qui montre l’évolution du système de communication de notre projet. Il s’agit de micro-services, mais vous pouvez considérer n’importe quel capteur comme un micro-service chargé de collecter et de publier tout type de données de télémétrie.

Donc, la conclusion la plus importante est qu'il est préférable d'utiliser MQTT quand vous avez juste besoin d'envoyer l'événement quelque part et que vous ne savez rien du destinataire. Et il est de loin préférable d'utiliser HTTP (généralement REST) ​​lorsque vous savez quelque chose sur le destinataire et avez besoin d'une réponse - par exemple, en cas de commande.

Du point de vue du trafic, du processeur, de la mémoire et des perspectives de consommation d’énergie, MQTT et HTTP sont fondamentalement les mêmes.

shal
la source
2

En ce qui concerne votre devis, MQTT est le "protocole de l'Internet des objets":

Oui, beaucoup de développeurs utilisent ce protocole (voir Enquête IoT auprès des développeurs 2018), mais CoAP (ajusté pour HTTP pour l'IoT, basé sur UDP) offre une alternative à HTTP si vous souhaitez utiliser une fonctionnalité légère de demande / réponse dans ton application.

MQTT , d’autre part, fournit une logique intégrée de publication / abonnement, ce qui en fait un excellent moyen de mise à l’échelle (vous pouvez utiliser davantage de passerelles pour un plus grand nombre de périphériques). Il existe également une alternative UDP (telle que CoAP à HTTP) appelée MQTT-SN (MQTT pour les réseaux de capteurs). Cela fournit même un temps système plus petit que CoAP, mais n'utilise pas de R / R.

Pepe Bellin
la source