Intégration des dispositifs dans le cloud pour l'IoT
Grâce à l'Internet des objets (IoT), les systèmes de contrôle intégrés bénéficient de niveaux d'intelligence sans précédent. Là où les dispositifs étaient autrefois isolés, l'IoT les réunit dans un « système de systèmes ». Les dispositifs sont ainsi capables de coopérer entre eux et d'interagir avec d'autres services afin d'assurer une performance, une réactivité et un temps de fonctionnement nettement supérieurs.
Les utilisateurs peuvent profiter de l'énorme puissance de calcul du cloud pour permettre à l'apprentissage machine, l'exploration de données et à d'autres technologies de travailler sur les flux de données fournis par tous les dispositifs IoT pris en charge par l'application. Ces dispositifs IoT n'ont pas besoin d'être conçus spécifiquement pour l'application. Le système dans le cloud peut tirer parti des technologies de data-wrangling, comme Spark et Hadoop, pour incorporer des informations en temps réel et historiques provenant de nombreuses sources. Ce procédé permet de réaliser des corrélations sur un grand nombre de sources et, ce faisant, d'en tirer de précieuses informations. Face à un tel potentiel, la complexité est, certes, peut-être inévitable.
Une question cruciale avec la fourniture d'application IoT réside dans la diversité des composants qui constituent chaque solution. L'application IoT doit collecter des données provenant de différents types de capteurs, comme la température, le mouvement et la qualité de l'air. Pour un même type de capteur, les données peuvent provenir de dispositifs issus de différents fabricants ou de matériel plus ancien n'ayant pas été conçu pour l'IoT.
Prenons l'exemple d'un projet IoT consistant à surveiller la température à l'intérieur des chambres dans un hôtel. Chaque chambre peut avoir trois capteurs, chacun capable de surveiller la température. L'un, placé près de la porte, peut avoir son capteur de température intégré à un module d'alarme incendie, un deuxième, placé à proximité du lit, peut être associé aux commandes de climatisation, et un troisième, situé dans la salle de bains, agit en tant qu'unité dédiée de la mise à niveau IoT.
Le logiciel chargé de relever les données de chacun de ces appareils doit prendre en considération la manière dont chaque capteur est étalonné et les données qu'il renvoie. Certains appareils peuvent envoyer les données à intervalles réguliers, d'autres à chaque changement des conditions au-delà d'un seuil programmé ou encore sur demande par une application basée dans le cloud. Et pour relayer les données, ils peuvent tous utiliser des connexions réseau différentes : certaines câblées, d'autres sans fil, comme Bluetooth ou Zigbee. L'application doit tenir compte de tous ces éléments de variabilité. Mais ce n'est pas tout !
La consommation d'énergie est un enjeu de taille pour de nombreux appareils IoT. Le meilleur moyen de prolonger la durée de vie des batteries est de réduire au minimum l'activité des systèmes énergivores, comme les dispositifs de communication sans fil et les microprocesseurs de base. Ces sous-systèmes sont maintenus en mode de consommation réduite la plus grande partie de la durée de vie du système. . Ils se réveillent pour de courtes périodes d'activité et exécutent une tâche avant de revenir en veille. Le cycle de service reste ainsi très faible. Son fonctionnement en mode de forte consommation d'énergie ne correspond pas à plus de 1 % de la durée de vie du système. Pendant les 99 % restants, seuls les systèmes nécessaires au maintien de l'état du système, comme les horloges en temps réel, sont alimentés. Avec une telle conception, un nœud IoT peut durer des années avec une seule charge de batterie.
De nombreux microcontrôleurs (MCU) intègrent désormais des machines d'état qui permettent aux capteurs cruciaux de se réveiller périodiquement, déclenchés par l'horloge en temps réel, et de procéder aux relevés sans réveiller le microprocesseur hôte. Certains systèmes peuvent prendre un ensemble prédéfini de mesures avant que le microprocesseur ne se réveille pour en exécuter le traitement. D'autres encore peuvent programmer des seuils dans la logique du capteur de manière à ce que d'importantes digressions déclenchent une réaction immédiate.
Il peut arriver qu'une application de contrôle exécutée dans le cloud demande à obtenir certaines données auprès de son dispositif ou envoie une commande pour modifier l'état du dispositif. Toutefois, si au moment où la commande est émise, le dispositif se trouve en état de faible puissance dicté par la nécessité d'assurer un cycle de service faible, il pourrait mettre du temps à répondre. L'application exige une logique pour garantir que son interprétation de l'état du dispositif est conforme à la réalité.
Dans la phase initiale de l'IoT, les intégrateurs se sont trouvés face à la nécessité de construire leur propre infrastructure logicielle pour l'intégration dans le cloud, utilisant pour cela des protocoles personnalisés ou des techniques d'appel de procédure à distance. En principe, ils utilisaient leurs propres centres de données ou des serveurs lames loués dans des installations dédiées sur lesquels ils exécutaient des applications qui recevaient des données provenant de dispositifs intégrés connectés, incorporaient les informations dans une base de données centrale et exécutaient des applications pour présenter des données aux utilisateurs et procéder à l'analyse des modèles.
Les intégrateurs étaient chargés d'assurer la résilience et la haute disponibilité, et de gérer la complexité d'un environnement dans lequel les dispositifs n'étaient pas en permanence connectés au réseau. Une façon d'y parvenir consiste à utiliser le concept d'ombres de l'appareil. Il s'agit de documents stockés dans le cloud qui mettent en cache l'information sur l'état du dispositif à partir de ses derniers rapports et de toute modification en attente.
Bien que les applications soient capables de gérer elles-mêmes les ombres des appareils, c'est une tâche qui est plus facilement gérée quand elle est confiée à une couche de service capable d'offrir une interface normalisée sur de nombreux types de dispositifs. C'est l'une des nombreuses fonctionnalités désormais prises en charge par des offres d'infrastructure cloud comme Amazon Web Services, IBM Watson IoT et Google Cloud.
Un autre service effectué par les plates-formes d'infrastructure cloud est le mappage de protocole. Le cloud a évolué autour de l'utilisation répandue du protocole TCP/IP et des services associés. Bien qu'il s'agisse d'un protocole sans état, le protocole HTTP (HyperText Transport Protocol) utilisé pour de nombreux services basés dans le cloud, est exécuté en plus de la couche TCP orientée vers l'état, en grande partie en raison de la prise en charge généralisée du protocole TCP. Cependant, peu d'appareils IoT disposent des ressources nécessaires pour mettre en œuvre un faisceau TCP/IP complet permettant une communication directe avec des applications cloud. Défini par une demande émanant du groupe de travail IETF (Internet Engineering Task Force), le protocole de transfert CoAP (Constrained Application Protocol) rationalise HTTP pour le rendre plus compatible avec les dispositifs ayant des ressources limitées, et supprime la nécessité d'utiliser la couche TCP.
Le protocole CoAP utilise un en-tête de 4 octets à codage compact pour prendre en charge des protocoles de longueurs de paquets beaucoup plus courtes que celles normalement assurées par les connexions Ethernet dorsales. Alternative répandue au protocole CoAP, le protocole MQTT (Message Queueing Telemetry Transport) développé par IBM est jugé mieux adapté à de nombreuses applications IoT. Il peut s'exécuter sur une variété de formats de paquets, tels que Bluetooth et Zigbee, ainsi que le protocole TCP/IP. Contrairement au modèle client-serveur des services web HTTP traditionnels, le protocole MQTT sous-tend un modèle de publication-abonnement. Ceci a l'avantage de réduire les demandes individuelles envoyées à un appareil IoT.

Figure 1. Mappage de passerelle MQTT et CoAP - Droits d'auteur sur l'image détenus par Farnell

Figure 2. Exemple de modèle publication/abonnement MQTT - Droits d'auteur sur l'image détenus par Farnell
Pour assurer la cohérence des transferts de données sur différentes plates-formes, les plates-formes cloud ont recours au format de notation des objets JavaScript JSON (JavaScript Object Notation). Pour envoyer des données vers le cloud, un dispositif doit d'abord encoder les données qu'il détient dans une représentation JSON, puis l'utiliser comme charge utile pour les messages CoAP, HTTP ou MQTT. Les responsables de la mise en œuvre ont ici le choix : confier cette tâche aux dispositifs finaux ou laisser aux passerelles le soin de prendre en charge le processus. Dans les systèmes dont une grande partie du matériel est ancienne, l'option de la passerelle sera souvent privilégiée. La passerelle peut collecter des données grâce aux normes exclusives ou pré-IoT utilisées par les dispositifs et convertir les données vers et depuis la représentation JSON. Elle peut également agir comme proxy pour toutes les commandes provenant du cloud. La mise en œuvre de la passerelle déterminera si ces commandes doivent être converties à un format que l'appareil peut comprendre, avant d'être relayées.
Les dispositifs conçus pour l'IoT peuvent intégrer leurs propres éléments logiciels pour gérer la conversion JSON et les interactions avec le cloud. La prise en charge de JSON et des interfaces réseau peut être intégrée au système d'exploitation en temps réel (RTOS). Son accès peut se faire au moyen de langages de programmation tels que C. Une technique employée par certains intégrateurs IoT et prise en charge par les fournisseurs d'infrastructure cloud consiste à exécuter une machine virtuelle sur chaque dispositif final, optimisée pour l'intégration cloud IoT.

Figure 3 : Exemple de sortie de capteur au format JSON - Droits d'auteur sur l'image détenus par Farnell
Les pilotes des dispositifs mis en œuvre sur chaque plate-forme IoT servent à convertir les commandes provenant de la machine virtuelle en un format que le RTOS sous-jacent et le micrologiciel peuvent comprendre. Le micrologiciel se charge d'optimiser la consommation énergétique et le temps d'utilisation à bas niveau, tout en fournissant un ensemble normalisé de services pour la couche cloud.
Le développement dans un environnement cloud fournit un ensemble d'outils de programmation enrichi par rapport à l'environnement intégré traditionnel. Aujourd'hui, les langages utilisés pour la programmation cloud sont généralement conçus pour être exécutés dans un environnement à code géré. Plutôt que d'être compilé, le code est interprété à l'exécution ou, s'il offre une performance accrue, il est compilé juste-à-temps (JIT). Si les développeurs intégrés disposent généralement d'un choix de langues restreint, essentiellement C et C++, les développeurs cloud ont accès à une riche variété de langues, dont la plupart sont optimisées pour répondre à des besoins spécifiques. Alors que Java et Python prennent en charge de nombreuses exigences d'application, Hadoop étend Java pour faciliter la répartition de la charge de travail de traitement de données sur différents nœuds de calcul.
Bien que la programmation, intégrée ou dans le cloud, implique l'utilisation de ressources de développement, les développeurs qui rédigent du code pour les serveurs utilisent souvent la technologie de machine virtuelle pour construire une version mise à l'échelle de l'environnement cible sur leurs propres machines. Généralement, les développeurs intégrés se voient obligés de développer le code séparément de la cible et d'exécuter les tests après chaque séquence d'édition-compilation-téléchargement, ce qui augmente le délai d'exécution. Les environnements middleware compatibles avec les langages de code gérés rationalisent le développement du fait qu'ils permettent l'obtention d'un prototype de code sur une machine virtuelle locale, présentant ainsi des avantages similaires à ceux des développeurs cloud.
Grâce à la disponibilité de services d'infrastructure cloud, les intégrateurs ont maintenant accès à un arsenal d'outils qui facilitent l'assemblage de solutions IoT complètes. Ces services orientés vers le cloud réduisent considérablement la complexité du déploiement et permettent aux intégrateurs d'exploiter la pleine puissance de l'IoT.
Intégration de dispositifs cloud pour l'IoT - Date de publication : 4 septembre 2018 par Farnell