etm-powersync-plugins/openmeteo/CLAUDE_CODE_PROMPT_build_test_deb.md
Patrick Schurig 2b2cb19276 Add openmeteo integration plugin (site + PV plane)
- Weather/solar current conditions from Open-Meteo (Meteo-France model)
- Satellite-observed GHI + clear-sky index (MTG)
- Per-plane GTI with geographic azimuth convention (180=South)
- Self-hosted ready via baseUrl/satelliteBaseUrl plugin settings
2026-05-30 12:19:25 +02:00

4.5 KiB

Prompt Claude Code — build, test et packaging du module openmeteo

À coller dans Claude Code, à la racine du dépôt etm-powersync-plugins. Le module openmeteo/ existe déjà (.json, .h, .cpp, .pro, meta.json, README.md, openmeteo.png). Lis d'abord CLAUDE.md (conventions du repo) et le code existant avant de modifier quoi que ce soit.

Objectif

Faire compiler, tester manuellement, puis packager en .deb le plugin d'intégration nymea openmeteo, sans en changer le comportement fonctionnel décrit dans integrationpluginopenmeteo.cpp.

Étape 1 — Intégration au build

  1. Ajouter openmeteo à la liste SUBDIRS de nymea-plugins.pro (ordre alphabétique, comme les autres modules).
  2. Vérifier que openmeteo/openmeteo.pro inclut bien ../plugins.pri et QT *= network.

Étape 2 — Compilation et correction des constantes générées

  1. Compiler le module (QMake, dans l'arbre, Qt5 d'abord) :
    qmake && make -j$(nproc)
    
  2. plugininfo.h est généré à partir de integrationpluginopenmeteo.json par l'outil nymea. Ne pas l'éditer.
  3. Le .cpp référence des constantes (openMeteoSite*StateTypeId, openMeteoPlugin*ParamTypeId, openMeteoPvPlane*, dcOpenMeteo, etc.) déduites de la convention nymea. Comparer ces noms au plugininfo.h réellement généré et corriger toute divergence dans le .cpp (jamais dans le header généré). Lister les corrections faites.
  4. Corriger les éventuels warnings de compilation (variables inutilisées, signedness, etc.).
  5. Rejouer le build en Qt6 et corriger les différences éventuelles.

Étape 3 — Vérification du point satellite

Le .cpp contient un TODO(verify) dans updateSiteSatellite() : l'endpoint satellite ({satelliteBaseUrl}/v1/archive, modèle satellite_radiation_seamless) doit accepter current=shortwave_radiation,shortwave_radiation_clear_sky.

  1. Tester l'URL réellement construite (avec une vraie lat/lon, p.ex. 48.9 / 7.85) avec curl.
  2. Si current= n'est pas supporté : basculer sur hourly= et prendre le dernier échantillon non nul (garder le calcul clearSkyIndex = ghiObs/clearSky, garde clearSky > 20).
  3. Documenter le comportement retenu en commentaire.

Étape 4 — Test manuel (fonctionnel)

Installer le plugin localement et, via nymea-cli ou l'app :

  1. Ajouter un thing openMeteoSite (latitude 48.9, longitude 7.85). Vérifier qu'au premier cycle se remplissent : temperature, windSpeed, cloudiness, humidity, pressure, weatherCondition, ghi, dni, dhi, terrestrialRadiation, sunriseTime, sunsetTime, daylight, et les daily (temperatureMin/Max, shortwaveRadiationSumToday).
  2. Vérifier les states satellite : ghiObserved, clearSkyGhi, clearSkyIndex.
  3. Ajouter un thing openMeteoPvPlane enfant du site (tilt 30, azimuth 180 = plein sud). Vérifier gtiNow cohérent (proche du GHI à midi pour un plan ~sud).
  4. Vérifier la conversion d'azimut : un pan azimuth 90 (Est) doit produire un GTI matinal supérieur à un pan azimuth 270 (Ouest) le matin.
  5. Contrôle de nuit : daylight=false, ghi≈0, clearSkyIndex=0, pas de division par zéro, pas de crash.
  6. Déclencher l'action refreshWeather sur le site et vérifier que site + pans se mettent à jour immédiatement.

Étape 5 — Packaging .deb

  1. Utiliser les dossiers debian-qt5 / debian-qt6 existants du dépôt (le lien debian -> debian-qt5 est en place).
  2. Vérifier/compléter le debian/control et les fichiers d'install pour inclure le paquet nymea-plugin-openmeteo (binaire du plugin + integrationpluginopenmeteo.json + ressources).
  3. Construire le paquet (p.ex. dpkg-buildpackage -b -us -uc ou la cible utilisée par le repo) et vérifier que le .deb contient bien la librairie du plugin et son métadonnée.
  4. Indiquer le nom exact du .deb produit et son emplacement.

Contraintes

  • Ne pas modifier les autres plugins de l'arbre.
  • Aucune logique propriétaire (cf. CLAUDE.md / frontière de licence) : ce plugin reste une source de données.
  • Garder le code et les commentaires en anglais (convention nymea-plugins).
  • Montrer chaque diff avant de l'appliquer ; procéder étape par étape.

Livrables attendus

  • Module compilé en Qt5 et Qt6, sans warning.
  • Liste des corrections de constantes (le cas échéant).
  • Comportement satellite confirmé/ajusté.
  • Compte rendu du test manuel (states remplis jour/nuit, GTI cohérent par orientation).
  • .deb nymea-plugin-openmeteo produit, nom et emplacement indiqués.