🌤️

Vejr Forecast Script (forecast.py)

Henter timevise vejrdata fra Open-Meteo API og gemmer i MariaDB — Errindlev Fælled

📊 Flowdiagram

forecast.py — Flowdiagram 🚀 __main__ 🗄️ setup_database() setup_database() Hent config (py.cnf) CREATE TABLE IF NOT EXISTS ALTER TABLE: tilføj luftfugtighed + dugpunkt (hvis mangler) 🌐 fetch_forecast() fetch_forecast() GET api.open-meteo.com → 24 timers data ❌ Exception returner [] Byg 24 rækker: temp, jord, nedbør, UV, fugtighed*, dugpunkt* per time 💾 save_forecast(rows) executemany() INSERT 24 rækker → vejr_forecast ✅ Færdig Legende Hoved-funktion Deloperationer ny i v2 2 nye felter

📋 Trin-for-trin forklaring

1

get_db_config()

Læser credentials fra py.cnf via configparser. Filen skal ligge i samme mappe som scriptet. Adskiller credentials fra kode — ingen hardcoded passwords.

2

setup_database()

Opretter databasen og tabellen vejr_forecast hvis de ikke eksisterer. Forsøger at tilføje luftfugtighed og dugpunkt via ALTER TABLE — fejl ignoreres hvis kolonnerne allerede findes.

3

fetch_forecast()

Kalder Open-Meteo API med koordinater for Errindlev Fælled. Henter 24 timers timevis prognose med 8 parametre. Returnerer liste af tuples klar til database-indsættelse.

4

save_forecast(rows)

executemany() indsætter alle 24 rækker i én databaseoperation. Printer bekræftelse med tidsstempel og antal gemte rækker.

🌐 Open-Meteo API

Gratis vejr-API — ingen API-nøgle påkrævet.

https://api.open-meteo.com/v1/forecast?
  latitude=54.66&longitude=11.50&
  hourly=temperature_2m, soil_temperature_6cm,
  precipitation, precipitation_probability,
  uv_index, relative_humidity_2m, dewpoint_2m
&
  timezone=Europe/Copenhagen&
  forecast_days=1

📍 Lokation

BREDDEGRAD
54.66°N
LAT
LÆNGDEGRAD
11.50°Ø
LON
LOKATION
Errindlev
Fælled
Lolland, DK

⚙️ py.cnf konfiguration

[mysql]
host = localhost
user = dit_brugernavn
password = dit_password
database = drift

Placér py.cnf i samme mappe som forecast.py

🗄️ Database-tabel: vejr_forecast

📋 vejr_forecast

idINT AUTO_INCREMENT PK
forecast_tidDATETIME
luft_tempFLOAT  °C @ 2m
jord_tempFLOAT  °C @ 6cm dybde
nedboer_mmFLOAT  mm
uv_indeksFLOAT
nedboer_sandsynlighedINT  %
luftfugtighed NY INT  %
dugpunkt NY FLOAT  °C
hentet_tidTIMESTAMP (auto)

24 rækker indsættes per kørsel — én per time i døgnet.

⏰ Anbefalet cron-opsætning

# Kør én gang dagligt — f.eks. kl. 06:00
0 6 * * * /usr/bin/python3 /var/www/html/fugle/forecast.py

# Eller hver 6. time for opdateret prognose
0 */6 * * * /usr/bin/python3 /var/www/html/fugle/forecast.py

💡 Notes

API Open-Meteo er gratis og kræver ingen nøgle
DB ALTER TABLE fejler lydløst — trygt at køre igen
SSL ssl_disabled=True + use_pure=True for lokal MariaDB
Data Gammel data ryddes ikke automatisk — overvej periodisk cleanup

📝 Terminal-output eksempel

[2025-02-22 06:00:03] Succes: 24 timer gemt (inkl. fugtighed/dugpunkt).

🌡️ Vejrdata der hentes (per time, 24 timer frem)

API-parameter Databasefelt Enhed Beskrivelse
temperature_2mluft_temp°CLufttemperatur 2m over terræn
soil_temperature_6cmjord_temp°CJordtemperatur 6cm dybde
precipitationnedboer_mmmmNedbørsmængde
precipitation_probabilitynedboer_sandsynlighed%Sandsynlighed for nedbør
uv_indexuv_indeks0–11+UV-indeks
relative_humidity_2mluftfugtighed% NYRelativ luftfugtighed 2m
dewpoint_2mdugpunkt°C NYDugpunkt 2m over terræn