Aller au contenu

Exemple : météo et notifications

Le module METEO ne pilote rien. Il met en forme les données du connecteur Météo pour les afficher sur un synoptique et les envoyer par notification.

Il illustre trois notions : les paramètres de module, les visuels de type cadran, et les messages à contenu variable.


Le code

/* DLS de gestion de la météo                                                  */
/* Ce module s'appuie sur le thread METEO_API pour notifier la météo du jour   */

#param PARAM_METEO_TIME        (libelle="Heure de notification de la météo du jour",
                                defaut="07:30");
#param PARAM_METEO_API_TECH_ID (libelle="Tech_id du DLS gérant l'accès à l'API météo",
                                defaut="METEO_API");

#define VISU_DAY0_TEMP_MIN <-> _I(forme="cadran", mode="texte",
                                  input=METEO_API:DAY0_TEMP_MIN);
#define VISU_DAY0_TEMP_MAX <-> _I(forme="cadran", mode="texte",
                                  input=METEO_API:DAY0_TEMP_MAX);

#define VISU_DAY0_PROBA_PLUIE <-> _I(forme="cadran", mode="progress-vor",
                                     min=0.0, max=100.0,
                                     seuil_nh=30.0, seuil_nth=70, decimal=0,
                                     input=METEO_API:DAY0_PROBA_PLUIE);
#define VISU_DAY0_PROBA_GEL   <-> _I(forme="cadran", mode="progress-vor",
                                     min=0.0, max=100.0,
                                     seuil_nh=30.0, seuil_nth=70, decimal=0,
                                     input=METEO_API:DAY0_PROBA_GEL);

#define MSG_SUNRISE <-> _MSG(libelle="Le soleil se lève",    notif_sms);
#define MSG_SUNSET  <-> _MSG(libelle="Le soleil se couche",  notif_sms);

#define MSG_METEO_DU_JOUR_1 <-> _MSG(type=etat,
    libelle="De $METEO_API:DAY0_TEMP_MIN à $METEO_API:DAY0_TEMP_MAX, \
gel=$METEO_API:DAY0_PROBA_GEL, pluie=$METEO_API:DAY0_PROBA_PLUIE",
    notif_sms);

#define MSG_METEO_DU_JOUR_2 <-> _MSG(type=etat,
    libelle="vents $METEO_API:DAY0_VENT_A_10M, rafale à $METEO_API:DAY0_RAFALE_VENT",
    notif_sms);

- METEO_API:SUNRISE -> MSG_SUNRISE;
- METEO_API:SUNSET  -> MSG_SUNSET;
- _HEURE = 07:00    -> MSG_METEO_DU_JOUR_1, MSG_METEO_DU_JOUR_2;

Ce qu'il faut en retenir

L'en-tête documentaire

Les quelques lignes de commentaire en tête indiquent à quoi sert le module, de quoi il dépend et qui l'a modifié. C'est peu coûteux à écrire, et déterminant six mois plus tard.

#param : les réglages sans recompilation

#param PARAM_METEO_TIME (libelle="Heure de notification", defaut="07:30");

Un paramètre est un réglage modifiable depuis la Console, sans toucher au code ni recompiler. Il apparaît dans la page Paramètres du D.L.S du module.

Tout ce qu'un exploitant pourrait vouloir changer doit être un #param

Heures de déclenchement, seuils, durées, tech_id d'un module partenaire. Une valeur écrite en dur dans le code impose une intervention technique à chaque ajustement.

Voir Paramètres de module.

Un visuel qui affiche une valeur

#define VISU_DAY0_TEMP_MIN <-> _I(forme="cadran", mode="texte",
                                  input=METEO_API:DAY0_TEMP_MIN);

L'option input lie le visuel à un registre ou une entrée analogique : le cadran affiche directement la valeur, sans aucune règle d'activation.

Un visuel à seuils colorés

#define VISU_DAY0_PROBA_PLUIE <-> _I(forme="cadran", mode="progress-vor",
                                     min=0.0, max=100.0,
                                     seuil_nh=30.0, seuil_nth=70, decimal=0,
                                     input=METEO_API:DAY0_PROBA_PLUIE);
Option Rôle
min, max Bornes de l'échelle
seuil_nh Seuil « niveau haut » — passage en orange
seuil_nth Seuil « niveau très haut » — passage en rouge
decimal Nombre de décimales affichées

decimal=0 évite d'afficher « 42,7 % de probabilité de pluie », ce qui suggère une précision que la prévision n'a pas.

Des messages à contenu variable

libelle="De $METEO_API:DAY0_TEMP_MIN à $METEO_API:DAY0_TEMP_MAX"

La syntaxe $MODULE:OBJET insère la valeur courante dans le texte, au moment de l'émission. Un message utile est un message qui porte la donnée : « Il fait 3 degrés » vaut mieux que « Température basse ».

Déclencher à heure fixe

- _HEURE = 07:00 -> MSG_METEO_DU_JOUR_1, MSG_METEO_DU_JOUR_2;

Une incohérence à corriger dans cet exemple

Le module déclare PARAM_METEO_TIME avec 07:30 par défaut… mais la règle utilise _HEURE = 07:00 en dur. Le paramètre est donc sans effet.

C'est une erreur fréquente : déclarer un paramètre puis oublier de l'utiliser. Vérifiez systématiquement que chaque #param est réellement référencé.

Scinder les messages longs

Deux messages plutôt qu'un seul : un SMS est limité en longueur, et un message tronqué perd précisément sa fin, souvent la plus informative.


Réagir aux éphémérides

METEO_API:SUNRISE et METEO_API:SUNSET sont des impulsions émises au lever et au coucher du soleil, calculées pour la commune configurée. Elles sont bien plus pertinentes qu'une heure fixe pour piloter un éclairage extérieur ou des volets.

- METEO_API:SUNSET -> JARDIN_ECL:ODLS_WANT_ON;

Pour aller plus loin