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

67 lines
4.5 KiB
Markdown

# 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.