Weather Sources
weNow aggregates data from multiple weather providers simultaneously and computes a consensus forecast. This page documents the active and disabled sources, how ensemble aggregation works, and how confidence is communicated to users.
Active Sources
| Provider | Model | License | Website |
|---|---|---|---|
| Open-Meteo | ECMWF | CC BY 4.0 | open-meteo.com |
| OpenWeatherMap | GFS / proprietary | Proprietary | openweathermap.org |
| WeatherAPI | Blended | Proprietary | weatherapi.com |
| Visual Crossing | Blended | Proprietary | visualcrossing.com |
Disabled Sources
The following providers are integrated but currently disabled, pending API key fixes:
- AccuWeather
- WeatherBit
- Tomorrow.io
Ensemble Aggregation
Rather than relying on a single weather provider, weNow combines data from all active sources into a consensus forecast. Here is how it works:
- Parallel fetching -- The backend sends requests to all active weather APIs simultaneously using
Promise.allSettled. If one or more sources fail, the remaining sources still produce a valid result. - Normalization -- Each API adapter converts its raw response into the shared
WeatherDatainterface. All temperatures are normalized to Celsius and all wind speeds to meters per second, regardless of the source format. - Weighted median -- The backend computes a weighted median across all successful responses. Sources are weighted by forecast model quality: ECMWF-based sources (such as Open-Meteo) receive the highest weight, followed by GFS-based sources (such as OpenWeatherMap), then blended model sources (such as WeatherAPI and Visual Crossing).
- Outlier removal -- Values that diverge significantly from the group consensus are excluded from the final median calculation, reducing the impact of erroneous readings from any single provider.
Confidence Indicators
weNow displays a color-coded confidence badge on weather cards and widgets to indicate how closely the sources agree:
| Color | Condition | Meaning |
|---|---|---|
| Green | Sources agree within 1.5 degrees C | High confidence -- providers are closely aligned |
| Yellow | Sources agree within 3 degrees C | Moderate confidence -- some divergence between providers |
| Red | Sources diverge by more than 3 degrees C | Low confidence -- providers disagree significantly |
Forecast Data
The ensemble aggregation extends beyond current conditions into forecast periods:
- Daily forecast -- Up to 7 days of forecast data, computed by applying the weighted median across each provider's daily predictions.
- Hourly forecast -- Up to 48 hours of forecast data, computed similarly from each provider's hourly predictions. Returned only when the client opts in via
includeHourly: true, and used by widgets in hourly forecast mode.
Unit Normalization
All weather API adapters normalize their responses to a consistent set of units before ensemble aggregation occurs:
- Temperature -- Always stored and transmitted in degrees Celsius, regardless of whether the upstream API returns Fahrenheit or Kelvin.
- Wind speed -- Always stored and transmitted in meters per second (m/s), regardless of whether the upstream API returns km/h, mph, or knots.
This normalization happens at the adapter level so that all downstream logic -- median calculation, outlier removal, and client display -- operates on a single, consistent unit system.