Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Weather & Conditions

The Weather tab provides atmospheric conditions specifically analysed for astronomical observation and astrophotography. It combines two independent data sources: Open-Meteo for standard meteorological data and 7Timer for seeing and transparency forecasts.


Tab layout

LocationContent
Weather tab -> WeatherHourly weather forecast cards (temperature, humidity, wind, clouds, precipitation), each with a quality label from observation_score
Weather tab -> Seeing7Timer astronomical seeing and transparency forecast
Weather tab -> Observation ConditionsA fast go / no-go scan of the coming night: a hero “Night score” chart (the observation_score line, colour-banded, best-window caption), then a “Sky” chart (cloud cover total + layers, fog, precipitation) and an “Atmosphere & tracking” chart (seeing, transparency, mount stability, lifted index). Window = now to ~2 h past dawn, minimum 6 h. Reads /api/weather/astro-analysis.
Astrophotography tab -> AstrophotographyCurrent conditions, the “Score de la Nuit” hourly timeline, horizon graph, best observation periods, weather alerts and the advanced hour-by-hour analysis charts

Weather alerts

Module: backend/weather/weather_astro.py (alert generation)

Alerts are generated from the Open-Meteo data and include:

AlertTrigger condition
High cloud coverCloud cover > 50 % during the observing window
Dew riskDew point within 2 °C of ambient temperature
Strong windWind speed > 30 km/h
High humidityRelative humidity > 85 %
Rain riskPrecipitation probability > 30 %

Alerts are translated using the i18n system and displayed in the Alerts sub-tab.


Open-Meteo weather forecast

Source: Open-Meteo - free, no API key required.

Cache TTL: 1 hour (WEATHER_CACHE_TTL in utils/constants.py).

Module: backend/weather/weather_openmeteo.py

Variables fetched

VariableUse
temperature_2mTemperature at 2 m (°C / °F)
relative_humidity_2mRelative humidity (%)
dew_point_2mDew point - distance from ambient drives fog/dew warning
precipitation_probabilityRain/snow probability (%)
cloud_coverTotal cloud cover (%)
cloud_cover_lowLow-altitude clouds (0-3 km)
cloud_cover_midMid-altitude clouds (3-8 km)
cloud_cover_highHigh-altitude clouds (cirrus, 8+ km)
wind_speed_10mSurface wind speed
wind_direction_10mSurface wind direction
surface_pressureAtmospheric pressure (hPa)
visibilityHorizontal visibility (km)
wind_speed_80m, 120mUpper-atmosphere wind for jet-stream analysis

Cloud layer discrimination

The three cloud-cover layers help astrophotographers distinguish:

  • Low clouds (fog, stratus) - completely block imaging.
  • Mid clouds (altocumulus) - usually opaque, block imaging.
  • High clouds (cirrus) - thin and sometimes transparent; imaging may still be possible.

Total cloud cover is shown as the primary go/no-go indicator.

Rate-limiting behaviour

Open-Meteo free tier allows a limited number of concurrent requests. weather/weather_openmeteo.py implements two protections:

GuardBehaviour
Single-flight lockOnly one concurrent call is made for the hourly forecast
Global concurrency cooldownIf a “Too many concurrent requests” error is received, all Open-Meteo callers back off for 90 seconds (_GLOBAL_CONCURRENCY_COOLDOWN)

When rate-limited, the API returns the last successful response (stale-while-error) to avoid empty screens.


Astro weather analysis

Module: backend/weather/weather_astro.py

Class: AstroWeatherAnalyzer

This module transforms raw Open-Meteo variables into astrophotography-specific metrics. It calculates conditions for up to 48 hours and caches results for 30 minutes (in-process), and the cache scheduler additionally keeps a 24 h analysis warm per location in the astro_weather shared cache (see docs/CACHE_SYSTEM.md).

The observation score (single source of truth)

observation_score (0-10) is the one overall astrophotography-quality number in the app:

observation_score = (seeing_pickering*10 + transparency_score + cloud_discrimination + tracking_stability_score) / 4 / 10 * precipitation_factor
  • seeing_pickering is 1-10; the other three components are 0-100 (so transparency_score, cloud_discrimination and tracking_stability_score must all stay on that scale - a component accidentally left on a 0-1 scale silently contributes almost nothing).
  • precipitation_factor (0-1) is a multiplicative veto, not an averaged component.

It is shown, unchanged, by the navbar sky widget pill, the location switcher, the Weather tab’s hourly cards (served on /api/weather/forecast as condition, x10 to a 0-100 range) and the “Score de la Nuit” hourly cards. weather/weather_openmeteo.py no longer derives its own overall score.

Seeing estimate (Pickering scale)

The seeing estimate is derived from wind speed at multiple altitudes and atmospheric stability proxies available from Open-Meteo:

PickeringQualityConditions
1-3PoorStrong winds, turbulent atmosphere
4-5FairModerate conditions
6-7GoodSuitable for deep-sky imaging
8-9Very goodSuitable for planetary imaging
10PerfectExceptional stability

Note: This is a model-derived estimate. For high-resolution planetary imaging, cross-check with the 7Timer seeing forecast below.

Transparency (limiting magnitude)

transparency_score (0-100) is estimated from cloud cover, humidity, and visibility, and is then mapped linearly onto a limiting magnitude between MAGNITUDE_LIMIT_ZENITH_MIN (4.0) and MAGNITUDE_LIMIT_ZENITH_MAX (8.0):

mag/arcsec²Sky quality
≥ 7.5Excellent dark sky
6.5 - 7.4Good
5.5 - 6.4Average suburban
≤ 5.0Light-polluted / cloudy

Dew point warning

When the difference between ambient temperature and dew point is ≤ 2 °C (DEW_POINT_WARNING_THRESHOLD), a dew alert is raised. Dew on optics ends a session; plan dew heaters accordingly.

Jet stream impact

Wind speed at 80 m and 120 m altitude is used as a proxy for jet-stream influence. High upper-atmosphere winds correlate with poor seeing even when the surface is calm.

Best astro period

AstroWeatherAnalyzer identifies the best consecutive window within the forecast where:

  • Cloud cover is low
  • Humidity is acceptable
  • Wind is calm
  • Dew margin is safe

These “best period” cards are displayed in the Astrophotography tab.


7Timer seeing forecast

Source: 7Timer ASTRO product

Cache TTL: 6 hours (CACHE_TTL_SEEING_FORECAST). On a fetch failure, the cache is left untouched (previous good forecast keeps being served) instead of being overwritten with a failure marker - a transient 7Timer outage no longer blanks the tab for the full TTL window, since the next 5-minute scheduler tick retries once the existing entry’s TTL naturally elapses.

Module: backend/astroweather/seeing_forecast_7timer.py

Class: SeeingForecastService

7Timer’s ASTRO product returns eight fields per 3-hourly timepoint: seeing, transparency, cloudcover, lifted_index, rh2m (humidity), wind10m (direction + speed class), temp2m and prec_type. All of them are decoded and surfaced - not just seeing - and combined into a single composite quality_score (0-10) per timeslot.

Seeing scale (7Timer)

ValueLabelFWHMNotes
1Excellent< 0.5 arcsecPerfect for planetary imaging
2Very Good0.5 - 0.75 arcsecExcellent planetary detail
3Good0.75 - 1 arcsecVery good for planetary imaging
4Moderate1 - 1.25 arcsecFair for planetary imaging
5Fair1.25 - 1.5 arcsecUsable with reduced fine detail
6Poor1.5 - 2 arcsecPoor conditions
7Very Poor2 - 2.5 arcsecUnsuitable for high-res imaging
8Bad> 2.5 arcsecUnsuitable for planetary imaging

Transparency scale (7Timer)

7Timer’s transparency field uses the same 1-8 shape as seeing (1 = worst, 8 = best), expressed as limiting magnitude per air mass:

ValueLabelMag per air mass
1Very Poor< 0.3
2Poor0.3 - 0.4
3Below Average0.4 - 0.5
4Average0.5 - 0.6
5Above Average0.6 - 0.7
6Good0.7 - 0.85
7Very Good0.85 - 1
8Excellent> 1

Cloud cover scale (7Timer)

1-9 scale, 1 = clearest (0-6% cover), 9 = fully overcast (94-100% cover).

Wind speed scale (7Timer, 10m)

1-8 scale from calm (< 0.3 m/s) to hurricane (> 32.6 m/s), paired with a compass direction.

Composite quality score

Each forecast point’s quality_score (0-10, higher is better) combines four of the raw 7Timer fields:

ComponentWeightWhy
Seeing35%7Timer’s own astronomy-specific model output (not a proxy)
Transparency30%Same - 7Timer’s own model output
Cloud cover25%Strongest remaining go/no-go signal
Wind speed10%Tracking-stability proxy

Active precipitation (prec_type != none) is a hard multiplicative veto (score × 0.1) rather than an averaged component, the same convention used by weather_astro.py’s precipitation_factor: rain or snow shouldn’t be masked by otherwise-clear metrics. lifted_index is decoded and exposed but not scored, since 7Timer’s seeing value already folds atmospheric stability into its own model.

The Seeing sub-tab renders this as an hourly timeline in the same visual style as the Astrophotography tab’s “Score de la Nuit” (night-score-timeline): one card per timeslot with the combined score, a quality badge, and an icon row for every underlying metric (seeing, transparency, cloud cover, wind, humidity, precipitation).

Best windows

Two “best window” cards are computed from the forecast:

  • Best Seeing Window - longest consecutive run with seeing ≤ 3 (Good or better), unchanged from the original seeing-only definition - still the relevant metric for planetary imagers.
  • Best Overall Window - longest consecutive run with quality_score ≥ 6 (Good or better), reflecting the full picture (seeing + transparency + clouds + wind).

Data sources

  • Open-Meteo: open-meteo.com - free, open-source weather API; no account required.
  • 7Timer: 7timer.info - free astronomical weather service based on GFS model data; no account required.

API endpoints

MethodPathDescription
GET/api/weather/forecastFull hourly weather forecast from Open-Meteo; each hour’s condition is the unified observation_score x10, merged from the astro_weather cache
GET/api/weather/astro-analysisAstrophotography metrics (seeing, transparency, best period); the 24 h / default-language request is served from the astro_weather cache
GET/api/weather/astro-currentCurrent-hour astrophotography conditions snapshot (served from the astro_weather cache when warm)
GET/api/weather/alertsActive weather alerts list
GET/api/seeing-forecast7Timer seeing and transparency time-series

Last updated 2026-11-13