An intelligent weather bot for prediction markets and professional weather betting. Fetches ultra-fresh data directly from global weather stations, bypassing CDN caches, and provides automated trend analysis with **model consensus scoring** and **entry timing signals** in plain language.
> Local machine is for editing code and Git push only. IDE import errors are expected (dependencies not installed locally) and do not affect VPS operation.
> ⚠️ **All NWP model queries use airport coordinates** (matching METAR station), not city center. This eliminates systematic bias between forecast and settlement locations.
**Open-Meteo API Architecture**: Three API calls go through the same platform, each serving a different purpose:
```
Open-Meteo (API Platform)
│
┌─────────────┼─────────────┐
│ │ │
┌──────┴──────┐ │ ┌──────┴──────┐
│ /forecast │ │ │ /forecast │
│ (default) │ │ │ ?models=... │
│ = best_match│ │ │ = multi-model│
└──────┬──────┘ │ └──────┬──────┘
│ │ │
▼ │ ▼
Auto-selects best │ Returns each model
model (≈ ECMWF) │ ECMWF / GFS / ICON
→ Hourly curves │ GEM / JMA
→ Sunrise/sunset │ → Consensus scoring
→ Sunshine/radiation │
┌──────┴──────┐
│ /ensemble │
│ 51 members │
└──────┬──────┘
│
▼
Median / P10 / P90
→ Uncertainty range
```
> 💡 The OM default forecast is essentially **one of the 5 models** (auto-selected), so it is **excluded from consensus scoring** to avoid double-counting.
Primary models: **ECMWF IFS** (Europe), **GFS** (US NOAA), **ICON** (Germany DWD), **GEM** (Canada), **JMA** (Japan). Plus Meteoblue (London) and NWS (US) when available. Ensemble median is excluded to avoid double-counting.
**Deterministic vs Ensemble Divergence Detection**: When the OM deterministic forecast exceeds the ensemble P90 or falls below P10, the bot flags it. If actual observations later verify the forecast, the warning upgrades to a ✅ **Forecast Verified** message.
- **☀️ Weather Condition Summary**: Synthesizes METAR phenomena + cloud cover into a single glanceable icon + text (e.g., `⛅ Partly Cloudy`).
- **🌤️ Solar Radiation Analysis**: Tracks cumulative shortwave radiation vs. daily total; warns when clouds severely block sunlight.
- **🌙 Warm Advection Detection**: Identifies when peak temperature occurred during zero-radiation hours (e.g., 3 AM), proving the high was driven by warm air mass rather than solar heating.
1.**Check Consensus**: Compare Open-Meteo and Meteoblue (MB). Consensus usually implies higher probability.
2.**Watch the Peak**: Use `/city` frequently during predicted peak windows to catch momentum.
3.**Weighting Hierarchy**: Settlement is **METAR**; high-accuracy trend is **MB** (London); Official (NWS/MGM) is the "anchor."
4. # **Geographic Risk**: Pay close attention to cities where "Bias will significantly amplify."
5.**Check Model Consensus**: The 🎯/⚖️/⚠️ rating tells you immediately if the forecast is reliable.
6.**Use the Entry Signal**: Wait for ⏰ **Ideal** or **Good** timing before placing bets. Don't bet early when uncertainty is high.
7.**Watch Ensemble Spread**: A tight 90% band (< 2°) means model confidence is high — this is where edges live.
8.**Watch the Peak Window**: Use `/city` frequently during predicted peak hours.
9.**Settlement Priority**: Settlement is always based on **METAR** data, rounded to integer via Wunderground.
10.**Geographic Risk**: Pay attention to bias warnings, especially for high-risk cities like Seoul and Chicago.
11.**Solar Radiation Clues**: If the bot reports "warm advection driven" 🌙, the temperature was pushed by warm air, not sunlight — this pattern often breaks model predictions.
12.**Wind Conflicts**: When METAR and MGM show opposite wind directions, expect temperature volatility.