Un projet “IOT”, peut être découpé en 4 parties principales :

  • les objets connectés et l'infrastructure radio
  • la plateforme qui communique avec les objets
  • le stockage des données collectées,
  • l’utilisation et l'affichage des données collectées.
Architecture2

Les objets connectés

En général, les objets n’ont pas la capacité de communiquer directement avec la plateforme.

Il est donc nécessaire de mettre en place une gateway local pour les rendre accessible depuis un réseau IP.

Le protocole radio avec les objets est fortement dépendant de la technologie utilisée : bluetooth, zigbee, sub 1Ghz,...

A l'inverse, nous préconisons de normaliser les communications avec la plateforme avec l'utilisation d'un protocole comme le MQTT  (accéder notre page dédiée à MQTT) développé à l'origine par IBM.

La plateforme de communication 

La première problématique d'une plateforme de communication IOT est de maintenir des sessions ouvertes avec les objets pour assurer une communication des données bi-directionnelles.

Cette problématique est souvent appelé le 'c10k problem', c'est à dire le problème des dix mille connexions simultanées.

Pour solutionner cette problématique, nous nous sommes tournées vers le langage Node.js qui utilise le très performant moteur javascript Google V8.

Nous conseillons de développer la plateforme sous la forme de briques logicielles les plus indépendantes les unes aux autres selon une architecture microservice.

Les microservices développés en node.js peuvent être gérés par un manager comme PM2. Celui-ci s'occupe de surveiller les services et de les relancer si besoin.

Les services plus conséquents peuvent être embarqués dans un container logiciel à travers une technologie comme DOCKER.

La plupart des plateformes IOT, comme celle d'amazon AWT IOT, propose de collecter les informations à travers un broker MQTT ou à travers des API HTTP REST.

Si vous commencez votre projet, nous vous conseillons de commencer avec le broker MQTT MOSCA écrit en Node.js ou le broker RabbitMQ écrit en Erlang ou le broker Mosquitto qui peut s'embarquer sur une Raspberry.

Par la suite, vous pourrez évoluer vers des solutions Cloud comme cloudmqtt.com ou AWT IOT.

L'écriture d'APIs HTTP REST pour la plateforme peut être simplifier en utilisant des frameworks open source comme LoopBack, récemment racheté par IBM ou encore SailsJs.

En plus de simplifier l'écriture des APIs REST, ces frameworks offrent l'accès à plusieurs types de bases de données à travers un couche orm (object relational mapping).

Avec une couche orm, vous n'avez pas à vous soucier des fonctions de création, de modification, d'effacement des données liées à chaque base de données, le framework vous offre des fonctions normalisées.

Pour le stockage, nous avons une préférence pour utiliser une base de données NoSQL comme MongoDb pour stocker les informations liées à la configuration de la plateforme : utilisateurs, droit d'accès, paramètres des objets, ... et utiliser une base de données temporelle comme InfluxDb ou Warp qui intégre en plus la notion de localisation de l'information.

Stockage des données  

Pour le stockage, nous avons une préférence pour utiliser une base de données NoSQL comme MongoDb pour stocker les informations liées à la configuration de la plateforme : utilisateurs, droit d'accès, paramètres des objets, ... et utiliser une base de données temporelle comme InfluxDb ou Warp qui intégre en plus la notion de localisation de l'information pour stocker les informations collectées par les objets.

Utilisation et l'affichage des données collectées

Le développement de l'interface d'administration peut simplifié par l'utilisation du framework AngularJs et la librairie Angular Material de Google.

Il existe d'ailleurs des projets template pour quelques euros comme FUSE qui respecte les recommandations de John PAPA.

Pour la réalisation de tableaux de bord pour afficher les données collectés des objets, nous vous conseillons l'utilisation de GRAFANA

 

Besoin de conseils, contactez-nous !