Skip to content

Repository files navigation

Weather Data Exporter

Aplikasi web untuk mengambil data cuaca per kota / stasiun dari tiga sumber publik gratis (Open-Meteo, Meteostat, NASA POWER) dan mengekspornya ke Excel (.xlsx), termasuk diagram windrose.

Fitur

  • Tiga sumber data (granularitas harian):

    • Open-Meteo (model global) — kota mana saja di dunia, historis 1940 → sekarang + forecast 16 hari ke depan.
    • Meteostat (stasiun observasi Indonesia) — observasi harian dari ~129 stasiun ASOS/SYNOP di Indonesia (BMKG bandara: WIII Soekarno-Hatta, WARR Juanda, WADD Ngurah Rai, dll.).
    • NASA POWER (model + radiasi surya) — MERRA-2 reanalysis + CERES SYN1deg harian, lengkap dengan variabel radiasi: GHI / DNI / DHI / clearsky GHI / PAR (cocok untuk PV / pertanian).
  • Satuan kecepatan angin: m/s di seluruh data (Excel + pratinjau) maupun windrose.

  • Pencarian kota dengan autocomplete (Open-Meteo Geocoding, dipakai untuk Open-Meteo & POWER) atau pencarian stasiun (Meteostat).

  • Pratinjau 50 baris pertama sebelum unduh.

  • Output Excel .xlsx berisi 2 sheet: Data + Info (metadata: kota/stasiun, koordinat, periode, sumber, dll.).

  • Windrose — diagram polar frekuensi arah & kecepatan angin (16 sektor × 7 bin kecepatan dalam m/s: 0–1, 1–3, 3–5, 5–7, 7–9, 9–11, 11+), dengan toggle Blowing FROM (asal angin, konvensi meteorologi) / Blowing TO (arah hembusan), dan tombol unduh PNG (resolusi 900×800).

  • Variabel cuaca (lima kolom harian, sama untuk semua sumber):

    1. Suhu rata-rata (°C)
    2. Curah hujan / presipitasi (mm)
    3. Kecepatan angin rata-rata (m/s)
    4. Arah angin dominan (°, 0–360)
    5. Lama penyinaran matahari (jam)

    Pemetaan per sumber:

    • Open-Meteo: data hourly diunduh lalu diagregasi ke harian di sisi klien — suhu = mean, presipitasi = sum, kecepatan angin = mean, arah angin = speed-weighted vector mean, lama penyinaran = sunshine_duration hourly (detik) ÷ 3600.
    • Meteostat: kolom tavg, prcp, wspd (sudah m/s), wdir, tsun (menit → dikonversi ke jam).
    • NASA POWER: T2M, PRECTOTCORR, WS10M, WD10M. NASA POWER tidak menyediakan parameter sunshine duration langsung — kolom "Lama penyinaran" diisi radiasi GHI all-sky (ALLSKY_SFC_SW_DWN, kWh/m²/hari) sebagai proxy energi penyinaran (didokumentasikan di sheet Info).

Cara pakai (lokal)

# clone
git clone https://github.com/aldiprasetya1/weather-data-exporter.git
cd weather-data-exporter

# cara 1: buka langsung di browser
xdg-open index.html   # atau double-click index.html

# cara 2: jalankan dengan static server (rekomendasi)
python3 -m http.server 8000
# lalu buka http://localhost:8000

Tech stack

  • HTML + CSS + Vanilla JavaScript (tanpa framework) — frontend
  • Open-Meteo API — gratis, tanpa API key (model global)
  • Meteostat bulk endpoint — observasi stasiun, gratis, tanpa API key (di-proxy oleh backend karena CORS)
  • NASA POWER API — gratis, tanpa API key, CORS-friendly (dipanggil langsung dari browser)
  • SheetJS (xlsx) — export Excel
  • Plotly.js — windrose chart + PNG download
  • FastAPI (Python) — backend proxy untuk Meteostat, deploy ke Fly.io

Struktur

weather-data-exporter/
├── index.html       # markup utama
├── styles.css       # styling
├── app.js           # logika fetch data + windrose + export Excel
├── config.js        # runtime config (BACKEND_URL)
├── backend/         # FastAPI proxy untuk Meteostat
│   ├── pyproject.toml
│   └── app/
│       ├── main.py
│       └── stations_id.json   # daftar 129 stasiun Indonesia (Meteostat)
└── README.md

Backend (Meteostat proxy)

Bulk endpoint Meteostat (bulk.meteostat.net) tidak mengizinkan CORS, jadi browser tidak bisa fetch langsung. Backend FastAPI di backend/ menyediakan dua endpoint:

  • GET /stations — daftar 129 stasiun Indonesia (Meteostat) dengan WMO/ICAO ID, lokasi, dan rentang inventory.
  • GET /daily/{station_id}?start=YYYY-MM-DD&end=YYYY-MM-DD — proxy + decompress + filter rentang tanggal (max 366 hari per request). Wind speeds (wspd, wpgt) dikonversi dari km/h → m/s.
  • GET /hourly/{station_id}?start=YYYY-MM-DD&end=YYYY-MM-DD — endpoint hourly (legacy, tidak dipakai oleh frontend versi harian).

Jalankan lokal:

cd backend
python -m venv .venv && source .venv/bin/activate
pip install -e .
uvicorn app.main:app --reload --port 8001

Catatan tentang sumber data

  • Untuk tanggal lebih dari ~5 hari yang lalu, app menggunakan endpoint archive-api.open-meteo.com (ERA5 reanalysis).
  • Untuk tanggal dalam ~5 hari terakhir hingga 16 hari ke depan, app menggunakan api.open-meteo.com/v1/forecast.
  • Jika rentang tanggal melintasi keduanya, app otomatis melakukan dua panggilan dan menggabungkan hasilnya.

Sheet Info di file Excel mencatat sumber yang dipakai (archive / forecast / keduanya) supaya jelas.

Lisensi

MIT.

About

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages