# OpenMeteo TESTING ETM CONSUMER Obtenir les données météo courantes pour votre site. 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`. ## 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. L'application ETM-PowerSync affiche ces prévisions à côté des mesures (production prévue sur les graphes, météo heure par heure). ## 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 de l'écrêtage de l'onduleur. 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 ; - 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 !!! 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 | — |