# dsh-quake-alert · 灾害预警 QuakeAlert

[English](./README.md) · **中文** · [日本語](./README.ja.md)

[![Awesome DSH Plugin](https://awesome-dsh-plugin.com/badge.svg)](https://awesome-dsh-plugin.com)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![npm version](https://img.shields.io/npm/v/dsh-quake-alert)](https://www.npmjs.com/package/dsh-quake-alert)
[![dsh.so risk](https://www.dsh.so/badge/dsh-quake-alert.svg)](https://www.dsh.so/artifact/dsh-quake-alert/)
[![dsh.so install · dsh 0.2.0-rc.2](https://www.dsh.so/badge/install/dsh-quake-alert@0.2.0-rc.2.svg)](https://www.dsh.so/artifact/dsh-quake-alert/)

这是给 DeepSeek Harness（DSH）用的灾害预警插件。你使用 DSH 期间，它会实时推送**日本**和**全球**的
地震、海啸与气象灾害预警；一旦命中你设置的关注地区与阈值，就会响一声、在页面上弹条提示
（页面切到后台时改发系统通知）。

⚠️ **免责声明（请先阅读）**：预警数据由 [P2PQuake](https://www.p2pquake.net/)、日本气象厅公开 XML 电文、
[EMSC](https://www.seismicportal.eu/)、[USGS](https://earthquake.usgs.gov/) 与
[NOAA](https://www.tsunami.gov/) 提供或转播，都不是官方直接推送；紧急地震速报（EEW）的内容与配信品质
不作保证。本插件的提醒**仅供参考**，避险请以当地官方机构的发布为准。插件只在 DSH 页面开着时工作。

## 功能特性

- **实时推送（日本）**：与 P2PQuake 建立 WebSocket 长连接，接收地震情报（551）、紧急地震速报 EEW（556）与海啸预报（552）；从气象厅发布到 P2PQuake 转播，EEW 通常只要数百毫秒。
- **实时推送（全球）**：与 EMSC 建立 WebSocket 长连接，接收全球地震。
- **日本气象灾害**：接收气象厅公开 XML 电文里的泥石流、洪水、大雨与高潮，只在警戒レベル4 以上播报。
- **中国大陆**：接收 Wolfx 转播的中国地震台网地震预警与速报，以及中央气象台的暴雨 / 地质灾害预警信号（橙色及以上）。
- **美国与加拿大**：由浏览器直接查询 NWS 的洪水类预警，以及 ECCC 的降雨 / 洪水 / 风暴潮预警。
- **全球地震与海啸**：USGS 的全球地震目录与 NOAA 的海啸 CAP 电文，由插件在后台轮询。
- **关注地区**：只有一个入口，先选国家 / 地区，再展开它自己的下级控件。日本 → 都道府县（可选到市区町村）；中国大陆 → 省 → 地级市 + 半径；其他国家 / 地区 → 城市列表或坐标 + 半径。
- **半径分几档预设**：仅本地（约 30 km）/ 本市及周边（约 100 km，新建时的默认）/ 较大范围（约 300 km），也可以直接填公里数。
- **阈值都在同一张表里**：一行一个灾种，左边的开关决定要不要提醒，右边的阈值决定多强才提醒。气象灾害的边界是固定的，所以只给开关。
- **通知方式**：提示音用 Web Audio 合成，音量可调；页面在前台就弹页内提示，切到后台就发系统通知。地震与 EEW 的提醒标题会带震度。
- **取消 / 解除提醒**：此前提醒过的 EEW 被取消、或海啸预报被解除时，补一条下行音提醒。NWS 的取消消息靠 VTEC 追踪号匹配。
- **静默时段**：每天固定时段内不打扰非关键预警。红色等级默认不受静默限制，也可以关掉这个例外。
- **断线自动重连**：重连间隔逐次延长（1s → 60s 封顶）。P2PQuake 每约 10 分钟强制断线属常态，重连是正常的；连不上和连上后长时间没数据这两种情况，插件都能发现并恢复。
- **同一场地震只提醒一次**：同一次地震的多次发布，只在震度升级时才再提醒一次；多个机构报同一场地震时，只让先到的源播报。
- **历史记录**：只留最近 5 天里的 30 条处理记录，真的响过的和根本没法判定的都收，其余不收。
- **界面语言**：简体中文 / 繁體中文 / 日本語 / English，在设置里切换、立即生效。来自数据源的文本一律按原文显示。
- **配置导出与导入**：可以把配置导出成 JSON 文件，换机器或换浏览器时再导入。导入是整体替换，导入前会自动备份当前配置。
- **保存在本机**：配置存在 DSH 的机器级存储里，换浏览器、换机器都还在；浏览器本地存储再留一份副本，前者用不了时拿它顶上。
- **源状态**：侧边栏底部有一个状态圆点，显示当前状态，悬停还能看到未达播报级别的气象警报；逐源明细（收到多少增量、失败几次、有没有缺口、最近一次拉取时间、上游是否停更）在 **设置 → 灾害预警 → 测试与诊断**里。
- **数据源切换**：正式源（实时），或沙箱源（回放 2023 年的历史数据，约 30 秒一条）。
- **本地诊断**：两个测试按钮在本地构造数据源格式的电文，走真实的解析与匹配，不发任何网络请求。

## 安装

```sh
# 从 npm 安装
dsh plugin --profile web add dsh-quake-alert

# 重启 dsh web 使插件生效
```

想跟仓库最新提交的话，也可以直接从 GitHub 装：
`dsh plugin --profile web add github:MurasakiIzumi/dsh-quake-alert`。

**升级**：重跑一次上面的命令，再重启 `dsh web`。改动只落在 `client/`（浏览器端）时，刷新页面就生效；
动了 `lib/`（后台端）就得重启。

## 使用

1. 打开 **设置 → 灾害预警**。
2. **关注地区**，先选**国家 / 地区**，再展开该国的下级控件：
   - **日本**，点选你关注的都道府县（不选 = 提醒全日本）；选了县之后可以再细化到市区町村。
   - **中国大陆**，选省 → 选市 → 选半径 →「添加这个城市」，也可以点「用我的位置」。表里的坐标是行政区中心点，面积特别大的省 / 市请把半径调大。
   - **其他国家 / 地区**，选国家、找到城市后点一下就能添加，也可以手填坐标表单。城市表只收人口 10 万以上的城镇。

   已关注的地区在这个区块下方统一列出，随时可以移除。

3. **灾害类型与阈值**，一行一个灾种：开关决定要不要提醒，阈值决定多强才提醒。
4. **通知与声音**，开启提示音 / 系统通知，调节音量，用试听按钮验证。
5. **数据源**，日常保持「正式」；想验证链路时切「沙箱」。
6. **测试与诊断**，两个测试按钮在本地构造源格式电文，走真实的解析与匹配，不发任何网络请求，可以反复点击。下面是逐源状态与诊断快照，可以直接贴给 AI 帮你排查。

命中预警后会有提示音，前台弹页内提示、后台发系统通知，同时记入「最近预警记录」。

## 连不上某个源？（大陆网络）

在**中国大陆网络下**，本插件可能连不上某个数据源，或者数据不更新，结果就是提醒不响。这类毛病只在大陆
网络下出现，所以插件把每种故障都做成界面上**看得见的状态**（**设置 → 灾害预警 → 测试与诊断 → 源状态**），
再配一份**给 AI 读**的排查文档：

> **把 [`TROUBLESHOOTING.zh.md`](./TROUBLESHOOTING.zh.md) 交给你的 AI 助手，让它照着里面的步骤做。**

## 更多文档

- **[GUIDE.zh.md](./GUIDE.zh.md)**，讲工作原理、覆盖范围与数据来源、已知限制，以及怎么开发。
- **[CHANGELOG.md](./CHANGELOG.md)**，记各版本新增、修改、修复与删除的内容。

## License

MIT © XuZhichao
