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/devices → Add 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_keyyes—Tempest 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. A value that is not a positive number (blank, 0, negative, text) or is larger than 2147483647 uses the default; anything from 1 to 999 is read as 1000.
forecast_intervalno900000Better Forecast poll interval in ms. Upstream service updates every ~15 minutes. Invalid values use the default, as for status_interval.
request_timeoutno15000Per-request HTTP timeout in ms. A value that is not a positive number uses the default.

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_devices—Enumerate 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 observation poll for the addressed station, or for every station if omitted. The forecast keeps its own forecast_interval cadence.

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.

Connection state​

The device shows connected once the station listing succeeds and stays connected while the cloud keeps answering with JSON. It shows disconnected when the cloud cannot be reached at all, or when it rejects the token (HTTP 401/403), so a revoked PAT raises the usual device-offline alarm. A reply about one request, such as a 404 for a mistyped station id or a 429 throttle, does not take the device offline. A 5xx from a command does, as before; a 5xx during a poll leaves the state alone.

If every station's observation request fails for three polls in a row, the driver slows down: the wait doubles from status_interval up to every 5 minutes (or status_interval, if that is longer). Normal polling resumes as soon as any station answers. A failing request is logged once while it keeps failing, not on every poll.

Known limitations​

  • Cloud-only path. This driver polls the WeatherFlow cloud. If the GEM controller loses internet, observations stop updating until connectivity returns. The companion WeatherFlow Tempest (Local UDP) driver closes that gap by listening to the hub's LAN broadcast on port 50222.
  • 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 — use the local UDP driver for those.
  • 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.
retrying connect in … msThe first station listing failed (cloud unreachable or PAT rejected). The driver keeps retrying on its own, starting at status_interval (at least 15 s) and doubling up to every 15 minutes, and begins polling as soon as a listing succeeds. No reload is needed once the cause is fixed, though a reload retries immediately.
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.
cloud not answering, polling backed offEvery station's request failed three polls in a row (no internet, DNS, or a rejected token). The driver keeps trying at a slower rate, up to every 5 minutes, and goes back to status_interval as soon as a reply arrives.
unfilled address tokenA command was sent with a literal [@zone.address] instead of a station id, usually from a macro that targets the device rather than a zone. Target the station zone, or pass the numeric station id.

See also​

  • WeatherFlow Tempest (Local UDP) — the companion driver for the same hardware over the LAN broadcast. No token, no internet, 3-second wind, but no forecast. Running both against one station is the full-coverage setup; give each driver its own zone.
  • 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.