Files
jardin/prevision meteo/consigne.md
2026-02-22 15:05:40 +01:00

7.0 KiB
Raw Permalink Blame History

consigne.md — Scraping / Collecte des prévisions météo (Open-Meteo)

Objectif

Mettre en place une collecte automatique des données météo de prévision (et optionnellement dhistorique) depuis Open-Meteo pour alimenter un calendrier météo dans lapplication jardin.

Le système doit :

  • récupérer les prévisions (horizon configurable, ex. 7 à 16 jours)
  • stocker les données dans un format exploitable (JSON + SQLite conseillé)
  • pouvoir recalculer/mettre à jour chaque jour sans dupliquer inutilement
  • gérer correctement le fuseau Europe/Paris
  • fournir une structure de données stable pour lUI (calendrier jour + détail horaire)

Source de données

API Open-Meteo (sans clé)

  • Endpoint prévisions : https://api.open-meteo.com/v1/forecast
  • Endpoint historique (optionnel) : https://api.open-meteo.com/v1/archive
  • Format : JSON

Variables recommandées (prévisions) :

  • hourly :
    • temperature_2m
    • precipitation_probability
    • precipitation
    • relativehumidity_2m
    • windspeed_10m
    • winddirection_10m
    • cloudcover
    • weathercode
  • daily :
    • temperature_2m_max
    • temperature_2m_min
    • precipitation_sum
    • precipitation_probability_max
    • windspeed_10m_max
    • sunrise
    • sunset
    • weathercode

Remarques :

  • Toujours inclure timezone=Europe/Paris
  • Toujours inclure timeformat=iso8601 (par défaut)
  • Conserver lélévation renvoyée (utile pour contexte jardin)

Documentation :


Paramètres de localisation

Localisation cible : Messinhac Bessamorel (ou proche).

Le système doit permettre :

  • configuration par latitude/longitude
  • stockage de la localisation dans un fichier config.yml (ou .env)

Exemple :

  • latitude: 45.05
  • longitude: 3.48

Requêtes à implémenter

1) Prévisions quotidiennes + horaires (une seule requête)

Exemple curl (référence) :

curl "https://api.open-meteo.com/v1/forecast?latitude=45.05&longitude=3.48&hourly=temperature_2m,precipitation_probability,precipitation,relativehumidity_2m,windspeed_10m,winddirection_10m,cloudcover,weathercode&daily=temperature_2m_max,temperature_2m_min,precipitation_sum,precipitation_probability_max,windspeed_10m_max,sunrise,sunset,weathercode&timezone=Europe/Paris&forecast_days=16"

Règles :

forecast_days configurable (7/10/16)

si forecast_days absent, Open-Meteo peut renvoyer une valeur par défaut (éviter : toujours préciser)

2) Historique (optionnel) pour “ce qui sest réellement passé”

Exemple curl :

curl "https://api.open-meteo.com/v1/archive?latitude=45.05&longitude=3.48&start_date=2026-01-01&end_date=2026-02-21&daily=temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Europe/Paris"

Règles :

requête par tranche (ex. mensuelle) pour éviter des payloads trop gros

historiser “source=archive” vs “source=forecast”

Exigences de stockage (recommandé)
1) JSON brut (cache)

Conserver la réponse JSON brute pour audit/debug :

data/cache/openmeteo_forecast_<YYYY-MM-DD>.json

Conserver un historique minimal des runs (ex. 30 derniers) :

rotation ou purge automatique

2) SQLite (données normalisées)

Créer 2 tables :

Table meteo_daily

date (YYYY-MM-DD) PRIMARY KEY

tmin_c, tmax_c

precip_mm (cumul)

precip_prob_max_pct

wind_max_kmh

sunrise_local, sunset_local

weathercode

source (forecast|archive)

fetched_at (timestamp)

lat, lon, elevation

Table meteo_hourly

datetime_local (YYYY-MM-DDTHH:MM) PRIMARY KEY

temp_c

precip_mm

precip_prob_pct

humidity_pct

wind_kmh

wind_dir_deg

cloud_pct

weathercode

source (forecast|archive)

fetched_at

lat, lon, elevation

Règles dupsert :

si source=forecast : écraser les mêmes timestamps lors dun nouveau run (les prévisions changent)

si source=archive : ne pas écraser si déjà présent (ou écraser seulement si “qualité” supérieure)

Normalisation / conversions

Open-Meteo renvoie souvent les vitesses en km/h selon endpoint/paramètre, vérifier les unités :

lire hourly_units et daily_units dans la réponse

stocker les unités (au moins en logging)

conserver les dates en timezone Europe/Paris pour affichage calendrier

Plan de collecte (cron)

Prévisions :

fréquence : 1 fois par jour (ex. 06:10 Europe/Paris)

stocker fetched_at pour savoir quand la prévision a été téléchargée

Historique (optionnel) :

1 fois par jour pour la veille (ex. récupérer “hier” en archive) afin de figer le “réel”

ou batch mensuel si besoin de rattrapage

Contrôles qualité (obligatoires)

Après chaque run :

vérifier que daily.time contient au moins 7 jours

vérifier cohérence : tmin <= tmax

vérifier que les tableaux time et temperature_2m ont la même longueur

si champs manquants : log derreur + sauvegarde JSON brute + arrêt gracieux

Sorties attendues pour lUI
Vue calendrier (jour)

Pour chaque jour :

date

Tmin/Tmax

pluie cumulée

probabilité max pluie

icône/code météo (weathercode)

lever/coucher du soleil

badges : gel (tmin <= 0), pluie (precip_mm > 0), vent fort (wind_max_kmh > seuil)

Vue détail (horaire)

Pour une date sélectionnée :

liste des heures (locales)

température + probabilité pluie + pluie mm + vent + humidité + nuages

Notes sur weathercode

Open-Meteo utilise un weathercode (WMO).
Le projet doit :

stocker le code brut

fournir une table de mapping côté UI (code -> libellé FR + icône)

Livrables

scripts/fetch_openmeteo_forecast.py

récupère prévisions + écrit cache JSON + upsert SQLite

scripts/fetch_openmeteo_archive.py (optionnel)

récupère archive sur période + écrit cache JSON + insert SQLite

db/schema.sql

schéma SQLite (tables + index)

config.yml.example

latitude/longitude, timezone, forecast_days, chemins

Commandes de test
Test rapide (curl)
curl -s "https://api.open-meteo.com/v1/forecast?latitude=45.05&longitude=3.48&daily=temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Europe/Paris&forecast_days=7" | head
Test avec jq (si installé)
curl -s "https://api.open-meteo.com/v1/forecast?latitude=45.05&longitude=3.48&daily=temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Europe/Paris&forecast_days=7" | jq '.daily'
Critères dacceptation

Une exécution quotidienne met à jour les prévisions (forecast) sans dupliquer en base.

Le calendrier UI peut afficher au minimum : Tmin/Tmax + pluie + probabilité pluie + code météo.

Le détail horaire dune journée est affichable (température + probabilité pluie).

Les données sont en Europe/Paris (pas de décalage dun jour).

Les fichiers JSON de cache existent pour debug.

https://api.open-meteo.com/v1/forecast?latitude=45.1412&longitude=4.0736&hourly=temperature_2m,weather_code,cloud_cover,evapotranspiration,precipitation,precipitation_probability&forecast_days=14

https://api.open-meteo.com/v1/forecast?latitude=45.1412&longitude=4.0736&hourly=temperature_2m,weather_code,cloud_cover,evapotranspiration,precipitation,precipitation_probability&forecast_days=14