# dsh-quake-alert · 災害警報 QuakeAlert

[English](./README.md) · [中文](./README.zh.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）を受信します。EEW は、気象庁の発表から P2PQuake が中継するまで数百ミリ秒です。
- **リアルタイム配信（世界）**：EMSC の WebSocket につなぎ、世界の地震を受信します。
- **日本の気象災害**：気象庁の公開 XML 電文から土砂災害・洪水・大雨・高潮を取得し、警戒レベル4以上のみ通知します。
- **中国大陸**：Wolfx が転送する中国地震台網（CENC）の地震警報・地震速報、および中央気象台（nmc.cn）の暴雨・地質災害警報信号（オレンジ以上）を受信します。
- **米国とカナダ**：ブラウザから NWS の洪水警報、ECCC の降雨・洪水・高潮警報を直接問い合わせます。
- **世界の地震と津波**：USGS の世界地震カタログと NOAA の津波 CAP 電文は、プラグインのバックグラウンドが定期的にポーリングします。
- **登録地域**：入口は 1 つだけです。まず国 / 地域を選び、次にその国の下位コントロールを展開します。日本なら都道府県（必要に応じて市区町村まで）、中国大陸なら省 → 地級市 + 半径、その他の国 / 地域なら都市リストまたは座標 + 半径という流れになります。
- **半径はプリセットから選べます**：ローカルのみ（約 30 km）/ 市とその周辺（約 100 km、新規登録時の既定）/ 広い範囲（約 300 km）。キロメートル数を直接入力することもできます。
- **しきい値は 1 つの表にまとめてあります**：1 行が 1 災種で、左のスイッチが通知の有無、右のしきい値がどの強さから通知するかを決めます。気象災害は境界が固定なので、スイッチだけです。
- **通知**：通知音は Web Audio で合成し、音量を調整できます。ページが前面にあるときはトースト、背面ではシステム通知です。地震と EEW の見出しには震度が入ります。
- **取消・解除の通知**：通知済みの EEW が取り消されたとき、または津波予報が解除されたときは、短い下降音でお知らせします。NWS の取消メッセージは VTEC の追跡番号で照合します。
- **サイレント時間帯**：毎日決まった時間帯は、重要でない警報を鳴らしません。赤レベルは既定でこの制限を貫通しますが、例外をオフにすることもできます。
- **自動再接続**：接続が切れると、間隔を徐々に延ばしながら再接続します（1 秒 → 最大 60 秒）。P2PQuake が約 10 分ごとに切断するのは正常な動作です。接続に失敗した場合も、接続後にデータが来なくなった場合も検出して復帰します。
- **同じ地震は 1 回だけ**：同じ地震について複数回発表されても通知は 1 回だけで、震度が上がったときのみ再通知します。複数の機関が同じ地震を報じた場合は、先に届いたソースだけが通知します。
- **履歴**：直近 5 日間の処理記録を 30 件まで残します。実際に鳴ったものと、そもそも判定できなかったものだけです。
- **表示言語**：简体中文 / 繁體中文 / 日本語 / English。設定で切り替えると即時反映されます。データ源から来たテキストは原文のまま表示します。
- **設定のエクスポートとインポート**：設定を JSON ファイルに書き出し、別のマシンやブラウザで読み込めます。インポートは全体を置き換える方式で、実行前に現在の設定を自動でバックアップします。
- **このマシンに保存**：設定は DSH のマシン単位のストレージに保存されるため、ブラウザやマシンを変更しても残ります。ブラウザのローカルストレージにもコピーがあり、DSH 側が使えないときのフォールバックとして働きます。
- **ソース状態**：サイドバー下部の状態ドットが現在の状態を示し、通知レベルに達していない気象警報があればカーソルを合わせたときに表示されます。ソースごとの詳細（受信した差分の件数・失敗回数・欠落の有無・最終取得時刻・上流が更新を止めていないか）は「設定 → テストと診断」で確認できます。
- **データソース切替**：本番（リアルタイム）とサンドボックス（2023 年の履歴を約 30 秒に 1 件再生）を切り替えられます。
- **ローカル診断**：テストボタンが 2 つあります。ソース形式の電文をローカルで組み立て、実際のパーサーとマッチャーに通すため、ネットワーク通信は一切発生しません。

## インストール

```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. **災害の種類としきい値** —— 1 行に 1 災種です。スイッチが通知の有無、しきい値がどの強さから通知するかを決めます。
4. **通知とサウンド** —— 通知音とシステム通知を有効にし、音量を調整します。試聴ボタンで確認してください。
5. **データ源** —— 普段は「本番」のままで構いません。経路を確かめたいときに「サンドボックス」へ切り替えます。
6. **テストと診断** —— 2 つのテストボタンはソース形式の電文をローカルで組み立て、実際のパーサーとマッチャーに通します。ネットワーク通信が発生しないので、何度押してもかまいません。下にはソースごとの状態と、AI アシスタントに貼り付けて使う診断スナップショットが並びます。

アラートが条件に一致すると、通知音が鳴ります。前面ではトースト、背面ではシステム通知が出て、同時に「警報の記録」へ残ります。

## ソースに接続できない場合（中国本土のネットワーク）

中国本土のネットワークでは、データソースにつながらない・更新が止まる・通知が鳴らない、といったことが起こります。こうした不具合は現地でしか再現しないため、本プラグインは故障を**画面上で見える状態**に変えてから調べる方針です（**設定 → 災害警報 → テストと診断 → ソース状態**）。あわせて、**AI アシスタントに読ませる**ためのトラブルシューティング文書も用意しました（中国語のみ）。

> **AI アシスタントに [`TROUBLESHOOTING.zh.md`](./TROUBLESHOOTING.zh.md) を渡し、手順どおりに処理させてください。**

## その他のドキュメント

- **[GUIDE.md](./GUIDE.md)** —— 動作の仕組み、対応範囲とデータの出典、既知の制限、開発について。中国語版は [GUIDE.zh.md](./GUIDE.zh.md) です。
- **[CHANGELOG.md](./CHANGELOG.md)** —— バージョンごとの追加・変更・修正・削除。

## License

MIT © XuZhichao
