Patrick Schurig a6d3c3e1c2 fix(openmeteo): la doc promettait un arrondi que le paquet testing ne fait pas
Le canal testing sert powersync-plugin-openmeteo 1.15.2+etm1 (publié le
2026-09-08 à 09:49, avant le Contrat A). Cette version envoie les coordonnées
du site sans arrondi ; l'arrondi à deux décimales n'existe que depuis etm2,
et etm2 à etm16 ne sont dans aucun canal.

La fiche OpenMeteo, la page Prévision PV et la FAQ (trois langues) disaient
« arrondies à environ 1 km » sans condition. Elles le qualifient maintenant
par version, et la fiche porte un avertissement en tête : version décrite à
partir de 1.15.2+etm2.

PORTING_STATUS reste `testing` : c'est exact. TODO : retirer ces
avertissements quand etm16 ou suivant entre dans testing.

Vérifié comme en CI : génération, --check et mkdocs build --strict passent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 23:04:58 +02:00

236 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# OpenMeteo
<!-- BEGIN GENERATED: __badges_openmeteo__ -->
<span class="badge testing">TESTING</span> <span class="badge origin-etm">ETM</span> <span class="badge consumer">CONSUMER</span>
Obtenir les données météo courantes pour votre site.
<!-- END GENERATED -->
Le plugin OpenMeteo fournit à la box les **prévisions météo et solaires** de votre
site : météo du jour et du lendemain, et production photovoltaïque prévue pour chaque
orientation de toiture. Les données viennent du service public
[Open-Meteo](https://open-meteo.com), interrogé directement par la box, **sans compte
ni clé d'API** et sans passer par un service ETM.
Paquet : `powersync-plugin-openmeteo`.
!!! warning "Version décrite : à partir de `1.15.2+etm2`"
La version publiée dans le canal **testing** est aujourd'hui `1.15.2+etm1`, antérieure.
Elle envoie les coordonnées du site **sans arrondi**, et une partie des fonctions
décrites ici n'y figure pas. Les versions qui les portent sont en beta et ne sont
pas encore publiées dans un canal du dépôt APT.
## 1. Ce que le plugin publie
Le plugin crée deux types d'objets :
- un **site** (`Open-Meteo site`) : météo de l'emplacement (température, nuages,
vent, humidité…), irradiance solaire prévue, lever et coucher du soleil, et une
observation satellite de l'heure écoulée ;
- un ou plusieurs **plans PV** (`Open-Meteo PV plane`), rattachés au site : un par
orientation de toiture. Chaque plan publie l'irradiance prévue sur ses panneaux et
la production prévue qui en découle, pour l'heure courante, les 3, 6 et 12 heures à
venir, le reste de la journée et le lendemain.
Le moteur d'énergie additionne les plans du site désigné et l'application affiche la
courbe obtenue à côté des mesures, avec la météo heure par heure — voir
[Prévision de production PV](../../fonctionnalites/prevision-pv.md).
## 2. Ajouter le site
En mode installateur, ajoutez un appareil **Open-Meteo site** (voir
[Ajouter un appareil](../../installation/application.md)) et renseignez :
| Champ | Contenu |
| --- | --- |
| `Latitude`, `Longitude` | Position du site, en degrés décimaux |
| `Elevation (m, optional)` | Altitude du site en mètres. Facultative : laissée à `0`, Open-Meteo utilise l'altitude de son propre modèle de terrain. À renseigner en montagne ou en vallée encaissée, où la température prévue en dépend. |
Le site n'est pas découvert automatiquement : on le crée à la main, une fois par
emplacement.
## 3. Ajouter les plans PV
Une fois le site créé, ajoutez un appareil **Open-Meteo PV plane** : la découverte
propose un plan pour chaque site existant. Créez **un plan par orientation** — une
toiture est-ouest donne deux plans.
| Champ | Contenu |
| --- | --- |
| `Tilt (deg, 0=horizontal)` | Inclinaison des panneaux, en degrés : `0` = à plat, `90` = vertical |
| `Azimuth (deg geographic, 180=South)` | Orientation, en **convention géographique** : `180` = sud, `90` = est, `270` = ouest |
| `Peak power kWp` | Puissance crête des panneaux de ce plan |
| `Performance ratio (declared, not learned)` | Rendement global de l'installation, **déclaré** par l'installateur (il n'est pas appris par la box). Laissé à `1.0`, la production prévue est surestimée. |
Selon la version du plugin, deux champs issus de la fiche technique des modules
complètent le plan : `Power temperature coefficient (%/K, declared, not learned)`
(par défaut −0,37 %/K) et `NOCT (°C, declared, not learned)` (par défaut 45 °C). Ils servent à corriger la production prévue
quand les modules chauffent.
!!! warning "Attention à l'azimut"
D'autres outils comptent l'azimut à partir du sud (`0` = sud). Ici, `0` est le
**nord** : un azimut de `0` saisi pour une toiture plein sud donne une production
prévue fortement sous-estimée.
## 4. Une prévision, jamais une mesure
Tout ce que publie ce plugin est une **prévision météo** convertie en production, ou
une **observation satellite** datant d'environ une heure. Ce n'est jamais une mesure
de votre installation : la production réelle se lit sur l'onduleur ou le compteur.
C'est pourquoi les grandeurs sont nommées `forecast…` (prévision) ou `observed…`
(observation satellite) : il n'existe pas de `pvPower` dans ce plugin, seulement
`forecastPvPower`.
La production prévue est calculée simplement : irradiance prévue × puissance crête ×
rendement déclaré. Elle **ne tient pas compte** de l'ombrage, de l'encrassement des
panneaux ni, au niveau du plugin, de l'écrêtage de l'onduleur (le moteur applique le
plafond onduleur à la somme des plans, s'il est renseigné). L'écart va donc toujours dans le même sens :
**la prévision est optimiste**. 4 kW prévus ne sont pas 4 kW produits.
La **dispersion météo** publiée pour aujourd'hui et demain (en %) dit à quel point la
météo elle-même est incertaine. Elle ne dit rien de la justesse de la production
prévue : par grand beau temps stable, elle est faible alors que la surestimation, elle,
est à son maximum.
## 5. Rafraîchissement et coupure internet
Les modèles météo ne publient pas plus souvent que cela : la prévision et
l'observation satellite sont relues **toutes les heures**, la dispersion **toutes les
3 heures**. L'action `Refresh` du site force les trois.
Si Open-Meteo ne répond pas, le plugin réessaie après 5 minutes, puis 10, 20, 40… sans
dépasser le rythme normal de la source, et reprend son rythme dès la première réponse.
Après **3 heures** sans prévision reçue, l'état `Forecast valid` passe à faux.
Une coupure internet ne bloque rien : la box continue de piloter avec ses mesures, la
sécurité reste assurée, et seules les prévisions se dégradent jusqu'au retour de la
connexion.
## 6. Ce qui quitte la box
Pour obtenir ses prévisions, la box envoie à Open-Meteo **uniquement** :
- les coordonnées du site, **arrondies à deux décimales** (environ 1 km) : assez
précises pour la météo, trop floues pour désigner une adresse. ⚠️ Arrondi présent à
partir de `1.15.2+etm2` ; la version `1.15.2+etm1` du canal testing envoie les
coordonnées telles que saisies ;
- l'altitude du site, si vous l'avez renseignée ;
- l'inclinaison et l'azimut de chaque plan PV.
Aucune mesure, aucune consommation et aucune donnée d'usage n'est transmise. La
puissance crête et le rendement restent sur la box : la conversion en production se
fait localement.
## 7. Usage commercial : instance Open-Meteo dédiée
L'API publique d'Open-Meteo est réservée à un **usage non commercial**. Pour un
déploiement commercial, les réglages du plugin permettent de pointer vers une instance
Open-Meteo auto-hébergée (`Base URL (forecast)`, `Base URL (satellite radiation)`,
`Base URL (ensemble spread)`) ou de renseigner une clé pour l'offre commerciale
d'Open-Meteo (`API key (commercial endpoint, optional)`). Sans modification, le plugin
interroge l'API publique.
## 8. Sources des données
Données météo de Météo-France, rayonnement satellite d'EUMETSAT, fournis par
[Open-Meteo](https://open-meteo.com) sous licence CC-BY 4.0.
---
## Référence
<!-- BEGIN GENERATED: integrationpluginopenmeteo.json -->
!!! info "Libellés de l'application"
Les clés et libellés ci-dessous sont ceux affichés par
l'application, **en anglais**. Ils sont laissés tels quels pour
que vous les retrouviez à l'identique à l'écran.
**Fabricant :** Open-Meteo
**Plugin :** `OpenMeteo`
#### Modèles pris en charge
| Modèle | Rôle | Transport | Ajout | Grandeurs |
| --- | --- | --- | --- | --- |
| **Open-Meteo site** | weather, daylightsensor | — | Manual | 29 |
| **Open-Meteo PV plane** | — | — | Auto-discovery | 15 |
#### Détail par modèle
??? abstract "Open-Meteo site — `openMeteoSite`"
_Réglages :_
| Clé | Libellé | Type | Plage | Défaut | Lecture seule |
| --- | --- | --- | --- | --- | --- |
| `name` | Name | QString | — | — | non |
| `latitude` | Latitude | double | — | `48.9` | non |
| `longitude` | Longitude | double | — | `7.85` | non |
| `elevation` | Elevation (m, optional) | double | — | `0` | non |
_Grandeurs mesurées :_
| Clé | Grandeur | Type | Unité |
| --- | --- | --- | --- |
| `weatherDescription` | Weather description | QString | — |
| `weatherCondition` | Weather condition | QString | — |
| `updateTime` | Last update | int | UnixTime |
| `temperature` | Temperature | double | DegreeCelsius |
| `temperatureMin` | Minimum temperature (today) | double | DegreeCelsius |
| `temperatureMax` | Maximum temperature (today) | double | DegreeCelsius |
| `humidity` | Humidity | int | Percentage |
| `pressure` | Pressure | double | HectoPascal |
| `windSpeed` | Wind speed | double | MeterPerSecond |
| `windDirection` | Wind direction | int | Degree |
| `cloudiness` | Cloudiness | int | Percentage |
| `snowfall` | Snowfall (preceding hour) | double | CentiMeter |
| `forecastGhi` | GHI forecast (W/m²) | double | — |
| `forecastDni` | DNI forecast (W/m²) | double | — |
| `forecastDhi` | DHI forecast (W/m²) | double | — |
| `terrestrialRadiation` | TOA radiation (W/m2) | double | — |
| `forecastGhiSumToday` | GHI sum forecast today (kWh/m²) | double | — |
| `observedGhi` | GHI observed, satellite (W/m²) | double | — |
| `observedClearSkyGhi` | Clear-sky GHI observed, satellite (W/m²) | double | — |
| `observedClearSkyIndex` | Clear-sky index kt (observed) | double | — |
| `sunriseTime` | Sunrise time | int | UnixTime |
| `sunsetTime` | Sunset time | int | UnixTime |
| `daylight` | Daylight | bool | — |
| `forecastModel` | Forecast model that answered | QString | — |
| `forecastValid` | Forecast valid | bool | — |
| `forecastTendencyToday` | Sky tendency forecast today | QString | — |
| `observedTime` | Satellite sample time | int | UnixTime |
| `forecastIssuedAt` | Model run initialisation — revision key | int | UnixTime |
| `forecastAvailableAt` | Model run publication — informational, never a revision key | int | UnixTime |
??? abstract "Open-Meteo PV plane — `openMeteoPvPlane`"
_Réglages :_
| Clé | Libellé | Type | Plage | Défaut | Lecture seule |
| --- | --- | --- | --- | --- | --- |
| `name` | Name | QString | — | — | non |
| `tilt` | Tilt (deg, 0=horizontal) | double | 0–90 | `30` | non |
| `azimuth` | Azimuth (deg geographic, 180=South) | double | 0–360 | `180` | non |
| `kwp` | Peak power kWp | double | — | `0` | non |
| `performanceRatio` | Performance ratio (declared, not learned) | double | 0.1–1.0 | `1.0` | non |
_Grandeurs mesurées :_
| Clé | Grandeur | Type | Unité |
| --- | --- | --- | --- |
| `forecastGtiSource` | GTI forecast, source quantity (W/m²) | double | — |
| `updateTime` | Last update | int | UnixTime |
| `forecastPvPower` | PV power forecast | double | Watt |
| `forecastEnergyNext3h` | PV energy forecast, next 3 h (rolling, may cross midnight) | double | KiloWattHour |
| `forecastEnergyNext6h` | PV energy forecast, next 6 h (rolling, may cross midnight) | double | KiloWattHour |
| `forecastEnergyNext12h` | PV energy forecast, next 12 h (rolling, may cross midnight) | double | KiloWattHour |
| `forecastEnergyRestOfDay` | PV energy forecast, now until sunset | double | KiloWattHour |
| `forecastEnergyTomorrow` | PV energy forecast, tomorrow | double | KiloWattHour |
| `forecastPeakTime` | Forecast peak irradiance time today | int | UnixTime |
| `observedGti` | GTI observed, satellite (W/m²) | double | — |
| `observedGtiTime` | Satellite sample time | int | UnixTime |
| `forecastWeatherSpreadTodayPercent` | GTI weather spread today — qualifies weather only, not PV accuracy | double | Percentage |
| `forecastWeatherSpreadTomorrowPercent` | GTI weather spread tomorrow — qualifies weather only, not PV accuracy | double | Percentage |
| `forecastSpreadModel` | Ensemble model used for spread | QString | — |
| `forecastCurveTransport` | Forecast curve — transport channel, not a value | QVariantMap | — |
<!-- END GENERATED -->