EA2014ProtforIoT: Difference between revisions

From air
Jump to navigation Jump to search
Line 117: Line 117:
<pre>mosquitto-pub -t "votre nom de topic" -m "votre message" #permet de publier un message sur un topic donné</pre>
<pre>mosquitto-pub -t "votre nom de topic" -m "votre message" #permet de publier un message sur un topic donné</pre>
Un petit script en python est également disponible pour publier des données continuellement sur un topic :
Un petit script en python est également disponible pour publier des données continuellement sur un topic :
<pre>
<pre> #!/usr/bin/env python
#!/usr/bin/env python


import random
import random

Revision as of 17:19, 8 October 2014

Présentation

  • Enseignants : Georges-Pierre Bonneau, Didier Donsez (EA2014)
  • Sujet : Protocoles de communications pour l'IoT et le M2M
  • Date : 10 octobre 2014
  • Auteur : Rodolphe Fréby <rodolphe.freby@e.ujf-grenoble.fr>
  • Télécharger les slides de la présentation : A venir

Résumé

L’Internet des objets représente la connexion à internet de la plupart des objets de notre vie courante, du monde réel, tels que des capteurs, des montres, ...


2 milliards. C’est le nombre approximatif de ces objets connectés aujourd’hui (en 2014). Certaines estimations placent ce chiffre à 8 milliards pour 2020, d’autres à beaucoup plus. Il est donc nécessaire de concevoir et standardiser des protocoles pour permettre à ces objets de communiquer entre eux, les anciens protocoles étant trop lourd pour ces petits appareils.

Mots clefs

Protocole, Machine-to-Machine, Internet des Objets, Open-source, MQTT, CoAP, XMPP

Abstract

The Internet of Things (IoT) is the Internet connection of most objects in our everyday life, the real world, such as sensors, watches, ...


2 Billion. this is an approximate number of these connected Devices nowadays (2014). Some estimates put this figure at $ 8 billion for 2020, others much later. It is therefore necessary to develop and standardize the protocols to allow these objects to communicate with each other the old protocols are too heavy for these small devices.

Synthèse

[...]les objets parlent réellement et vous préviennent quand il y a besoin de faire/savoir quelque chose. Par exemple, le frigo détecte un surplus de glace, il vous envoie donc un message pour vous dire quoi faire. 

orange

[...]the Internet of Things—what we view as the latest wave of the Internet -- connecting physical objects in ways that help us analyze and control our environment to provide better safety, comfort, and efficiency.

cisco

Et si demain votre maison était équipée de capteurs de températures, d’humidités dans différentes pièces afin de régler automatiquement le chauffage? Et si ce types de données pouvaient être relevées dans une ville afin de notifier les citoyens à de nombreux sujet? Ces objets, de plus en plus nombreux, renvoie une grande quantité de données au travers des réseaux. Ces appareils ont besoin de protocoles de communication pouvant fonctionner sur des appareils avec une puissance de calcul limitée, et sur des réseaux avec une forte latence.

De nombreux protocoles de communication pour l’Internet des objets existent déjà : MQTT, COaP, XMPP… Chacun d’entre eux possède ces propres particularités. Quand MQTT utilisera le principe de publication et souscription, COaP s’inspirera plutôt du protocole HTTP avec des requêtes de type GET, PUT, …

MQTT

Présentation

Message Queue Telemetry Transport. Il s’agit d’un protocole de communication pour l’internet des objets basés sur le principe de la plublication et souscription. Conçu en 1999 par IBM et Eurotech, il est actuellement dans sa version 3.1. Il a été conçu pour être utilisé comme protocole de communication de machine à machine (M2M : Machine to Machine) par des systèmes avec une puissance limitée sur des réseaux non fiables. il a été récemment proposé à OASIS (Organization for the Advancement of Structured Information Standards) comme standard de communication pour l’Internet des objets. Il a été choisi en 2012 pour être utilisé au sein du logiciel Facebook Messengercomme protocole pour l’envoie de message.

Principe de fonctionnement

Le fonctionnement du protocole MQTT est simple : les objets publient des messages sur des topics.Les clients intéréssés par un ou plusieurs topics en particulier s’inscrivent sur ceux-ci auprès d’un broker. A emission d’un message par un objet sur un topic donné, le broker aura pour tâche d’envoyer le message à tous les clients s’étant inscrits sur le topic en question. Il existe de nombreux broker pour MQTT, l'un d'eux est Mosquitto, un broker open source capable de supporter le protocole TLS.

schéma explicatif du fonctionnement du protocole MQTT

L'image ci-dessus explique le principe de fonctionnement du protocole :

  • Dans un premier temps, des clients s'inscrivent pour différents topics auprès du broker.
  • Une machine décide de publier une information sur un topic donné. Ici, le capteur décide de publier la valeur 25 sur le topic nommé "Temp".
  • La valeur 25 va être envoyée aux machines A et B puisqu'elles ont toutes deux souscrit à ce topic.
  • Nous pouvons imaginer que par la suite, le capteur publie la valeur 10 sur le topic "Humi", dans ce cas, seule la machine B recevra la valeur 10, car elle est la seule à avoir souscrit à ce topic.

MQTT possède plusieurs particularités :

  • Le protocole fonctionne au dessus de TCP/IP
  • La QoS est disponible, avec 3 options différentes, à savoir :
    • At least once : au moins un message arrivera à destination
    • At more once : au plus un message arrivera à destination
    • Exactly once : un et un seul message arrivera à destination
  • Des librairies disponibles dans plusieurs langages : Java, Arduino, C, Android…
  • La possibilité d’utiliser un système d’authentification avec nom d’utilisateur et un mot de passe. De plus, SSL peut être utilisé, mais de manière indépendante du protocole MQTT.

MQTT-SN

Anciennement MQTT-S, MQTT-SN (pour Message Queue Telemetry Transport for Sensor Networks) utilise UDP et non TCP, cela permettant de recevoir les messages dans n’importe quel ordre. Il a été conçu pour être utilisé dans réseaux sans fils de capteurs. L’une des différences entre MQTT et MQTT-SN est la prise en charge des clients se mettant en veille pour le second. Le serveur conserve les messages destinés aux appareils endormis, afin de les communiquer plus tard à leur réveil.

CoAP

Histoire

CoAP (pour Constrained Application Protocol) est un protocole conçu pour la communication dans l'IoT et le M2M, basé sur le principe du protocole HTTP, à savoir le transfert de documents. La standardisation de ce protocole s'est majoritairement faite par l'IETF (The Internet Engineering Task Force). La différence réside dans le faite que CoAP a été conçu pour être utilisé par des petits équipements embarqués et sur des réseaux contraints.

Fonctionnement

CoAP repose sur le principe de requêtes et de réponses entre un client et un serveur. Ce qui est appelé serveur est général l'objet (le capteur, la carte embarquée) qui récolte les données, auquel le client vient demander des informations. Le client peut effectuer plusieurs types de requêtes, similaires au protocole HTTP :

  • GET : permet de récupérer une ressource.
  • PUT : pour créer une nouvelle ressource sur le serveur à l'URI demandée.
  • POST : pour créer ou modifier une ressource sur le serveur à l'URI demandée.
  • DELETE : afin de supprimer une ressource sur le serveur à l'URI demandée.
exemple d'un résultat d'une requête GET sur l'un des objets de l'URI coap://iot.eclipse.org:5683/ avec le plugin pour Firefox Copper.

Les ressources sont accessibles au travers d'URI comme pour HTTP. Un exemple d'URI CoAP (possible d'y accéder si vous possédez le plugin Copper pour Firefox) : coap://iot.eclipse.org:5683/. Un exemple est proposé ci-contre.

Il est possible pour le serveur d'autoriser une souscription afin de notifier le client de manière récurrente sur l'état d'une valeur. Le client peut également se désinscrire s'il le souhaite. Au sein de sa réponse, le serveur choisi d'affecter ou non une durée de validité à la ressource renvoyée. Le plugin Copper par exemple (qui permet également de bien voir cette information) effectuera une notification pour prévenir que cette durée est écoulée, en surlignant en rouge le champ associé à la validité. Tout comme le protocole HTTP, CoAP utilise des codes dans les réponses renvoyées à la suite de requêtes. Ceux-ci sont issus du protocole HTTP, avec certains en plus créés pour CoAP. Ce protocole utilise UDP et non TCP.

Un principe de QoS existe également, en demandant ou non l'acquittement des messages à l'aide d'un flag pour le type de message. 4 flags sont disponibles :

  • CON : le message doit recevoir un acquittement.
  • NON : le message n'a pas besoin d'acquittement.
  • ACK : cela identifie un message d'acquittement.
  • RST : il s'agit d'un message "reset". Envoyé à réception d'un message typé CON pour lequel des informations seraient manquantes.

Une autre particularité de CoAP par rapport à HTTP est d'avoir des messages plus petit. La taille minimum possible est ainsi seulement de 4 octets.

XMPP

Il existe de nombreux autres protocoles de communications pour l'Internet des Objets. L'un d'eux est XMPP (Extensible Messaging and Presence Protocol). Il est à l'origine utilisé comme protocole pour l'envoie de messages instantanés, en utilisant XML et TCP. Créer en 1998 sous le nom de Jabber, celui-ci est utilisé par de nombreux logiciels tels que Facebook, Skype, Google Talk, IChat, MSN, ... Il fonctionne sur le principe de clients et de serveurs.

Ce protocole utilise des extensions, nommés XEF (pour XMPP Extension Protocols). Une partie d'entre elles sont actuellement en cours d'implémentation pour l'Internet des Objets. Parmi elles figure le format EXI (Efficient XML Interchange), ainsi que d'autres implémentations pour la sécurité dans le domaine de l'IoT, la communication des données au travers d'XMPP...

Demonstration

Afin de réaliser deux démonstrations, plusieurs outils seront nécessaire : l'installation de Mosquitto (l'installation du paquet mosquitto-clients peut être intéressante pour une utilisation en local), Node-Red pour l'utilisation de MQTT.

Pour installer Node-Red, je vous conseil de suivre le tutoriel fourni sur le site.

Si vous désirez juste tester le protocole MQTT dans un terminal, il vous suffit d'ouvrir deux fenêtres et de taper dans la première

mosquitto-sub -t "votre nom de topic" #permet de souscrire a un topic MQTT
mosquitto-pub -t "votre nom de topic" -m "votre message" #permet de publier un message sur un topic donné

Un petit script en python est également disponible pour publier des données continuellement sur un topic :

 #!/usr/bin/env python

import random
import time
import mosquitto
import uuid

broker = '127.0.0.1'
port = 1883

print ('Messages are published')

client = mosquitto.Mosquitto("smartcitizen")
client.connect(broker)
topic = "ricmEA"
while True:

    value = str(random.uniform(0.0, 50.0))
    message = value + " ppm"

    client.publish(topic, message)
    time.sleep(3)

Notes et Références

MQTT

CoAP