- 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
67 lines
4.5 KiB
Markdown
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.
|