A Garmin Connect IQ widget that predicts the weather using only your watch's barometer and compass - no phone, no internet required.
Forked from simonl-ciq/SimplyWeather. Original app used the Zambretti algorithm; this fork replaces it with the Sager Weathercaster engine, adds a regression-based barometric trend analyser (altitude-immune and diurnal-corrected), glance-view weather icons, and various quality-of-life improvements.
The forecast engine is based on Raymond Sager's meteorological method (1960s, US Navy). Unlike simpler barometric forecasters, Sager treats wind direction as a primary forecast dimension alongside pressure and its trend.
Inputs (all derived on-device):
- Current barometric pressure (hPa)
- Pressure trend over the configured time window (rising / steady / falling)
- Wind direction from the compass (8 octants)
- Current date (for continuous seasonal corrections)
- Hemisphere (north / south)
How it works:
- Three lookup tables (
steadyBase,risingBase,fallingBase) are indexed by wind octant (0-8), producing a base forecast number (0-25). - The base number is adjusted by pressure level (±2) - high pressure biases toward fair, low toward unsettled.
- A seasonal modifier (±1) accounts for summer convective storms and winter clearing patterns, ramping continuously with the date instead of stepping at month boundaries.
- The final forecast number maps to a condition label (e.g. "Fairly fine, showers likely") and a precipitation probability (0-95%).
26 forecast conditions range from Settled fine (0) to Stormy, much rain (25).
The rising / steady / falling input to Sager is not a naive "now minus three hours ago" comparison - it comes from a small on-device regression pipeline run over the barometer's stored history:
- Mean-sea-level reduction. Every pressure sample is first reduced to mean sea level using the watch's barometric elevation history, so a change in altitude (a climb, a drive uphill, an elevator) cancels out and only genuine weather moves the trend. With no elevation history available it falls back to raw station pressure - identical to the previous behaviour.
- Quadratic regression. A single-pass least-squares parabola is fitted to the sea-level series across the trend window (~6 h). The fitted curve gives the net pressure change over the window, tested against a deadband (default 0.35 hPa/h) to decide rising, steady, or falling. Fitting a parabola rather than a straight line lets a curving pressure profile be read correctly.
- Diurnal tide correction. The atmosphere has a twice-daily pressure tide (~0.6 hPa swing at mid-latitudes). The expected tidal change over the window - amplitude derived from latitude - is subtracted, so the normal daily rhythm is never mistaken for an approaching system.
- Short-window front detection. An independent linear fit over only the last 3 hours flags a fast-moving front before the longer window catches it. Because it is computed from the recent samples alone, a large pressure wiggle earlier in the window cannot contaminate it.
- Hysteresis & front passage. The trend is quick to raise an alarm and slow to clear it, and a passing front (was falling, now levelling with pressure recovering) is upgraded to rising.
A glitched elevation sample cannot poison the series: the sea-level reduction clamps altitude to a physical range. This pipeline replaces an earlier point-sample second-derivative ("acceleration") trigger that over-reacted to short pressure wiggles and to altitude changes.
Barometric forecasting precision varies by terrain and weather pattern:
| Scenario | Accuracy | Lead time | Notes |
|---|---|---|---|
| Urban / lowland | ~80% | 2-4 h | Stable environment, pressure patterns read cleanly; the short-window front detector catches convective buildups 30-60 min earlier |
| Mountain hiking (1500-2500 m) | ~65% | 1-3 h | Trends stay valid as you change elevation (readings are sea-level-reduced), but altitude thermals and terrain-funnelled winds still add noise; local effects limit prediction. Always cross-check official mountain forecasts. |
| Coastal / seaside | ~85% | 3-6 h | Flat terrain, clean pressure gradients - best case for barometric forecasting. Fronts approach predictably and the front detector works well here. |
- Two-line forecast text (e.g. "Fairly fine" / "possible showers early")
- Precipitation probability percentage with a rain / snow icon (season-aware)
- Pressure trend indicator: Rising, Steady, or Falling
- Current barometric pressure (hPa)
- Live compass display with 16-point cardinal directions (N, NNE, NE, ...)
- Heading smoothing and direction hysteresis to avoid jittery updates
- Wind direction is persisted across widget sessions
- Shake-to-recalibrate: shake the watch to reset the compass heading
A compact glance view with:
- Customisable title (configurable in Garmin Connect settings)
- Current forecast summary text
- Weather icon - context-aware by time of day and season (see table below)
The glance view selects an icon based on three inputs: the Sager forecast number, time of day, and season.
Day / night is determined by a fixed 07:00-19:00 window.
Season is hemisphere-aware - Northern: Dec-Feb = cold season; Southern: May-Sep = cold season.
| Forecast | Condition | Warm season (day / night) | Cold season (day / night) |
|---|---|---|---|
| 0-1 | Clear / fine | ☀️ Sun / 🌙 Moon | ☀️ Sun / 🌙 Moon |
| 2-6 | Fair / variable | 🌤 Cloud-day / ☁️🌙 Cloud-night | 🌤 Cloud-day / ☁️🌙 Cloud-night |
| 7-14 | Showers / unsettled | 🌧 Rain-day / 🌧🌙 Rain-night | 🌨 Snow-day / 🌨🌙 Snow-night |
| 15-21 | Rain / very unsettled | 🌧 Heavy rain | 🌨 Heavy snow |
| 22-25 | Stormy | ⛈ Thunderstorm | 🌨❄️ Snowstorm |
The main widget view shows a small raindrop (warm season) or snowflake (cold season) icon next to the precipitation percentage.
- Automatic hemisphere detection via GPS (one-shot fix)
- Falls back to the configured default (Northern or Southern) when GPS is unavailable
- Seasonal adjustments for precipitation type (rain vs. snow) and forecast modifiers
- Fenix 6 / 6 Pro / 6S / 6S Pro / 6X Pro
- Fenix 7 / 7 Pro / 7S / 7S Pro / 7X / 7X Pro
- Fenix 8 (43 mm / 47 mm) / Fenix 8 Solar (47 mm / 51 mm)
- Fenix Chronos / Fenix E
- Forerunner 965
Requires Connect IQ SDK 2.4.0 or later. Additional devices can be added via
manifest.xml.
| Permission | Reason |
|---|---|
| Sensor | Access barometer and magnetometer for pressure readings and compass heading |
| SensorHistory | Read barometric pressure history to calculate pressure trends |
| Positioning | Detect hemisphere (north/south) via GPS for seasonal corrections |
Configurable from the Garmin Connect app:
| Setting | Description | Default |
|---|---|---|
| Device pressure correction | Offset added to the barometer reading (hPa) | 0 |
| Trend threshold | Pressure change below this is treated as "steady" (hPa) | 0.5 |
| Trend time window | Hours of pressure history used to determine the trend | 4 |
| Display details | Show temperature and extended info on the widget face | Yes |
| Default hemisphere | Hemisphere fallback when GPS is not available | Northern |
| Glance title | Custom title displayed in the glance view | Weather |
- English
- German (Deutsch)
Build with the Garmin Connect IQ SDK and side-load the .prg file to your watch.
- Clone or download this repository.
- Open the project in Visual Studio Code with the Monkey C extension.
- Build for your device (
Monkey C: Build for Device). - Copy the generated
.prgfile to your watch'sGARMIN/APPSdirectory.
- Connect IQ SDK 2.4.0+
- Visual Studio Code with the Monkey C extension
# Build via the VS Code command palette:
# Monkey C: Build for Device
# or use the Connect IQ CLI:
monkeyc -f monkey.jungle -o SimplyWeather.prg -d fenix7source/
SimplyWeatherApp.mc # Application entry point
SimplyWeatherDelegate.mc # Input handling & compass interaction
SimplyWeatherForecast.mc # Sager Weathercaster forecast engine
SimplyWeatherView.mc # Widget layout, rendering & pressure logic
resources/
drawables/ # SVG icons (weather, compass, etc.)
strings/ # App name
forecast-strings/ # Forecast condition descriptions (26 outcomes)
point-strings/ # Compass point labels (N, NE, E, ...)
settings/ # Garmin Connect configurable properties
resources-deu/ # German localisation
resources-eng/ # English localisation
- Original app: Simon (simonl-ciq) - the foundation this fork builds on
- Sager Weathercaster: Based on Raymond Sager's barometric forecasting method (1960s, US Navy)
- Icon design: Freepik from Flaticon, licensed under CC BY 3.0
This project is licensed under the MIT License - see the LICENSE file for details.