Bâbord Amures : une station météo personnelle à Guidel, du capteur Ecowitt au tableau de bord temps réel

Chez Cycle X, la rigueur technique ne s’arrête pas aux projets clients. Bâbord Amures est notre station météo personnelle, installée à Guidel (Morbihan, Bretagne) : un boîtier Misol/Ecowitt GW2002 dans le jardin, un serveur Node.js qui encaisse ses relevés depuis plusieurs mois, et un site public qui affiche tout ça en direct — température, vent, pression, nébulosité, et quelques capteurs qu’on a ajoutés nous-mêmes à partir d’une simple webcam. C’est un projet hobby, mais mené avec la même discipline que nos développements pour l’industrie du vélo : pipeline de données propre, statistiques correctement posées, et hébergement volontairement simple.

Voir le tableau de bord en direct →

Un tableau de bord météo en direct, sans fioritures

La page d’accueil affiche le relevé courant de la station météo personnelle de Guidel : température extérieure et intérieure, humidité, point de rosée et humidex (avec son verdict en clair — « confortable », etc.), vent et rafales avec la rose des vents, pression atmosphérique et sa tendance sur 3 h, rayonnement solaire et index UV, et nébulosité en octas — l’unité internationale de couverture nuageuse, de 0 (ciel dégagé) à 8 (couvert). Chaque grandeur est comparée à sa normale saisonnière, avec un petit indicateur d’écart. Les cumuls de précipitations (jour, semaine, mois, année) et l’image de la webcam du jardin complètent la vue.

Du capteur à la base de données : le protocole Ecowitt

Techniquement, tout part de la passerelle GW2002, qui envoie un rapport HTTP au format Ecowitt vers le serveur toutes les quelques minutes, authentifié par une clé partagée (PASSKEY). Le serveur convertit les unités américaines du protocole — °F→°C, mph→km/h, in→mm, inHg→hPa — écrit le dernier relevé dans un fichier JSON pour un accès instantané, et l’insère dans une base SQLite conservée sans aucune purge : tout l’historique depuis la mise en service est disponible, ce qui permet ensuite des comparaisons inter-annuelles jour par jour. L’ensemble tourne dans un unique process Express, sans file d’attente ni broker — un choix assumé pour le volume de données d’une station personnelle.

17,9 °C un lundi matin d’août : chaud, normal, ou juste dans la moyenne ?

Une température brute ne dit rien sans contexte. Plutôt qu’un simple z-score, la station ajuste une loi skew-normale (asymétrique) sur l’historique horaire 1991-2020 du point (données Open-Meteo Archive), découpé en 4 saisons météorologiques (DJF/MAM/JJA/SON) croisées avec 4 tranches horaires (nuit/matin/après-midi/soir) — soit 16 lois ajustées, une par combinaison. Ce découpage est nécessaire : sans lui, le cycle jour/nuit crée un mélange bimodal qui n’a rien à voir avec un vrai régime météo et fausse le percentile selon l’heure de consultation. Le relevé courant tombe alors sur cette courbe avec son percentile affiché en clair (« plus chaud que 82,6 % des relevés de cette saison/tranche horaire ») — une lecture immédiate, préférée volontairement à un modèle bayésien plus sophistiqué mais disproportionné pour l’usage.

Une station qui vérifie ses propres mesures

Un capteur bon marché dérive, se salit, ou finit à l’ombre d’une haie qui a poussé. Pour garder un œil dessus, la station va chercher les messages METAR de la station météorologique de référence la plus proche — Lann-Bihoué (LFRH), à environ 4 km — et affiche l’écart en temps réel sur la température, la température max, la pression et le vent. C’est un module isolé, qui lit la base locale en lecture seule sans jamais y écrire, pensé comme un simple contrôle qualité gratuit plutôt que comme une source de vérité.

La webcam sert aussi de capteur de nébulosité

C’est le morceau le plus original du projet : la webcam du jardin n’est pas qu’un joli flux vidéo, elle alimente un algorithme de classification du ciel maison. Chaque image est convertie en HSV (teinte/saturation/valeur), pixel par pixel, dans une zone masquée pour exclure toiture et végétation : teinte bleu-cyan à bleu-violet suffisamment saturée et lumineuse → ciel ; pixel peu saturé et clair → nuage blanc ; peu saturé et sombre → nuage sombre. Le taux de couverture nuageuse qui en résulte est ensuite converti en octas. Une zone sensible autour du soleil est surveillée séparément : au-delà de 5 % puis 10 % de pixels saturés (surexposés) dans cette zone, un indice de confiance dégressif prévient que le halo du soleil peut fausser la lecture. Une page de diagnostic interne, non liée depuis le site public, permet de visualiser cette classification pixel par pixel et d’affiner les seuils.

Page de diagnostic de la détection de nébulosité par analyse HSV de la webcam de Bâbord Amures
Outil de diagnostic interne : classification pixel par pixel (ciel, nuage fin, nuage sombre) utilisée pour régler les seuils HSV de l’algorithme.

Elle écoute aussi : une classification des sons ambiants par IA

Le micro de la webcam est traité de la même façon. Un flux audio continu (lu en local en SRT, pour éviter la redirection anti-hotlink du flux public) est surveillé en niveau dBFS avec seuils de déclenchement et d’hystérésis : au-dessus d’un seuil, un évènement démarre ; il se termine après un temps de silence suffisant. Chaque évènement capturé est ensuite classifié par YAMNet, un modèle audio embarqué (TensorFlow Lite) qui reconnaît 521 classes issues d’AudioSet — regroupées côté station en 7 catégories utiles : cloche, voiture, voix, oiseaux, pluie, vent, orage (le reste tombe en « autre »). En parallèle, un échantillonnage continu du niveau ambiant (indépendant des évènements déclenchés) permet de calculer un niveau de fond calme par journée, d’où un indice de pollution sonore exprimé en pourcentage de ce niveau de référence.

Historique, comparaisons inter-annuelles et rose des vents

Au-delà du relevé courant, la page propose des fenêtres glissantes (24 h / 7 j / 30 j / 1 an) ou une journée calendaire précise dans le passé, avec un graphique par grandeur : température/humidité, vent, pluie, pression, UV/rayonnement solaire, nébulosité, niveau sonore par catégorie et indice de pollution sonore, plus une rose des vents. Un outil de comparaison inter-annuelle superpose une plage de dates avec les mêmes dates des années précédentes, jour par jour — rendu possible uniquement parce que la base SQLite ne purge jamais son historique.

Grille de graphiques historiques de la station météo Bâbord Amures : nébulosité, niveau sonore, température, vent, pluie, pression, UV et rose des vents
Nébulosité, niveau sonore par catégorie, pollution sonore, température/humidité, vent, pluie, pression, UV, rose des vents et comparaisons inter-annuelles — tous générés depuis l’historique complet en base.

Où sont le soleil et la lune ?

Un dernier module, plus ludique : une vue 3D interactive du ciel au-dessus de Guidel, avec la position réelle du soleil et de la lune (azimut, élévation), la phase et le taux d’illumination lunaire, et les heures de lever/coucher — calculés directement à partir des coordonnées GPS de la station et de la date, sans dépendance externe (algorithme solaire classique, dans la lignée de SunCalc).

Vue 3D interactive de la position du soleil et de la lune au-dessus de Guidel, station météo Bâbord Amures
Position réelle du soleil et de la lune au-dessus de Guidel, recalculée à partir des coordonnées GPS de la station.

Sous le capot : un hébergement volontairement simple

Pas de Kubernetes ni de microservices pour une station météo de jardin : un unique process Node.js/Express, hébergé sur un Plesk mutualisé et géré par Phusion Passenger — c’est Plesk/Apache qui termine le TLS et relaie vers l’application, sans systemd ni reverse-proxy à maintenir. Pas de CI/CD : les fichiers modifiés sont déployés par simple copie, ce qui est largement suffisant pour un projet à ce stade. C’est un choix de proportionnalité assumé — la même question qu’on se pose pour chaque brique d’un projet client : quel niveau d’ingénierie sert réellement l’objectif, sans en faire ni trop, ni trop peu.

Un projet personnel, la même exigence que pour nos clients

Bâbord Amures n’a pas vocation à devenir un produit : c’est un terrain d’expérimentation où l’on applique, pour le plaisir, les mêmes réflexes que sur CRM Cycles — pipelines de données propres, statistiques posées plutôt qu’approximatives, intégration de protocoles et de matériel tiers (ici une passerelle Ecowitt, ailleurs des tags Bluetooth ou une caisse certifiée NF525). Si vous avez un projet qui demande de faire dialoguer du matériel, des flux de données en direct et une interface claire, c’est exactement notre terrain de jeu.

Voir la station météo de Guidel en direct →

Retour en haut