Skip to main content

WeatherFlow Tempest

Cloud REST integration for the WeatherFlow Tempest all-in-one weather station. Polls live observations (temperature, humidity, wind, pressure, solar / UV, lightning, precipitation, derived feels-like) plus the "Better Forecast" hourly + daily payload for each station on a Tempest account. Surfaces both metric and imperial copies of the headline fields as zone attributes so dashboards, the weather automation variable, and macros can read live data without re-hitting the cloud.

What this driver is for

The Tempest is a solar-powered weather station that publishes ~1-minute observations through WeatherFlow's cloud. Most homeowners have a single station; commercial sites occasionally have two or three across a campus. GEM treats one Tempest account as one device and each station on that account as a zone, addressed by the station's numeric station_id.

Read-only — the driver is a polling consumer. There is nothing to "control" on a weather station. The value is making the station's live readings available to:

  • Macros that should only run when, say, outside temperature is below 5 °C or wind gust exceeds 15 m/s ("close the awning if it's gusty").
  • Dashboards (the built-in weather widget can be pointed at a Tempest zone and will read every field listed below).
  • The weather automation variable, which can pull from any zone that publishes the standard temperature / humidity / wind attributes.

Prerequisites

ItemNotes
Tempest commissioned in the WeatherFlow appWi-Fi onboarding is mobile-only.
Personal Access Token (PAT)Minted at tempestwx.com → Settings → Personal Access Tokens. Long-lived, one-time-shown. Use a per-deployment token so you can revoke without breaking other integrations.
Outbound HTTPS to swd.weatherflow.comThe driver makes ~1 request per minute per station to the observations endpoint and ~1 every 15 min to the forecast endpoint.

Setup

  1. Commission the station in the WeatherFlow Tempest mobile app and confirm it is reporting on the dashboard at tempestwx.com.

  2. Mint a Personal Access Token.

    • Sign in to tempestwx.com.
    • Navigate to Settings → Personal Access Tokens → Create Token.
    • Give it a descriptive name (e.g. GEM controller — main house).
    • Copy the token immediately — the dashboard only shows it once.
  3. Add the device in GEM.

    • Navigate to /admin/devicesAdd Device.
    • Driver: weatherflow_tempest.
    • Paste the PAT into api_key.
    • Optionally pin units_system to metric or imperial if you only want one unit set on the zones (default is both).
  4. Discover the station id. Once the device shows as connected, run the get_stations command. The response includes a stations[] array; each entry has a station_id (integer), name, latitude, longitude, and the attached hub / sensor hardware ids.

  5. Create one zone per station.

    • Subsystem: typically weather (or any subsystem you use for environmental sensors).
    • zone.address = the station_id from step 4 (a plain integer).
    • The driver populates the zone's attributes on every poll — no further configuration needed.

Attributes

Device attributes

NameRequiredDefaultDescription
api_keyyesTempest Personal Access Token (stored encrypted).
api_basenohttps://swd.weatherflow.com/swd/restOverride the cloud root. Leave empty unless WeatherFlow support directs otherwise.
units_systemnobothmetric (°C / m/s / mm), imperial (°F / mph / inches), or both.
status_intervalno60000Observation poll interval in ms. Tempest emits a new observation every ~1 minute; polling faster wastes API calls and risks throttling.
forecast_intervalno900000Better Forecast poll interval. Upstream service updates every ~15 minutes.
request_timeoutno15000Per-request HTTP timeout in ms.

Zone attributes (populated by the driver)

Current observation

AttributeUnitNotes
temperature_c / temperature_f°C / °FAmbient air.
humidity%Relative humidity.
pressure_mb / pressure_in_hgmb / inHgStation pressure at ground level.
sea_level_pressure_mbmbSea-level corrected pressure (for weather charts).
pressure_trendstringrising, falling, or steady.
wind_avg_mps / wind_avg_mphm/s / mphRolling 1-minute wind average.
wind_gust_mps / wind_gust_mphm/s / mphPeak in the last observation window.
wind_lull_mpsm/sMinimum in the last observation window.
wind_direction_degdegrees0 = North, 90 = East.
solar_radiation_wm2W/m²Total irradiance.
uv_indexindexUV index, 0–11+.
brightness_luxluxAmbient brightness.
precip_mm_minmm / minRate at the moment of observation.
precip_1hr_mm / precip_1hr_inmm / inAccumulated last hour.
precip_today_mm / precip_today_inmm / inAccumulated today (local-time).
precip_yesterday_mmmmAccumulated yesterday.
lightning_count / lightning_count_1hr / lightning_count_3hrcountStrike counts.
lightning_last_distance_kmkmDistance to most recent strike.
feels_like_c / feels_like_f°C / °FWeatherFlow's combined heat-index / wind-chill calc.
dew_point_c / dew_point_f°C / °FDew point.
heat_index_c°CHeat index (only above ~26 °C).
wind_chill_c°CWind chill (only below ~10 °C).
wet_bulb_c°CWet-bulb temperature.
air_density_kgm3kg/m³Air density.
observation_timestampunix sUseful for staleness checks.

Forecast (refreshed every ~15 min)

AttributeDescription
forecast_conditionsShort string ("Mostly Cloudy").
forecast_iconIcon slug used by the WeatherFlow app.
forecast_high_c / forecast_high_fToday's forecast high.
forecast_low_c / forecast_low_fToday's forecast low.
forecast_precip_probabilityToday's precipitation probability (%).

Commands

NameArgsDescription
get_stations / get_devicesEnumerate stations on the account. Returns station_id, name, lat/long, and attached hub / sensor ids.
get_status / get_observationaddressRead the most recent observation for the addressed station. Updates zone attributes.
get_forecastaddressPull the Better Forecast (current_conditions + hourly[] + daily[]) for the addressed station.
refreshaddress (optional)Force an immediate poll for the addressed station, or for every station if omitted.

Zone address format

The zone.address is a plain integer — the station_id returned from get_stations. Example: 12345.

If a Tempest account has multiple stations (rare in residential, more common on commercial campuses), create one zone per station and set each zone.address accordingly. Each zone gets its own observation + forecast attribute set.

Known limitations

  • Cloud-only path. This driver polls the WeatherFlow cloud. If the GEM controller loses internet, observations stop updating until connectivity returns. A future companion driver on the local UDP broadcast (port 50222) would close that gap — flagged as a candidate, not yet built.
  • Read-only. Nothing to control; the driver only consumes.
  • No PMM / rapid-wind sub-minute fields. WeatherFlow publishes some fields (rapid-wind 3-second readings) only via the UDP broadcast and the WebSocket push channel. The polling REST endpoint exposes 1-minute resolution.
  • No event history. The driver writes the current observation onto the zone attribute. If you want trended history, enable history on each attribute in /admin/attributes so they are sampled into the long-term store.

Troubleshooting

SymptomWhat to check
connect error: login HTTP 401PAT invalid or revoked. Mint a new one at tempestwx.com/settings/tokens and update the api_key.
get_stations returns emptyThe PAT is for a different account, or the station hasn't been claimed in the app yet. Confirm at tempestwx.com.
observation_timestamp is hours behind real timeThe Tempest itself is offline (no Wi-Fi, dead battery, sensor fault). Check the Tempest mobile app for the station's connectivity state. The driver surfaces the last known observation until the cloud catches up.
Forecast fields are staleThe forecast service updates every ~15 min upstream. If forecast_high_c stays unchanged for more than an hour, check the station's lat/long in the Tempest app — a station with no geolocation gets a degraded forecast.
HTTP 429 in logsYou polled faster than 30 s. Raise status_interval to 60000 (default) or higher.

See also

  • Automation variables — the weather variable can be pointed at a Tempest zone instead of an external API.
  • USGS Water Data — another read-only environmental data feed, available as an automation variable rather than a device driver.