Envoi de données vers une plateforme IdO

 

Glossaire

 

IdO ou Internet des objetsIoT » ou « Internet of Things » en anglais) : interconnexion d’objets aux usages variés comme l’e-santé, la domotique, la télégestion, via un réseau public (Internet, téléphonie mobile, radio, satellite).

Réseau locallocal area network » ou « LAN » en anglais) : réseau permettant à des machines de communiquer entre elles sans passer par un réseau public.

Réseau privé : réseau informatique local dans lequel on attribue une adresse IP privée à chaque machine et une adresse IP publique à chaque entrée du réseau. Les adresses IP privées ne sont pas accessibles directement depuis Internet ou depuis un autre réseau privé. Suivant la norme IPv4, deux machines situées dans des réseaux privés différents peuvent avoir une adresse IP privée identique. Suivant la nouvelle norme IPv6, chaque machine a une adresse IP privée unique.

Translation d’adresse réseaunetwork address translation » ou « NAT » en anglais) : on fait correspondre l’adresse IP privée d’une machine avec une adresse publique de son réseau, afin de pouvoir communiquer avec cette machine depuis un autre réseau.

Pare-feufirewall » en anglais) : logiciel de sécurité permettant de définir quels types de communications sont autorisés dans un réseau. Il filtre les flux de données entre les différentes zones d’un réseau privé et entre ce réseau privé et d’autres réseaux.

Passerellegateway » en anglais) : dispositif permettant de relier deux réseaux informatiques de technologies différentes.

Navigateur webbrowser » en anglais) : logiciel permettant de communiquer avec un serveur web, en utilisant le protocole de communication HTTP. Le navigateur web demande des pages au serveur web, il les reçoit et les affiche. Il envoie au serveur web les données saisies dans les formulaires et permet d’échanger des fichiers avec le serveur web.
Exemples de navigateurs web : Firefox, Chrome, Edge, Opera…

API ou Automate programmable industrielPLC » ou « programmable logic controller » en anglais).

Interface de programmation d’applicationApplication Programming Interface » ou « API » en anglais) : interface logicielle qui permet de connecter un logiciel à un autre logiciel, pour qu’ils échangent des données ou accèdent aux fonctionnalités de chacun.

CAN ou convertisseur analogique-numérique : échantillonne un signal analogique à une fréquence donnée pour le traduire en valeurs numériques codées sur plusieurs bits.

 

 

Les objectifs

 

  • Faire des mesures sur un système (capteurs), transmettre les données par Internet, réseau cellulaire, satellite… et les afficher en temps réel.
  • Stocker les données et les analyser (calculs, graphiques, apprentissage automatique…) pour améliorer le système (économie d’énergie, maintenance prévisionnelle, amélioration de la production…). Les données partagées sous licence Open Data peuvent être utilisées pour améliorer d’autres systèmes.
  • Commander le système à distance.

Le système peut être une machine industrielle, un banc d’essai, un lieu (bâtiment, jardin…).

Des traitements peuvent éventuellement être faits avant une transmission de données :

  • Échantillonnage (on ne transmet que certaines données ou/et que les données qui changent) ;
  • Conversion de données, mise en forme, tri ;
  • Ajout d’informations (date, lieu, sujet, fichiers…) ;
  • Combinaison de données, calculs.

Les besoins en sécurité :

  • Les objets connectés et les utilisateurs doivent être identifiés (qui sont-ils ?) et authentifiés (ils doivent légitimer leur demande d’accès). Les droits d’accès doivent être gérés.
  • On doit pouvoir transmettre les données d’un réseau à l’autre en passant les différents filtrages (pare-feu, translation d’adresse, proxy…).
  • Les données doivent être transmises et éventuellement enregistrées avec des méthodes de chiffrement adaptées à chaque besoin de confidentialité.
  • Les flux de données doivent être surveillés (détection de panne, code malveillant).
  • Les données enregistrées doivent être gérées (volume, obsolescence) et sauvegardées.
  • Les données ne doivent pas être à caractère personnel (anonymisation ou pseudonymisation, champ de vision des caméras limité, floutage des corps et des visages). Même croisées avec d’autres données, elles ne doivent pas être identifiantes. Elles ne doivent pas non plus mettre en danger des personnes ou des biens, par exemple en donnant des indications sur les dates et horaires de fermeture.
  • Les applications doivent être mises à jour et sauvegardées.

 

 

Étude comparative de protocoles de communication pour l’IdO

 

Protocole

Connexion entrante1

Avantages

Inconvénients

Données transmises

HTTP

NON
si serveur public

Intégré notamment dans les navigateurs et les serveurs web.

Chacun crée ses propres API. Peu de standards à part OpenAPI. Peu d’applications dans l’IdO, à part WebThings.

Tout type de données.

OPC UA

OUI (serveur dans réseau privé)

Performant pour faire communiquer directement deux machines au sein d’un même réseau (« Machine to Machine » ou « M2M » en anglais). On peut l’interfacer avec MQTT, par exemple avec Node-REDOpen Automation Software, Frankenstein Automation Gateway, OPC Router (distribué en France par M.A.C. Solutions)…

Compliqué à implémenter (des milliers de pages de spécifications).

Tout type de données sauf flux audio/vidéo.
MQTT

NON

Simple à implémenter, trames jusqu’à dix fois plus petites que les trames HTTP. Très répandu.

 

Tout type de données sauf flux audio/vidéo.

CoAP

OUI si serveur côté capteur

Conçu pour les réseaux radio.

Peu d’applications dans l’IdO, à part IoTivity et OpenThread.

 

WebSocket

NON
si serveur public

Intégré notamment dans les navigateurs et les serveurs web. Communication bidirectionnelle jusqu’à ce qu’un des correspondants l’interrompe. Utilise l’architecture d’HTTP et peut donc faire franchir les filtrages entre réseaux aux protocoles OPC UA, MQTT, HTTP, etc., en les encapsulant. Utilisé par le concentrateur de données Cogent DataHub.

Sera remplacé par WebTransport, basé sur HTTP/3 et QUIC ?

Tout type de données.

1 Connexion entrante : nécessite la mise en place de moyens de sécurisation du serveur situé dans le réseau privé (isolation, surveillance des flux…), en plus du paramétrage d’un routeur, d’un pare-feu, voire d’un proxy. Il vaut mieux utiliser un protocole avec une connexion sortante, vers un serveur situé en dehors du réseau privé. Dans le doute, demandez à votre service informatique.

 

 

Le protocole de communication MQTT

 

Le protocole MQTT2 est un protocole de communication couramment utilisé dans l’IdO en raison de sa simplicité et de ses performances dans les réseaux à faible débit.

C’est un protocole de messagerie, avec un système de publication et d’abonnement (en anglais, « publish/subscribe » ou « Pub/Sub »).
Des logiciels « clients MQTT » se connectent à un « serveur MQTT » aussi appelé « courtier MQTT » (« MQTT broker » en anglais). Chaque client publie des messages vers le serveur, en associant un topic (un sujet) à chaque message. Chaque client peut aussi s’abonner à un ou plusieurs topics. Le serveur lui transmet alors tous les messages associés à ces topics.

Les clients MQTT sont de plus en plus souvent intégrés dans les capteurs, les API, les passerelles réseaux, les afficheurs, les logiciels… :

Plateforme IdO

Les topics des messages sont organisés de manière hiérarchique. Exemple : maintenance/drone1/altitude, maintenance /drone1/rotor, maintenance/drone2/altitude. Pour recevoir les messages de tous les capteurs du drone 1, on s’abonne au topic maintenance/drone1/#. Pour recevoir les messages concernant l’altitude de tous les drones, on s’abonne au topic maintenance/+/altitude.

 

Les données transmises dans les messages MQTT sont généralement au format « JavaScript Object Notation » ou « JSON », on peut aussi transmettre des données en binaire. Exemple de fichier JSON :

{
  "fruits": [
    { "kiwis": 3,
      "mangues": 4,
      "pommes": null
    },
    { "panier": true }
  ],
  "légumes": {
    "patates": "amandine",
    "poireaux": false
  },
  "viandes": ["poisson","poulet","bœuf"]
}

 

La qualité de Service (QoS)

Le protocole MQTT dispose d’un mécanisme de qualité de service (« Quality of Service » ou « QoS » en anglais) qui garantit la livraison des messages au client en cas de défaillance d’un appareil ou de la liaison.

Il y a trois niveaux de qualité :

  • QoS 0 « At most once » : le message n’est envoyé qu’une seule fois. En cas de défaillance, il se peut qu’il ne soit pas reçu.
  • QoS 1 « At least once » : le message est envoyé jusqu’à ce que sa réception soit garantie. En cas de défaillance, le message peut être reçu en double.
  • QoS 2 « Exactly once » : chaque message est garanti d’être réceptionné et il n’est réceptionné qu’une seule fois.

Plus le niveau de qualité est élevé, plus la charge réseau augmente.

La vérification de l’intégrité des données après une transmission n’est pas prévue dans la norme MQTT. On peut éventuellement l’ajouter dans les applications utilisant MQTT.

 

La sécurité

Le protocole MQTT peut s’utiliser avec le protocole de transport chiffré TLS. Il gère l’authentification des clients par identifiant/mot de passe, par certificat, ou par délégation d’authentification.

Utilisez des logiciels et du matériel qui implémentent la dernière version du protocole MQTT et qui sont régulièrement mis à jour.

La gestion d’un parc hétérogène d’objets connectés peut générer une charge de travail supplémentaire pour le service informatique : mises à jour des systèmes, des logiciels et des micro-codes, renouvellement des certificats de chiffrement, surveillance des flux, alertes… Il vaut mieux isoler les objets connectés dans un réseau séparé pour les protéger des attaques locales, surtout si les objets connectés sont des machines pouvant présenter un danger physique. Si vous installez un point d’accès Wi-Fi dans ce réseau, sécurisez-le et surveillez-le.

 

Serveurs MQTT et plateformes IdO

Les plateformes IdO sont des applications web composées notamment d’un serveur MQTT, d’une base de données (stockage), d’une interface de programmation d’application (API) pour accéder aux données depuis une autre application et d’une interface web pour gérer les publications et les abonnements MQTT, les comptes utilisateurs, les droits d’accès, l’affichage des données sous forme d’indicateurs, de courbes, de synoptique, de cartes, de vues 360° ou 3D, de tableaux de bords, etc.

Serveurs MQTT et plateformes IdO sous licence libre ou sous licence Open Source :

  • ActiveMQ Artemis : serveur MQTT 5.0, MQTT + TLS, WebSocket. QoS 0, 1 et 2.
  • Akasa : serveur MQTT 5.0 écrit en Rust, MQTT + TLS, WebSocket, WebSocket + TLS.
  • Amlen : serveur MQTT 5.0.
  • ejabberd : serveur MQTT 5.0, MQTT + TLS, WebSocket, WebSocket + TLS, serveur XMPP et service SIP. ProcessOne (Paris, 75) développe et intègre ejabberd et loue la version hébergée Fluux.
  • Emitter : serveur MQTT, WebSocket, TLS. Messages texte et binaire. Misakai (Irlande) loue la version hébergée Emitter Cloud.
  • EMQX : serveur MQTT 5.0, MQTT + TLS, WebSocket, WebSocket + TLS, QUIC. EMQ (Chine) loue la version hébergée EMQX Cloud et offre un serveur de test.
  • FlashMQ : serveur MQTT 5.0, WebSocket. QoS 0, 1 et 2.
  • HiveMQ Community Edition : serveur MQTT 5.0, MQTT + TLS, WebSocket, WebSocket + TLS. HiveMQ (Allemagne) loue la version hébergée HiveMQ Cloud, avec un accès gratuit pour 100 clients MQTT, une taille de message jusqu’à 5 Mo, un maximum de 10 Go de données stockées pendant 3 jours.
  • KMQTT : serveur MQTT 5.0, MQTT + TLS, WebSocket, WebSocket + TLS.
  • MCloudTT : serveur MQTT 5.0. TLS, WebSocket.
  • Mosquitto : serveur MQTT 5.0, MQTT + TLS, WebSocket, WebSocket + TLS. Serveur de test gratuit. Cedalo (Allemagne) loue la version hébergée MQTT Broker. 84code (Suède) loue la version hébergée CloudMQTT.
  • MQTT server : serveur MQTT 5.0, MQTT + TLS, WebSocket, WebSocket + TLS.
  • NanoMQ : serveur MQTT 5.0, MQTT + TLS, WebSocket, WebSocket + TLS.
  • Plateforme IdO Openremote. Une offre d’intégration (USA, Pays-Bas) est proposée.
  • RabbitMQ : serveur MQTT 5.0. Ably (USA, Royaume-Uni) loue une version hébergée.
  • rumqttd : serveur MQTT 5.0.
  • Plateforme IdO TagoIO (USA).
  • ThingsBoard (développement en Ukraine) : plateforme IdO avec serveur MQTT, MQTT + TLS. Une version prête à l’emploi (USA) est proposée, avec une offre à $10 / mois, suffisante pour être utilisée dans un cadre pédagogique. Une offre d’intégration est proposée par Wiifor (Toulouse, 31).
  • VerneMQ : serveur MQTT 5.0, MQTT + TLS, WebSocket, WebSocket + TLS. QoS 0, 1 et 2.

Plateformes IdO sous licence non libre (liste non exhaustive, il en existe des centaines) :

  • AskSensors (Épinay-sur-Seine, 93). Offre à $9 / mois, suffisante pour être utilisée dans un cadre pédagogique.
  • Braincube (Issoire, 63).
  • dDruid (Strasbourg, 67). Serveur MQTT 5.0 RabbitMQ.
  • Easy-live (Geispolsheim, 67) pour la gestion énergétique et technique du bâtiment.
  • ESPRI Digital (Argentan, 61). Plateforme sur mesure.
  • INSIGHT de Becomanager (Maxéville, 54) pour la gestion énergétique et technique  du bâtiment.
  • iDEMoov (Entzheim, 67). Serveur MQTT 5.0 RabbitMQ.
  • INGELI (Brignais, 69).
  • InUse (Boulogne-Billancourt, 92) pour la maintenance. Serveur MQTT 5.0 RabbitMQ.
  • JUMO Cloud (Metz, 57).
  • Live Objects d’Orange (France). WebSocket, 2/3/4G, LTE-M, NB-IoT, satellite Kineis.
  • METRON (Paris, 75) pour la supervision énergétique et technique  du bâtiment.
  • Orisun IoT (Strasbourg, 67). Serveur MQTT Mosquitto (migration prévue vers VerneMQ).
  • SCorp-io (Paris, 75). Serveur MQTT 5.0 VerneMQ, Sparkplug B. Industrie et bâtiment.
  • ThingSpeak de MathWorks (USA), éditeur de MATLAB et de Simulink. Offre gratuite, suffisante pour utiliser MQTT dans un cadre pédagogique. Serveur MQTT 3.1.1.
  • What is What de The WiW (Nancy, 54) pour la maintenance. Serveur MQTT 3.1.1 (5.0 non testé) VerneMQ.

 

Clients MQTT pour publier des messages vers un serveur MQTT

Exemples de systèmes d’acquisition de données ou de commande, intégrant un client MQTT ou utilisables avec un logiciel de traitement automatique des flux de données :

  • Raspberry Pi industriel sur rail DIN :
    • Andino.
    • Brainboxes.
    • Industrial Shields : Arduino, Raspberry Pi ou ESP32. API avec entrées/sorties numériques et analogiques. Propose aussi un afficheur avec Raspberry Pi.
    • PiXtend de Kontron : Linux, logiciel de programmation CODESYS, Node-RED, entrées/sorties numériques ou analogiques, Modbus RTU.
    • RevolutionPi : modules sorties relais, entrées/sorties numériques ou analogiques.
  • ACE AUTOMATION : API avec entrées/sorties analogiques.
  • ELASTEL : Raspberry Pi monté dans un boîtier. Entrées-sorties numériques, entrées analogiques, Modbus TCP, Modbus RTU, OPC UA, EtherNET/IP, Ethernet, Wi-Fi, WiFi HaLow, 4G LTE, NB-IoT.
  • JUMO (usine à Metz, 57) : système d’automatisation variTRON avec Linux, logiciel de programmation CODESYS, Node-RED, modules sorties relais, entrées/sorties numériques, entrées analogiques, régulateurs PID, variateurs de puissance, afficheurs.
  • WAGO : contrôleur avec Linux, logiciel de programmation CODESYS, Node-RED, sorties relais, entrées/sorties numériques et analogiques, régulateur PID.
  • Unipi technology : contrôleur avec Linux, logiciel de programmation OpenPLC, Node-RED, sorties relais, entrées/sorties numériques et analogiques.
  • Contrôleurs M2M Control : entrées/sorties numériques et analogiques extensibles, interface de développement.
  • Relais OPTA de Finder, pilotables par Internet et programmables, basés sur Arduino.
  • Relais Shelly, pilotables par Internet.
  • Gamme groov d’Opto : interfaces d’acquisitions numérique et analogiques, contrôleur avec Linux, logiciel de programmation CODESYS, Node-RED, modules entrées/sorties numériques ou analogiques.
  • ICP DAS : modules d’acquisition de données analogiques ou numériques, à combiner avec un module ou une passerelle intégrant MQTT.
  • Advantech : modules d’acquisition de données analogiques ou numériques ADAM.
  • Boîtiers et centrales d’acquisition de données DUNASYS pour systèmes mobiles.
  • Le logiciel Tasmota pour de la mesure et du pilotage avec des microcontrôleurs Espressif.

Voir aussi dans le forum de discussion CaméX-IA la liste de fournisseurs et prestataires.

Selon l’utilisation des appareils, vérifiez la plage de tenue en température, les vitesses d’acquisition et de transmission des données, le support d’enregistrement (les cartes mémoire sont fragiles), la mise à jour et la sauvegarde de l’heure et pour la sécurité, la redondance des composants et les modes de marche et d’arrêt.

Conseil : limitez dans votre réseau privé le nombre de clients MQTT qui vont se connecter directement à la plateforme IdO. Utilisez plutôt une passerelle qui regroupe tous les flux de données et les transmet à une ou plusieurs plateformes IdO. Vous aurez ainsi juste à reparamétrer cette passerelle et non pas tous vos clients MQTT si vous changez de plateforme IdO ou si vous en ajoutez une. Le paramétrage ne concernera que la méthode de connexion au nouveau serveur MQTT et la structure du fichier de données envoyé au format JSON, spécifique à chaque plateforme IdO.

Exemples de passerelles entre différents réseaux :

 

Clients MQTT pour s’abonner à des topics MQTT

MQTT2Excel permet de s’abonner à des topics MQTT et d’enregistrer les données dans un fichier Excel. Streamsheets est un tableur qui peut s’abonner à des topics MQTT et afficher les données dans ses feuilles de calcul. Voir aussi Afficher un flux de données dans LibreOffice Calc ou dans Google Sheets.

PlotJuggler affiche les courbes de séries temporelles publiées en MQTT.

Si le serveur MQTT propose le protocole de communication WebSocket, on peut utiliser un navigateur web pour publier ou pour s’abonner à un topic MQTT en intégrant un client MQTT dans une page web3. Exemple de clients MQTT intégrables dans une page web :

Diverses applications Android permettent de développer facilement des interfaces pour publier ou s’abonner à des topics MQTT. Vous pouvez aussi développer une application web ou pour smartphone avec MIT App Inventor, Flask.

 

Normes

Les spécifications du protocole MQTT sont publiées par l’organisme de normalisation OASIS. MQTT for Sensor Networks (MQTT-SN) est une version de MQTT adaptée aux réseaux de capteurs sans fil.
Les spécifications de MQTT peuvent être complétées avec les spécifications d’Eclipse Sparkplug.

 

Magazines, sites web

 

Auteur : David VANTYGHEM <david.vantyghem@ensam.eu>. Ce document est mis à disposition selon les termes de la Licence Creative Commons Attribution – Partage dans les Mêmes Conditions 4.0 International. Logotype licence CC BY-SA

Image en vignette : Diversité IOT © Atomas42 / Wikimedia Commons, licence CC BY-SA 4.0.


Schéma Plateforme IdO (fichier LibreOffice).

Pour ouvrir, modifier et imprimer les fichiers LibreOffice, téléchargez et installez LibreOffice. Si vous n’avez pas le droit d’installer un logiciel sur votre ordinateur, téléchargez LibreOffice Portable et enregistrez-le dans un dossier, il fonctionne immédiatement sans installation.


2 Andy Stanford-Clark (IBM) et Arlen Nipper (Arcom Control Systems) créent le protocole « MQ Telemetry Transport » en 1999 pour transmettre par satellite les données de capteurs installés sur des oléoducs. MQ faisait référence au logiciel IBM MQSeries. Le protocole a ensuite été renommé MQTT (Message Queuing Telemetry Transport).

3 Exemple d’utilisation de MQTT + WebSocket : http://steves-internet-guide.com/mqtt-websockets/

Laisser un commentaire