# TIW8 - PlantKeeper
* CLEMENT Florent p1601511
* DELFANTI Maxence p1607511
* MONTEIX Yann p1522747
* CONTRERAS Baptiste p1809436
[[_TOC_]]
## Description
PlantKeeper est une application web qui permet de surveiller vos plantes, qu’elles soient sur votre armoire ou dans votre jardin. Ce suivi est possible grâce à un Arduino qui communique à l’application les métriques de vos plantes, qui seront ensuite compilées et analysées pour vous fournir des conseils et des notifications. Le but étant d’optimiser le développement de vos plantes.
## Rédaction des spécifications
* Identification de la plante
* Recherche et choix de la plante
* Fournir des informations relatives à la plante
* Développement d’une interface
* Visualisation des publicités
* Page de sélection de plante
* Page Métriques des capteurs
* Page Statistiques
* Page Etat général de la plante / Alerte et notif
* Page Paramétrage
* Saisir pseudo de la plante
## Conception de l'architecture matérielle (distribuée)
Conception en micro-services :
* gestion des capteurs (sauvegarde des métriques + les récupérer) API gestion des données des capteurs (bdd des données des capteurs)
* gestion sessions des utilisateurs (plante courante + lien avec métriques + params)
* gestion arduino (composants arduino + serveur (api) + intelligence)
* gestion des notifs
* Nginx qui sert un front
* base de données
## Choix du matériel (arduino)
Voici les principaux composants qui seront nécessaire à l’Arduino :
- LED RGB
- écran LCD
- capteur de température
- capteur de lumière
## Choix des technos logicielles
* Serveur node / Express
* NuxtJS / Vuetify / Chart.js
* Postgresql
## Répartition des rôles et des tâches
| Tâches | Rôles |Description |
|-------------|-------------------------|-------------------------|
| service-front | Florent, Baptiste | Création d'une interface web en Nuxt / Vuejs|
| service-user | Baptiste, Maxence, Yann | Création d'un micro-service pour la gestion des sessions |
| service-arduino | Yann, Maxence |Interaction avec l'arduino et gestion de l'intelligence|
| service-capteur | Florent, Baptiste, Maxence, Yann |Creation d'une base de données pour stocker les données des capteurs. Ajout d'endpoints pour requêter ces données|
| service-plante | Florent, Baptiste |Création d'un micro-service qui fait passe plat avec l'API externe trefle.io (pour éviter les problèmes de CORS et sécuriser notre clé d'API)|
| service-notif | Florent, Baptiste, Maxence |Création d'un micro-sevrice qui permet de centraliser les notifications et de les envoyers aux utilisateurs via Firebase et requête sur un endpoint|
| Mise en place de pipeline | Florent | Ajout de pipeline gitlab pour automatiser le build des images docker|
|arduino| Yann|Faire les montages de l'arduino|
## Diagramme explicatif

- **service-proxy** = Le container reverse-proxy permet d'accéder aux différents services de l'application via le port ``8080``.
- **service-front -> service-capteur** = récupération des données des capteurs pour les afficher sur la page `/sensor`
- **service-front -> service-user** = sauvegarder et récupérer des sessions d'utilisateurs
- **service-front -> service-notif** = récupérer la liste des nouvelles notifications à afficher sur l'interface
- **service-front -> service-arduino** = changer le nom de la plante, modifier les seuils d'alertes, récupérer l'état de la plante
- **service-front -> service-plante** = accèder à l'API trefle.io sans exposer la clé privé et éviter des problèmes de CORS
- **service-plante -> trefle.io** = rechercher une plante et ses informations
- **service-arduino -> service-capteur** = envoie des données des capteurs pour être stockées
- **service-arduino <-> arduino** = récupère les données des capteurs de l’Arduino et vérifie la santé de la plante. Le service-Arduino met également à jour la couleur de la LED RGB en fonction de l'état de la plante ainsi que son pseudo sur l'écran LCD.
- **service-arduino -> service-user** = service-arduino récupère les paramètres de session de l'utilisateur pour personnaliser le monitoring de sa plante
- **service-notif -> firebase** = envoie la notification push à l'utilisateur
## Bilan (travail réalisé)
- Développement d'une application web responsive utilisable sur navigateur et téléphone.
- Création d'un objet de surveillance des valeurs vitales d'une plante.
- Possibilité de trouver une plante et ses informations dans une API externe (trefle.io)
- Gestion du multi-utilisateur (mais il faut plusieurs arduino)
- Possibilité de paramétrer l'application (autoriser / refuser un type de notification, modifier des paramètres de la plante)
- L'utilisateur peut recevoir des notifications push, en plus de les voir sur l'interface web
- Ajout d'une page pour consulter la variation des données sur la dernière heure
- Monitoring de l'état de la plante avec envoi d'alerte en cas de danger
- Déploiement automatique de l'application sur une VM distante
## Scénario de la démo
- L'utilisateur créé son compte sur l'application, il y choisit une plante (+ son espèce), son pseudo, et la clé d'activation de ses capteurs (clé liée à l'arduino)
- Il peut à présent se connecter en entrant son username
- L'utilisateur se rend sur la page ``/maPlante`` pour voir les détails de celle-ci
- Il se rend ensuite sur ``/settings`` pour voir et modifier les paramètres (activer / désactiver les notifications push ou modifier certaines valeurs de la plante)
- En allant sur la page ``/sensor``, on peut consulter les dernières valeurs relevées par les capteurs, un graphique avec les données de la dernière heure et une moyenne des valeurs.
- En cas d'alerte, une notification apparait sur l'interface web, ainsi qu'une notification push si le paramètre est activé. L'alerte décris le problème (il fait trop chaud/froid ou la luminosité est trop basse)
- Il est aussi possible de renommer le nom de la plante via un champ texte dans les paramètres
- Si on regarde l'arduino, une LED s'allume en bleu si tout va bien, rose s'il y a un problème et rouge si la plante va très mal.
## Conclusion (avantages / inconvénients)
Avantages :+1:
- Cela fait jolie dans le salon à côté de sa plante 🌱
- D'après nos estimations, nous pourrions sauver au moins 15 millions de plantes par an.
- Il n'y a aucune publicité sur l'application
- Application disponible sur toutes les plateformes
- Se configure automatiquement en allant chercher les informations de la plante sur trefle.io
- Paramétrage de l'application
- Permet de voir l'état de ma plante via les LEDs de l'arduino ou sur un téléphone
- L'architecture micro-service rend l'application facilement scalable
Inconvénients :-1:
- Démontre votre incapacité à prendre soin d'une plante par vous même
- Nécessite une connexion internet
- Une plante par utilisateur (néanmoins, le code flexible rend possible une évolution sur ce point)
- Limité par le matériel (manque de capteurs)
- Absence d'un mode daltonien
- Absence de traduction (Disponible qu'en français 🇫🇷)