A clean Garmin Connect IQ watch face that puts time, activity stats, and a barometric weather forecast on your wrist - no phone connection required.
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.
Since a watch face has no compass input, wind direction is fixed to calm (octant 0). This makes the forecast purely pressure-driven - still effective for detecting approaching fronts, but without the directional refinement available in the companion widget (SimplyWeather).
Inputs (all derived on-device):
- Current barometric pressure (hPa)
- Pressure trend over the last ~6 hours (rising / steady / falling)
- Current date (for continuous seasonal corrections)
- Hemisphere (north / south, via GPS with Northern fallback)
How it works:
- Three lookup tables (
steadyBase,risingBase,fallingBase) produce 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 during the single-pass iteration:
- 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. Without wind direction input, accuracy is slightly lower than the companion widget:
| Scenario | Accuracy | Lead time | Notes |
|---|---|---|---|
| Urban / lowland | ~75% | 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) | ~60% | 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. Always cross-check official mountain forecasts. |
| Coastal / seaside | ~80% | 3-6 h | Flat terrain, clean pressure gradients - best case for barometric forecasting. Fronts approach predictably. |
Large, easy-to-read digital time in the centre of the display with the full date (Thu, 20 Feb 2026) just below.
| Stat | Description |
|---|---|
| Steps | Daily step count (in thousands), shown with an icon |
| Distance | Daily distance (in km), shown with an icon |
| Notifications | Unread notification indicator at the top of the screen |
| Battery | Estimated battery life remaining in days |
- Forecast text - a short condition such as Settled fine, Changeable, showers likely, or Stormy, much rain, with a precipitation probability percentage when applicable.
- Weather icon - context-aware by time of day and season (see table below).
- Hemisphere-aware - automatically detects your hemisphere via GPS and adjusts seasonal corrections accordingly.
- Refresh cycle - the forecast recalculates every 3 hours to balance accuracy with battery life.
The watch face 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 | Cold season |
|---|---|---|---|
| 0-1 | Clear / fine | ☀️ Sun (day) / 🌙 Moon (night) | ☀️ Sun (day) / 🌙 Moon (night) |
| 2-6 | Fair / variable | 🌤 Cloud-day / ☁️🌙 Cloud-night | 🌤 Cloud-day / ☁️🌙 Cloud-night |
| 7-21 | Showers -> rain | 🌧 Rainy | 🌨 Snowy |
| 22-25 | Stormy | ⛈ Thunderstorm | 🌨❄️ Snowstorm |
Note: unlike the companion widget, bands 7-21 are grouped into a single rain/snow icon (no day/night or light/heavy variants) to keep the watch face clean.
- Garmin Fenix 8 Solar (47 mm)
Requires Connect IQ API 5.1.0 or later. Additional devices can be added via
manifest.xml.
| Permission | Reason |
|---|---|
| SensorHistory | Read barometric pressure history to calculate pressure trends |
| Positioning | Detect hemisphere (north/south) for seasonal corrections |
| Notifications | Show unread notification count on the watch face |
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 5.1.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 SimplyWatch.prg -d fenix8solar47mmsource/
SimplyWatchApp.mc # Application entry point
SimplyWatchView.mc # Watch face layout, rendering & pressure logic
SimplyWatchForecast.mc # Sager Weathercaster forecast engine
resources/
drawables/ # SVG icons (weather, battery, steps, etc.)
strings/ # App name
forecast-strings/ # Forecast condition descriptions (26 outcomes)
- 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.