IOT : Un prototype de ferme connectée sur AWS IOT et AWS Greengrass

D2SI s’installe chez AWS ! Derrière cette accroche volontairement racoleuse, se cache en réalité un stand pour l’AWS Innovation Corner. Il y a quelques mois, AWS nous a proposé de présenter un projet à déployer dans leur locaux de la tour Carpe Diem à la Défense, et c’est aujourd’hui chose faite ! C’est l’occasion pour nous de revenir plus en détail sur l’architecture du projet que vous pourrez venir voir chez AWS.

Le projet

L’objectif était d’illustrer le composant AWS IoT, à travers un projet facile à appréhender et possédant un côté ludique. Après discussions, il a été décidé de montrer un prototype de ferme connectée: celui-ci permettant d’illustrer à la fois la collecte de données et le contrôle à distance.

L’installation physique d’un prototype permettra enfin une meilleur appréhension de la solution.

Le pipeline de données

D’abord traitées par une lambda, les données en provenance du périphérique sont stockées dans CloudWatch via une métrique personnalisée.

L’utilisation d’une métrique personnalisée se prête bien aux séries temporelles, et en outre, elle permet de brancher une alarme d’hygrométrie en cas de chute des valeurs en dessous d’un certain seuil.

Le code embarqué

Le projet embarque AWS Greengrass. Récemment débarqué dans la région Irlande, ce service AWS autrefois réservé, entre autres, aux régions US et Francfort nous a permis de ne quasiment pas écrire de code embarqué.

L’exécution de code local est en réalité une lambda en Python, dont le déploiement et la mise à jour sur le périphérique est piloté depuis le cloud. Le contrôle de la provenance des messages fonction par fonction est assuré par les mécanismes de Greengrass.

Le site web de contrôle à distance

Le site se présente sous la forme d’un dashboard, avec un panneau permettant de visualiser l’hygrométrie actuelle ainsi que son évolution sur la semaine.

Un bouton d’action est ajouté permettant de déclencher l’arrosage à distance.

Pour le moment, l’interface fait du polling toutes les 5 secondes pour récupérer les données à jour. Dans un futur développement, l’interface sera directement connectée en websocket au Cloud pour réduire le temps d’affichage des données lors de leur mise à jour.

Le site récupère les données depuis le cloud via une API construite avec API Gateway.

Le montage électronique

La partie physique se compose d’un Raspberry PI 3 modèle B: afin d’embarquer AWS Greengrass, il nous était nécessaire d’avoir un composant avec correspondance aux spécifications minimales.

Le capteur d’humidité est branché sur un des GPIO, alimenté en 5v. Afin de récupérer des valeurs analogiques, un convertisseur analogique/numérique est ajouté au circuit.

La commande se fait par l’intermédiaire d’une sortie GPIO en 5v, branchée sur un relai. Le relai ouvre le circuit 12v démarrant la pompe qui alimente la plante en eau.

Le reste du montage se compose de câbles, d’une alimentation et bien sûr de tuyaux pour acheminer l’eau.

Matériel utilisé

Raspberry PI 3b+: https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/

Capteur d’humidité: http://amzn.eu/d/hHn0zBn

Convertisseur numérique: http://amzn.eu/d/6GpLhw8

Relai: http://amzn.eu/d/gTrbENv

Pompe à eau 12v: http://amzn.eu/d/6STA4bJ

Vue partielle du circuit: connexion du capteur d’humidité.

Automatisation et déploiement

Afin de pouvoir faciliter la maintenance, l’ensemble de la solution est automatisée:

  • Une série d’instructions CloudFormation assure le déploiement de la quasi-totalité de la partie cloud, en particulier:
    • IoT rules
    • Lambda
    • S3 website
    • IAM Roles & policies
    • API
  • Un script en Python déploie les éléments non supportés par CloudFormation, en particulier la configuration cloud de Greengrass.
  • Des scripts shell s’occupent de l’installation de Greengrass sur le périphérique local lors du premier déploiement. A terme, nous réfléchissons à un système permettant de flasher un OS “préinstallé” avec Greengrass et ses certificats correspondants dans le Raspberry.
  • Un Makefile s’occupe de lier le tout, déployant entre autre les fichiers de l’interface web dans le bucket correspondant.

Commentaires :

A lire également sur le sujet :