Full skill-builder rebuild of tempest per issue #407: - references/: four dense files replacing the single layouts crib sheet - rest-api-and-auth.md (personal-use token via tempestwx.com Settings -> Data Authorizations, token-as-query-parameter auth, StationSet wrapper, device_type HB/AR/SK/ST enum, observation parameters day_offset vs time_start/time_end, better_forecast unit-selection, error signatures), udp-broadcast-protocol.md (port 50222 listen-only broadcast, dispatch- by-type rule, obs_st 18-position UDP record, rapid_wind ob, evt_precip/ evt_strike, hub_status/device_status named fields), observation-layouts- and-units.md (REST 22-position obs_st vs UDP 18, obs_air 8, obs_sky 17 vs 14, daily obs_*_ext summaries, metric-native unit tables), and cli- worked-recipes.md (six executable pipelines). Every file ends with a Sources footer citing live-verified official docs (apidocs.tempestwx.com, weatherflow.github.io/Tempest). - scripts/tempest: fixed researched bugs - rapid_wind handler iterated the single ob array element-wise (TypeError on real datagrams), hub_status printed undocumented freq field, forecast human display double-converted Fahrenheit stations (units_temp=f is documented and honored), SK/AR device types now matched alongside SKY/AIR, StationSet unwrap handles stations/locations/bare-list shapes, missing ~/.tempest.env fallback implemented as documented, dry-run stations plan, handler-owns-flags dispatch. Added decode_message()/handle_datagram() type-dispatch layer covering all seven UDP message families. - scripts/test_tempest.py: 42 offline tests (pytest + unittest green, proxy-trap clean) - canned UDP datagram bytes fed to the decoder with no sockets, mocked REST transport, help/arg-error/dry-run classes, and the documented pipelines (stations->current, obs day totals, forecast units). - SKILL.md: lastfm-model rewrite (275 lines) - Setup, intent-grouped commands, UDP family dispatch table, pipeline recipes, jq guidance, ten grounded gotchas, when-to-use/when-not-to-use boundaries, reference routing table. - README.md: human-format refresh with hub-on-LAN prerequisite. - evals/evals.json: 8 schema-v1 cases incl. two negative probes (Shakespeare The Tempest, generic city forecast). - Root README blurb and references/skill-triggers.md row synced to the new description; .claude-plugin/marketplace.json and llms.txt regenerated (both embed descriptions; check modes exit 0; codex artifact unaffected). Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
3.6 KiB
Tempest — Hyper-Local Weather from Your Own Station
Query live weather from a WeatherFlow Tempest station: current conditions, 7-day forecast, historical observations, and real-time broadcasts from your hub's local network — with every positional sensor array and UDP message family decoded for you.
Why Install This Skill
Generic weather services tell you what the model thinks the sky is doing kilometers away. This skill reads your actual station: the Tempest sitting in your yard, via WeatherFlow's documented REST API and the hub's local UDP broadcast. Once installed, your agent can:
- Current conditions — temperature, humidity, wind (lull/avg/gust + direction), rain, UV, solar radiation, barometric pressure
- 7-day forecast — daily and hourly outlook with precipitation probabilities, unit-aware
- Historical observations — past UTC days of minute-level data for analysis
- Real-time UDP stream — decoded
obs_st,rapid_wind,evt_precip,evt_strike, andhub_statusmessages straight from the hub on port 50222, no cloud round-trip - Station discovery — finds your stations and sensors automatically, never mistaking the hub for a sensor
The tricky parts of the Tempest API are handled for you: observations arrive as positional arrays whose meaning depends on the index, UDP message families have three different payload shapes, and forecast responses are unit-selectable (a naive script double-converts Fahrenheit data into 172-degree nonsense). The CLI decodes all of it, keeps JSON output in metric-native wire units, and converts only for human display.
What You Get
| Path | What it provides |
|---|---|
SKILL.md |
Command reference, pipeline recipes, and the gotchas that actually bite |
scripts/tempest |
CLI: stations, current, obs, forecast, udp listen with --json/--dry-run |
scripts/test_tempest.py |
Offline test suite (canned datagram bytes + mocked REST, no network) |
references/rest-api-and-auth.md |
Token auth, endpoint catalog, response shapes, error signatures |
references/udp-broadcast-protocol.md |
Port 50222 transport, every message family's exact layout |
references/observation-layouts-and-units.md |
Index-by-index field maps for obs_st/obs_air/obs_sky + conversion tables |
references/cli-worked-recipes.md |
Copy-paste multi-step recipes with jq stages |
Quick Start
# Create a token in the Tempest web app: Settings -> Data Authorizations -> Create Token
export TEMPEST_TOKEN="your-token-here"
tempest stations # discover your station and device IDs
tempest current # conditions right now
tempest forecast # current + daily + hourly outlook
tempest udp listen --timeout 30 # real-time broadcast from the hub (no token needed)
Every command accepts --json for machine-readable output and --dry-run to preview the plan offline.
Triggers
Load this skill when the user mentions Tempest, WeatherFlow, their weather station, hyper-local conditions, station observations, or parsing the hub's UDP port 50222 broadcast — temperature, rain, wind, humidity, lightning, or forecast questions tied to a personal station.
Requirements
- Python 3.8+ with the
requestslibrary (the only dependency) - A
TEMPEST_TOKEN(free, personal use) for REST commands — created in the Tempest web app under Settings → Data Authorizations - For UDP listening: a Tempest hub on the same LAN — the hub broadcasts on UDP port 50222 to the local network only; broadcasts do not cross routers, and no token or cloud account is involved. REST commands work from anywhere with internet access.