Exocet-Polytechnique / ExoPIBrain

2 stars 0 forks source link

Implémenter des niveaux d'alerte pour la durée de vie restante de la batterie #10

Open efondere opened 5 months ago

efondere commented 5 months ago

Les trois niveaux d'alerte sont (à afficher sur l'écran aussi):

  1. Attention (X%)
  2. Retour urgent (X%)
  3. Shutdown automatique par sécurité (X%)

Les pourcentages sont à déterminer. Il faut aussi implémenter un système pour détecter le niveau de charge de la batterie.

efondere commented 5 months ago

Tâches à effectuer:

efondere commented 4 months ago

Une petite idée pour afficher des messages autres que des données sur l'interface: Les exceptions que peuvent lancer certains capteurs/threads (et qui seront capturées plus loin, voir #2) seront dérivées d'une classe SensorError (ou un autre nom) qui contiendra un attribut interface_message_id. On pourra définir ces IDs dans le fichier de config du genre:

WARN_BATTERY_CHARGE = 0x0100
CRIT_BATTERY_CHARGE = 0x0101
BATT_SHUTDOWN = 0x0102

où le premier octet (0x01 dans tous les cas ici) contiendra un identifiant représentant une même source (la charge de la batterie dans notre cas). Cela pourrait être les manomètres, les températures, etc. Le deuxième représente le type de message pour cette source. Un ID plus élevé (ou plus faible, on peut décider de ça plus tard) indique que cette erreur est plus critique que les autres. Ainsi, si une interface reçoit deux message d'un même source, elle ne gardera que celle qui possède la plus grande sévérité. Ex. si on affichait déjà que la charge est dans la zone d'avertissement, mais qu'on atteint maintenant la zone critique, on effacera l'ancien avertissement pour afficher le message critique à la place. Ensuite, on pourra définir des message d'erreurs ainsi que la sévérité du message (pour la couleur ou le symbole utilisé dans l'interface) dans une dictionnaire séparé:

UI_MESSAGES = {
   WARN_BATTERY_CHARGE: ("Battery charge is low", "W", 5.0),
   CRIT_BATTERY_CHARGE: ("Battery charge is critically low", "W", -1),
   BATT_SHUTDOWN: ("Battery too low, boat is entering automatic shutdown", "E", -1),
}

Chaque id de message est donc une entrée du dictionnaire et est associé à un tuple de la forme: ("Message", "Sévérité pour l'interface", durée d'affichage) Un temps d'affichage de -1 indique que le message restera affiché de manière permanente.

On combinera aussi tout ça avec une méthode dispatch_alert dans la classe de l'interface pour qu'elle puisse être utilisée de l'extérieur comme c'était le cas ici: https://github.com/Exocet-Polytechnique/ExoPIBrain/blob/dd2cff85d5ef3e136ba06f976e7d651883ed7fa9/multithreading/consumers.py#L48-L53 (on passerait e.interface_message_id à la méthode plutôt que juste "warning" ou "alert")

efondere commented 4 months ago

https://github.com/Exocet-Polytechnique/ExoPIBrain/wiki/Format-&-gestion-d'erreurs