Azarashi
A QZSS DCR Decoder.
Description
azarashi は、準天頂衛星みちびきが送信する災危通報メッセージのデコーダーです。u-blox と Sony Spresense が出力するメッセージ形式に対応しています。災危通報は「災害・危機管理通報サービス」の略で、防災機関が発表した地震や津波などの情報を、みちびきが送信します。
IS-QZSS-DCR-017 と IS-QZSS-DCX-004 に対応しています。DCX は災危通報の拡張メッセージで、L-Alert や J-Alert などを伝えます。
Installation
$ pip install azarashi
シリアルデバイスからの読み込みに使う pySerial も一緒にインストールされます。
Python 3.11 以降で動きます。
Usage
azarashi コマンドにメッセージを渡すと、災害情報を読みやすい文章にして表示します。
$ echo '$QZQSM,55,C6AF89A820000324000050400548C5E2C000000003DFF8001C00001185443FC*05' | azarashi nmea
2026-09-17T14:22:41.075694Z --------------------------------
防災気象情報(緊急地震速報)(発表)(訓練/試験)
*** これは訓練です ***
緊急地震速報
強い揺れに警戒してください。
発表時刻: 3月10日10時0分
震央地名: 日向灘
地震発生時刻: 10日10時0分
深さ: 10km
マグニチュード: 7.2
震度(下限): 震度6弱
震度(上限): 〜程度以上
島根、岡山、広島、山口、香川、愛媛、高知、福岡、佐賀、長崎、熊本、大分、宮崎、鹿児島、中国、四国、九州
GPS モジュールから直接読むときは、デバイスのパスとボーレートを指定します。
$ azarashi ublox -f /dev/ttyS0 -b 9600
プログラムから使うときは decode() にメッセージを渡します。レポートオブジェクトが返り、print() に渡すと、さきほどのコマンドと同じ文章を表示します。災害の種類ごとのパラメータは、属性か get_params() で取り出せます。
>>> import azarashi
>>> report = azarashi.decode('$QZQSM,55,C6AF89A820000324000050400548C5E2C000000003DFF8001C00001185443FC*05')
>>> report.disaster_category, report.magnitude, report.seismic_epicenter
('緊急地震速報', '7.2', '日向灘')
ストリームから読み続けるときは decode_stream() を使います。シリアルデバイスは pySerial で開いて渡してください。メッセージが一つ読めるたびに callback が呼ばれます。
import azarashi
import serial
with serial.Serial('/dev/ttyS0', 9600) as ser:
while True:
try:
azarashi.decode_stream(ser, msg_type='ublox', callback=print)
except azarashi.AzarashiReadOn as e:
print(f'# [{type(e).__name__}] {e}')
except azarashi.AzarashiReopenStream as e:
print(f'# [{type(e).__name__}] {e}')
break
except azarashi.AzarashiStopReading:
break
捕捉している3つのクラスが、次に何をすべきかを表します。
AzarashiReadOn: メッセージが手に入らなかったときに送出されます。たとえば電文が壊れていたときや、azarashi がまだ対応していない種類のメッセージだったときです。ストリームは無事なので、もう一度呼べば次のメッセージに進みます。AzarashiReopenStream: ストリームの読み取りそのものが失敗したときに送出されます。たとえば USB のデバイスが抜けたときです。そのストリームは二度と読めないので、閉じて開き直してください。AzarashiStopReading: 読むものがなくなったときに送出されます。たとえば記録したファイルを最後まで読んだときです。続きは届きません。
3つは互いに継承関係がないので、どの順番に書いても同じように動きます。実際に送出されるのは、この3つのいずれかを継承した、より細かいクラスです。何が起きたかを名前が表すので、ログには AzarashiDisconnectedError のような具体的な名前が出ます。
呼び出し方を間違えたときは、この3つのどれでもない AzarashiFixTheCall の仲間が送出されます。たとえば対応していない形式を指定したときです。ループでは捕捉されず、理由を示して止まります。コードを直してください。
仕様にないコード値を受け取っただけでは例外になりません。そのコード値は 火山(コード番号:999) のような名前にしてレポートに入れます。例外の一覧は API を見てください。
Documentation
- Preparation: u-blox や Sony Spresense に災危通報を出力させる設定
- CLI: azarashi コマンドのオプション、受信データの記録と再生
- API:
decode()、decode_stream()、例外、型ヒント、プログラムの例 - JSON: JSON API、NDJSON 出力、JSON Schema
- English Translation Policy: DCR の英語の方針と出典、azarashi が訳した英語の一覧
- Reports: レポートオブジェクトの共通フィールドと、形式ごとの一覧
- Network: 受信したデータを UDP で別の装置に送る
- Tips: 何も表示されないとき、Encountered EOF、SD フィールドの監視
- Development: テストと静的解析の実行方法
Feedback
イシュー報告、プルリクエスト、コメント等、なんでもよいのでフィードバックお待ちしています。星をもらうと開発が活発になります。 Questions, suggestions, and comments are welcome! Please feel free to write in English.
Credits
This project was originally developed during my time at BitMeister Inc., with support and resources generously provided by the company. I am really thankful for the people and the environment that helped make it happen. It is now maintained independently.
Release files for azarashi 0.17.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| azarashi-0.17.0.tar.gz | 293.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| azarashi-0.17.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 541.1 kB
Release files / azarashi-0.17.0.tar.gz
| Download URL | azarashi-0.17.0.tar.gz |
|---|---|
| Size | 293.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8f75e3c85529cfcd655c5f43a809faf37d412c0c5c0c96e48a4b15cf3a95fdab
|
|
BLAKE2b-256 checksum How to use checksums |
527ec2dbeb75ab33e81da8eda885e0beba352d9474bb77ce7fc1ffe754907ced
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / azarashi-0.17.0-py3-none-any.whl
| Download URL | azarashi-0.17.0-py3-none-any.whl |
|---|---|
| Size | 247.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
26898793495aa872a4e8f04a10a035e7a2dcd4f12c7ba33cce1e6879ad3704e3
|
|
BLAKE2b-256 checksum How to use checksums |
8705636fa831d0416c42caf9a6ac73098f7b59bac5c84f09464b24f061bf50d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency log