Pour intégrer un senseur Yoctopuce à une application, on peut utiliser nos librairies et communiquer directement avec le module Yoctopuce. C'est la méthode la plus efficace et qui offre le plus de possibilités, mais pour cela il faut avoir un minimum de connaissances en programmation. L'autre solution est d'utiliser un protocole standard et des applications qui supportent ce protocole. MQTT est l'un de ces protocol dont nous venons d'ajouter le support MQTT dans le VirtualHub et dans les YoctoHubs.
MQTT est un vieux protocole qui a été développé par IBM qui est ensuite passé en Open source. Ce protocole a été très peu utilisé, seuls quelques produits IBM et ZigBee l'on utilisé, mais depuis quelques années il revient sur le devant de la scène.
Selon Google Trends, MQTT est resté en sommeil pendant plus de 10 ans.
Pourquoi donc s'intéresser à ce protocole maintenant ? Tout simplement car ce protocole a été pensé dès le départ pour être utilisé sur des machines avec des ressources limitées. Contrairement aux protocoles HTML, XML, qui sont très verbeux et compliqués à parser, MQTT est un protocole binaire très simple à formater et parser. Avec l'arrivée en masse de l'internet des objets de plus en plus d'application se sont mises à utiliser MQTT.
MQTT est un protocole de publication de message et de souscription de message. Les clients ne communiquent pas directement entre eux, ils publient des messages sur un serveur (broker), les messages sont composés d'un contenu et d'un sujet (topic). Le serveur garde en mémoire le dernier message pour chaque sujet. Les clients qui sont intéressés par les messages d'un sujet peuvent les récupérer en se connectant au serveur. L'avantage de cette solution est qu'elle permet à plusieurs clients de communiquer même s'ils ne sont jamais connectés en même temps au serveur.
Petit exemple
Pour illustrer l'utilisation de ce protocole, nous avons réalisé une petite installation qui permet d'afficher la température d'un Yocto-Meteo sur un téléphone Android. Le Yocto-Meteo est branché sur un YoctoHub-Wireless-g qui est alimenté par une batterie. Pour ne pas vider la batterie en une journée, le YoctoHub-Wireless-g se réveille 4 fois par jour le temps de faire une mesure, la poster sur le broker MQTT et de se rendormir.
La première étape est de trouver un broker MQTT. On peut soit utiliser un service payant sur internet ou simplement installer un broker MQTT sur une machine. Nous avons utilisé mosquitto, un broker open source qui fonctionne sur tous les OS. Installer mosquitto sur un Raspberry Pi est très simple, il suffit d’exécuter la commande suivante:
$ sudo apt-get install mosquitto
Par défaut, le serveur est lancé automatiquement lors du démarage de l'OS, il n'y a donc rien d'autre à faire sur le Raspberry Pi.
Il faut ensuite configurer le YoctoHub-Wireless-g pour qu'il se connecte sur le broker. La page de configuration du callback MQTT se trouve dans la page de configuration du YoctoHub-Wireless-g. On remplit l'IP du serveur, le port , les éventuelles informations d’authentifications, et le tour est joué.
La page de configuration du callback MQTT.
Une fois la configuration sauvée, le YoctoHub se connecte au broker MQTT et poste un message pour chaque fonction des modules Yoctopuce connectés. Le sujet du message MQTT est le hardwareId de la fonction ou son friendlyName si un nom logique a été défini. Le contenu du message est la représentation texte de la valeur courante.
Notre Yocto-Meteo avec le numéro de série METEOMK1-2DED6 a trois fonctions: temperature, humidity et pressure. Normalement le YoctoHub publie trois messages. Le sujet de ces messages est respectivement METEOMK1-2DED6/temperature, METEOMK1-2DED6/humidity et METEOMK1-2DED6/pressure. Mais, dans notre cas, nous avons attribué un nom logique "jardin" au Yocto-Meteo, le sujet des message est donc jardin/temperature, jardin/humidity et jardin/pressure.
Il ne nous reste plus qu'à installer un client MQTT pour Android. Il en existe plusieurs et certains sont même en Open Source. Pour cet exemple nous avons utilisé MQTT Dashboard, qui est gratuit, fonctionne bien et n'est pas rempli de banners de pub. Là aussi, il faut entrer les informations de connexion au broker. Il faut ensuite souscrire aux messages qui nous intéressent. Pour cet exemple, nous nous sommes intéressés uniquement à la température. Il suffit donc de souscrire aux messages sur le sujet jardin/temperature
Et voilà la température directement sur notre téléphone...
Oui mais...
Il y a cependant un problème avec MQTT: la sécurité. Le protocole permet bien d’authentifier un client à l'aide un login et d'un mot de passe, mais ces informations sont transmises en clair lors de la connexion. Ce qui rend ce protocole très vulnérable aux attaques "man-in-the-middle". Si vous utilisez votre installation sur votre réseau local sécurisé, ce n'est pas un problème mais si vous utilisez votre broker sur un réseau publique il est très facile de se faire passer pour un client existant.
Conclusion
MQTT est probablement arrivé bien trop tôt: en 1999 son intérêt était presque nul. Mais en 2016, avec de plus en plus d'objets connectés, ce protocole prend tout son sens, car il fonctionne très bien même avec une connectivité limitée et des ressources limitées. De plus, il existe de nombreux utilitaires qui sont compatibles avec ce protocole. C'est une solution très pratique pour autant que votre réseau soit sécurisé...