MeteoSwiss Open Data
/install meteoswiss-ogd
MeteoSwiss Open Data
Access Swiss weather data from MeteoSwiss Open Government Data. Free, no API key. All data from data.geo.admin.ch. CSVs use semicolon (;) delimiters. Metadata CSVs are Latin1 — pipe through iconv -f latin1 -t utf-8.
Quick Reference
| Data | URL / Method | Updates |
|---|---|---|
| Current weather | https://data.geo.admin.ch/ch.meteoschweiz.messwerte-aktuell/VQHA80.csv |
10 min |
| Station metadata | STAC ch.meteoschweiz.ogd-smn → asset ogd-smn_meta_stations.csv (Latin1) |
Daily |
| Forecast metadata | STAC ch.meteoschweiz.ogd-local-forecasting → asset containing meta_point.csv (Latin1) |
Daily |
| Forecast data | STAC items in ch.meteoschweiz.ogd-local-forecasting → parameter CSVs |
Hourly |
| Pollen data | https://data.geo.admin.ch/ch.meteoschweiz.ogd-pollen/{abbr}/ogd-pollen_{abbr}_d_now.csv (Latin1) |
Daily |
STAC API base: https://data.geo.admin.ch/api/stac/v1
1. Get Current Weather
# Get weather for Zurich (station SMA) — key columns: tre200s0 (temp °C),
# ure200s0 (humidity %), rre150z0 (precip mm), fu3010z0 (wind km/h)
curl -s 'https://data.geo.admin.ch/ch.meteoschweiz.messwerte-aktuell/VQHA80.csv' \
| awk -F';' 'NR==1 || $1=="SMA"'
Full parameter list in ${CLAUDE_SKILL_DIR}/REFERENCE.md. Missing values appear as empty fields or -. Timestamps are YYYYMMDDHHmm in UTC.
2. Find Stations
# Search weather stations by name (Latin1 encoded)
curl -s 'https://data.geo.admin.ch/ch.meteoschweiz.ogd-smn/ogd-smn_meta_stations.csv' \
| iconv -f latin1 -t utf-8 \
| awk -F';' 'NR==1 || tolower($0) ~ /zurich/'
Columns: station_abbr, station_name, station_canton, station_height_masl, station_coordinates_wgs84_lat, station_coordinates_wgs84_lon.
# Search forecast locations (~6000 points: stations, postal codes, mountains)
# NOTE: Asset key has a known typo "forcasting" — always get URL from STAC
META_URL=$(curl -s 'https://data.geo.admin.ch/api/stac/v1/collections/ch.meteoschweiz.ogd-local-forecasting' \
| jq -r '[.assets | to_entries[] | select(.key | contains("meta_point")) | .value.href] | first')
curl -s "$META_URL" | iconv -f latin1 -t utf-8 \
| awk -F';' 'NR==1 || $3 ~ /8001/' # search by postal code
Point columns: point_id, point_type_id (1=station, 2=postal_code, 3=mountain), postal_code, station_abbr, point_name.
3. Get Forecasts
Two steps: get the latest STAC item, then download parameter CSVs.
# Step 1: Get latest forecast item
ITEM=$(curl -s 'https://data.geo.admin.ch/api/stac/v1/collections/ch.meteoschweiz.ogd-local-forecasting/items?limit=10' \
| jq -r '[.features[].id] | sort | reverse | .[0]')
# Step 2: Get a parameter CSV (e.g., daily max temperature for Zurich station, point_id=48)
ASSET_URL=$(curl -s "https://data.geo.admin.ch/api/stac/v1/collections/ch.meteoschweiz.ogd-local-forecasting/items/$ITEM" \
| jq -r '[.assets | to_entries[] | select(.key | contains("tre200dx"))] | sort_by(.key) | last | .value.href')
curl -s "$ASSET_URL" | awk -F';' 'NR==1 || $1=="48"'
Station forecasts (point_type_id=1) have daily params: tre200dx (max temp), tre200dn (min temp), rka150d0 (precip), jp2000d0 (weather icon). Postal codes/mountains (type 2,3) have hourly params: tre200h0, rre150h0, jww003i0 — aggregate to daily by grouping on first 8 timestamp chars. Common point_ids: Zurich=48, Bern=29, Geneva=53.
4. Get Pollen Data
# Stations: BAS, BER, BUC, DAV, GEN, LAU, LOG, LUG, LUZ, MUN, NEU, VIS, ZUE
# Use lowercase in URLs
curl -s 'https://data.geo.admin.ch/ch.meteoschweiz.ogd-pollen/zue/ogd-pollen_zue_d_now.csv' \
| iconv -f latin1 -t utf-8 \
| awk -F';' 'NR==1{print} {last=$0} END{print last}'
Columns: station_abbr, Date, then pollen types (BIR=birch, GRA=grass, etc.) in particles/m³.
Error Handling
- Station not found: Check metadata CSV (Section 2) for valid abbreviations
- Empty data: Station may be offline — try a nearby station
- 403/404 on pollen: Verify abbreviation is lowercase and is a pollen station (~13 total)
- Garbled text: You're reading Latin1 as UTF-8 — add
iconv -f latin1 -t utf-8
Bundled Scripts
Token-efficient CLI tools that output structured key=value pairs. Use these instead of raw curl when available — they handle encoding, error checking, and output parsing.
${CLAUDE_SKILL_DIR}/scripts/current-weather.sh SMA # current weather for Zurich
${CLAUDE_SKILL_DIR}/scripts/search-stations.sh zurich # find weather stations
${CLAUDE_SKILL_DIR}/scripts/search-forecast-points.sh 8001 # find forecast point_id by postal code
${CLAUDE_SKILL_DIR}/scripts/forecast.sh 48 # forecast for Zurich (point_id=48)
${CLAUDE_SKILL_DIR}/scripts/pollen.sh ZUE # pollen data for Zurich
All scripts accept --help for usage details. Requires: curl, awk, iconv. Forecast also needs jq.
MCP Server Alternative
For complex queries (fuzzy search, geocoding, structured JSON), use the MCP server: claude mcp add meteoswiss https://meteoswiss-mcp.ars.is/mcp
Full Reference
See ${CLAUDE_SKILL_DIR}/REFERENCE.md for all parameters, weather icon codes, and STAC collections.
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install meteoswiss-ogd - 安装完成后,直接呼叫该 Skill 的名称或使用
/meteoswiss-ogd触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
MeteoSwiss Open Data 是什么?
Use when the user asks about Swiss weather, MeteoSwiss data, or Swiss weather forecasts and no MCP server is available. Covers current weather, forecasts, po... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 109 次。
如何安装 MeteoSwiss Open Data?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install meteoswiss-ogd」即可一键安装,无需额外配置。
MeteoSwiss Open Data 是免费的吗?
是的,MeteoSwiss Open Data 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
MeteoSwiss Open Data 支持哪些平台?
MeteoSwiss Open Data 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 MeteoSwiss Open Data?
由 Max Albrecht(@eins78)开发并维护,当前版本 v1.0.0-rc.1。