Bonjour à tous
Je travaille sur une application iOs/Android qui fait des API sur une base de données MySQL. Cette base est en prod depuis lontemps et elle fonctionne bien (même si elle pourrait être améliorée).
Je remsrque que l'amélioration que je souhaite apportée et bien plus complexe que je l'imaginais, alors je dabord présenter la fonction initiale, qui nécessite la modification de ma base de donnée. Puis les améliorations que je souhaite faire.
Mon App surveille l'état de station IoT et particulièrement des sondes qui mesurent le taux hydrique dans le sol (kPa) et des sondes qui mesurent la température des bourgeons. Il y a aussi "une sonde" qui mesure l'état de la batterie. En fonction des mesures, l'utilisateur doit recevoir une alarme. Je dois donc modifier ma base de données pour définir des seuils (threshold)
Si pour une sonde
1. la température est en dessous d'une température, une alarme est générée
2. si taux hydrique est en dehors d'une gamme, une alarme est générée
3. si le voltage est en dessous d'une valeur, une alarme est générée
Jusqu'à présent, j'ai pu le faire, mais c'était plus du bricolage.... Aussi, les seuils étaient définis pour une station, alors que maintenant j'aimerais que les seuils soient définis pour une sonde, ce qui me semble plus logique
Maintenant, j'aimerais définir les seuils dans ma base de donnée, ainsi mon serveur pourra envoyer une "push notification" au smartphones, quand qu'une valeur atteindra le seuil.
Dans ma tables 'sensors', je peux ajouter un champs 'sensor_threshold' qui pourrait contenir une valeur unitaire (soit un nombre) pour les températures.
Mais en ce qui concerne le seuil des taux hydrique des sols, je peux ajouteur une valeur unitaire mais qui correspond à une gamme. Donc il me faudra une nouvelle table pour définir ces gammes. Exemple
id | gamme | label
===
1 | 10-30 | 10-30kpa
2 | 30-60 | 30-60kpa
3 | 60-100 | 60-100kpa
4 | 100-200 | 100-200kpa
5 | 30-100 | 30-100kpa
6 | 10-60 | 10-60kpa
7 | 10-100 | 10-100kpa
Améliorartions
Etant donné que j'ai d'autres types de station, comme une station météo avec beaucoup plus de sondes, si je veux mettre en place un seuil, pour un type de sonde, pourquoi pas donner la possiblité d'avoir des seuils pour tous les types de sondes, y compris celles des stations météo
Et là, si je veux faire bien, ca devient compliqué
Par exemple, pour la sonde 'Gauge' (arrosage), l'utilisateur peut vouloir recevoir une alarme si 1) c'est trop arrosé 2) ou pas assez arrosé OU si la vitesse du vent est ou la température est trop basse ou trop haute. etc.
Et là, je me demande, mais comment je vais faire mes nouvelles tables "thresholds" de ma base de données.
Réflexions...
En premiers, je pourrais définir des champs dans ma table 'sensors'
1. sensor_threshold_min
2. sensor_threshold_max
Si l'utilisateur veut être alarmé pour une température trop haute, il défini une valeur dans sonde_threshold_max, et met NULL dans sonde_threshold_min (pas 0 car 0 ca peut être une température à ne pas dépasser.
Ca pourrais aussi résoudre le problème concernant la gamme des taux hydrique des sol: "si on est en dehor de la gamme 30-60, une alarme est générée.
Idem pour la direction du vent: "si on est en dessous d'un degré, ou en dessus d'un degré"
La difficulté que je vois, c'est que chaque sonde ont des valeurs différentes:
Température: -10 à 50°
Vent: 0° à 360°
Vent: 0km/h à.. 150km/h
Rayonnement solaire: de... à ... 2/m2
arrosage: de 0mm à 30mm (ou plus)
Humidité: de 0% à 100%
Batterie: min 3.6V (pas de max)
Taux hydrique des sols: voir les gammes si dessus
Contraintes:
Pour la direction du vent, on ne peut pas définir une valeur suppérieure à 360° (N)
Pour la batterie, l'utilisateur ne peux pas définir une valeur. Elle est fixe à 3.6V
Pour le taux hydrique, l'utilisateur ne peux pas définir de gammes, mais il ne peut que choisir ce que l'app propose (voir ci-dessus)
Je disais donc que j'ai cette table 'sensors'
Dans l'état actuel, je pourrais donc ajouter des champs
1. sensor_threshold_min
2. sensor_threshold_max
et laisser l'utilisateur mettre ce qu'il veut, mais c'est pas génial, surtout concernant les contraites.
Question
Comment feriez-vous ceci?
Est-ce que je devrais arreter de compliquer les choses et établir les contraires au niveau du Front End, càd au niveau de l'application, sur le Smartphone?
Je préfère établir les contraintes au niveau de la base de données, comme cela, je peux les modifier sans devoir metre à jour l'App.
Mais comment feriez-vous ca?
Une table pour chaque type d'unité de mesures?
Mais comment associer ca à 'sensor_threshold_min' et 'sensor_threshold_max'
Votre point de vue, me serait d'une grande utilité.
Bon week-end
Partager