🌦️ Weather NWS — 全美气象预报
v1.0.3调用美国国家气象局 NWS 获取美国地区精准天气预报,非美国地点自动回退至全球 wttr.in 服务,支持雨雪累积量、空气质量等详细气象数据查询。
详细分析 ▾
运行时依赖
版本
- 内部优化 scripts/get_weather.py - 无面向用户的新功能或选项变动 - 所有现有命令、标志与行为保持不变
安装命令
点击复制技能文档
从美国国家气象局获取详细的美国天气预报,并自动回退到全球天气数据,包含逐小时预报、空气质量数据和结构化的冬季风暴累计数据。
此技能的用途
此技能以 8 种模式运行,以匹配您的查询:
| 模式 | 激活条件 | 返回内容 |
|---|---|---|
| 🌦️ 标准预报 | 默认(未指定时间) | 12 小时预报,包含今天/今晚/明天 |
| ⏰ 逐小时预报 | 检测到时间特定查询 | 逐小时详细预报(约 156 个时段,7 天) |
| 🌨️ 冬季风暴 | 包含"雪"、"风暴"等关键词 | 12 小时预报 + 结构化累计数据 |
| 💨 AQI 报告 | 包含 --aqi 标志 | 当前及预报的空气质量指数 |
| 🌡️ 实况与预报对比 | 包含 --current 标志 | 当前观测站数据及与预报的对比 |
| ☀️ 天文时间 | 包含 --astro 标志 | 日出/日落、黄昏、月相 |
| ✈️ 航空预报 | 包含 --taf 标志 | 终端机场预报(TAF) |
| 🔥 火灾天气 | 包含 --fire 标志 | 火灾危险等级、红旗警告 |
| 🌍 全球回退 | 非美国位置 | wttr.in 数据(较简略) |
AirNow API 密钥(可选但推荐)
AirNow API 无需密钥即可使用,但存在限制:
| 无 API 密钥 | 有 API 密钥 |
|---|---|
| 速率受限(请求可能失败) | 更高的速率限制 |
| 不保证可用性 | 优先访问 |
| 可能返回空结果 | 可靠的 AQI 数据 |
获取 API 密钥
- 访问:https://docs.airnowapi.org/account/request/
- 填写申请表(个人免费使用)
- 密钥将在 1-2 个工作日内通过电子邮件发送
设置 API 密钥
选项 1:环境变量(推荐)
export AIRNOW_API_KEY="your-api-key-here"
选项 2:OpenClaw 配置(持久化)
在您的 OpenClaw 配置中的 skills.entries.weather-nws.env 下添加:
{
"skills": {
"entries": {
"weather-nws": {
"env": {
"AIRNOW_API_KEY": "your-api-key-here"
}
}
}
}
}
使用时机
✅ 使用此技能的场景:
- "[美国城市] 的天气怎么样?"
- "预计会有多少雪?"
- "[地点] 的冬季风暴预报"
- "[美国城市] 明天会下雨吗?"
- "雨什么时候停?"
- "[城市] 今天的空气质量"
- 任何基于美国的天气查询
🔄 自动回退:
- 非美国位置 → wttr.in
- NWS API 不可用 → wttr.in
- 两个数据源都失败 → 清晰的错误信息
快速开始
# 运行统一的天气脚本 python3 ./scripts/get_weather.py "New York, NY"# 如有需要,强制指定特定数据源(通常会自动检测) python3 ./scripts/get_weather.py "London, UK" --source wttr
# 获取逐小时预报(自动检测或强制指定) python3 ./scripts/get_weather.py "Boston at 8 PM" python3 ./scripts/get_weather.py "Chicago" --hourly
# 包含空气质量 python3 ./scripts/get_weather.py "Seattle" --aqi
逐小时自动检测
此技能会自动检测时间特定语言并切换到逐小时预报模式:
"Boston at 8 PM" → ⏰ Hourly mode
"Boston tonight" → ⏰ Hourly mode
"Boston tomorrow morning" → ⏰ Hourly mode
"Boston at 5:30" → ⏰ Hourly mode
"When will it stop raining?" → ⏰ Hourly mode
检测的模式:
at 8 PM、at 5:30等tonight、this afternoontomorrow morning/afternoon/nightwhen will...、how long until...
空气质量(--aqi)
将 AirNow AQI 数据添加到任何预报中:
python3 ./scripts/get_weather.py "Boston" --aqi
输出包含:
- 当前 AQI 及颜色编码的表情符号(🟢 🟡 🟠 🔴 🟣 🔵)
- 主要污染物(PM2.5、O3 等)
- 基于类别的健康建议
- 3 天 AQI 预报
AQI 类别:
| 范围 | 类别 | 表情符号 | 建议 |
|---|---|---|---|
| 0-50 | 良好 | 🟢 | 适合户外活动 |
| 51-100 | 中等 | 🟡 | 敏感人群限制运动量 |
| 101-150 | 对敏感人群不健康 | 🟠 | 儿童/老年人限制户外活动 |
| 151-200 | 不健康 | 🔴 | 所有人减少户外活动 |
| 201-300 | 非常不健康 | 🟣 | 避免户外活动 |
| 301-500 | 有害 | 🔵 | 待在室内 — 健康警报 |
输出格式
无论数据源如何,脚本都提供一致的输出:
标题: 位置和当前警报状态 今天 → 今晚 → 明天: 结构化时间线 累计: 可用时的具体降雪/降雨量 总结: 可操作的时间摘要
实现
脚本处理以下内容:
- 将位置地理编码为经纬度
- 检测位置是否在美国
- 为美国位置调用 NWS API(详细累计数据)
- 为非美国位置回退到 wttr.in(基本预报)
- 使用表情符号和结构格式化一致输出
限制
- NWS: 仅限美国,需要互联网,速率受限
- wttr.in: 全球可用,累计数据较简略,无官方监视/警告
- AirNow: 仅限美国和加拿大,需要 API 密钥才能可靠访问
示例
美国冬季风暴查询:
python3 ./scripts/get_weather.py "Boston, MA"
→ 返回包含累计估算值的 NWS 数据
国际位置:
python3 ./scripts/get_weather.py "Toronto, Canada"
→ 自动使用 wttr.in,注明其为非美国位置
包含空气质量:
python3 ./scripts/get_weather.py "Seattle" --aqi
→ 天气 + AQI 数据及健康建议
实况与预报对比:
python3 ./scripts/get_weather.py "Boston" --current
→ 当前观测站数据及与预报的对比
组合功能:
python3 ./scripts/get_weather.py "Seattle" --aqi --current
→ 完整天气报告,包含所有数据源
第 3 阶段功能:
python3 ./scripts/get_weather.py "Boston" --astro # 日出/日落时间
python3 ./scripts/get_weather.py "SFO" --taf # 航空预报
python3 ./scripts/get_weather.py "California" --fire # 火灾天气
python3 ./scripts/get_weather.py "Denver" --astro --aqi --current # 全部功能!
实况与预报对比(--current)
显示来自最近 NWS 观测站的实际测量条件以及预报:
🌡️ Observed Conditions
Actually 43°F (3° warmer than 40° forecast)
☁️ Partly Cloudy
💨 WNW 8 mph • 💧 36% humidity • 🌫️ Dewpoint 18°F • 📊 Pressure 29.86 inHg • 👀 Visibility 10+ mi
显示的字段:
- 温度及与预报的偏差
- 天气状况描述
- 风速和风向
- 湿度百分比
- 露点
- 气压(英寸汞柱)
- 能见度
警报优先级
当有警报处于活动状态时,使用严重性/紧急性/确定性加权以增强格式显示:
| 因素 | 权重 |
|---|---|
| 严重性 | 极端 (4) > 严重 (3) > 中等 (2) > 轻微 (1) |
| 紧急性 | 立即 (3) > 预期 (2) > 未来 (1) |
| 确定性 | 已观测 (3) > 可能 (2) > 可能 (1) |
| 严重性 | 表情符号 | 徽章 |
|---|---|---|
| Extreme | ⚫ | EXTREME |
| Severe | 🔴 | SEVERE |
| Moderate | 🟠 | MODERATE |
| Minor | 🟡 | MINOR |
- 带严重性徽章的事件名称
- 紧急性标签:⏰ 立即 / 📅 预期 / 🔮 未来
- 时间范围(开始 → 过期)
- 描述的第一句话
- 建议的响应操作
示例:
🟠 [MODERATE] Winter Storm Warning
📅 Expected | Winter Storm Warning from 6 PM to 10 AM EST
🕐 6:00 PM → 10:00 AM
📝 Heavy snow expected with accumulations of 6-10 inches...
👉 🎒 Prepare now
参考资料
- references/nws-api.md — NWS API 端点详情
- references/airnow-api.md — AirNow API 文档
第 3 阶段功能
天文时间(--astro)
显示日出、日落、民用黄昏和月相信息:
python3 ./scripts/get_weather.py "Boston" --astro
输出包含:
- 🌅 Sunrise: 带有倒计时/已过去时间
- 🌇 Sunset: 带有倒计时/即将到来时间
- 💡 Civil Twilight: 黎明和黄昏时间(适合跑步者、骑行者)
- ⏱️ Daylight: 总日照时长
- 🌙 Moon: 当前月相及照明百分比
示例:
☀️ Astronomical Times — Boston
🌅 Sunrise: 6:22 AM (12h ago)
🌇 Sunset: 5:31 PM (in 2h)
💡 Civil Twilight: 5:55 AM – 5:58 PM
⏱️ Daylight: 11h 9m
🌙 Moon: 🌓 First Quarter (50.0%)
航空预报(--taf)
显示最近航空天气站的终端机场预报(TAF):
python3 ./scripts/get_weather.py "SFO" --taf
注意: TAF 是为航空用途设计的。报告提供:
- 站点标识符
- 风向和风速条件
- 能见度
- 云底高度信息
重要: 此信息仅供参考。始终检查官方来源以进行飞行计划。
火灾天气(--fire)
显示火灾多发地区的火灾危险信息:
python3 ./scripts/get_weather.py "California" --fire
输出包含:
- 火灾危险等级(如有升高)
- 🔥 Red Flag Warnings(如处于活动状态)
- 火灾天气预报区域
- 来源归属
红旗警告表示关键的火灾天气条件(低湿度 + 高风速)。
变更日志
v1.3.0 (2026-02-26) - 第三阶段
- 添加了
--astro标志,用于日出/日落、暮光和月相 - 添加了
--taf标志,用于航空终端机场预报 - 添加了
--fire标志,用于火灾天气危险和红旗警告 - 添加了月相计算(盈亏、照明百分比)
- 添加了日照时长计算
- 添加了针对跑步者/骑行者的民用暮光检测
v1.2.0 (2026-02-26) - 第二阶段
- 添加了
--current标志,用于站点观测与预报对比 - 增强了警报格式,包含严重性/紧急性/确定性优先级评分
- 添加了温度差值比较(比预报更暖/更冷)
- 添加了完整的观测详情:湿度、露点、气压、能见度
v1.1.0 (2026-02-26)
- 添加了小时预报,支持时间查询自动检测
- 添加了 AirNow AQI 集成(
--aqi标志) - 添加了用于冬季风暴积累的结构化网格数据
- 修复了 AirNow API 端点 URL
v1.0.0 (2026-02-22)
- 初始版本:NWS API,wttr.in 作为备用
- 12 小时预报周期
- 警报集成
- 文本解析的积累估算