JL1NIE ’s blog

趣味のアマチュア無線やプログラミングについて徒然と。

SOTA山APRSメッセージサービス「SOTAwatchLive!」

f:id:CentralAttack:20190721002458j:plain

APRSビーコンの位置情報とSOTAWatch3のアラート・スポット情報と共にみることができるSOTAwatch Live!というサービスを始めました。

(2019/7/21 これまでの記事をまとめ、SLIPPERの仕様変更分を更新しました)

 ・SOTAアクティベータ向け

Welcomeメッセージの受信

・SOTAwatch3にアラートを登録し、APRSビーコンを出しながらSOTA山を登ってください。APRSビーコンが受信されると、山頂付近で以下のメッセージが届きます。

・山頂から300m以内に近づくと山頂までの距離と方向を示すメッセージが届きます。
メッセージ:
 1. Approaching JA/KN-006, 250m(120deg) to go. (山頂までの距離と方向)

・山頂から100m以内に近づくと、次の3つのメッセージが届きます。
一つ目はSOTA山の名称・標高・ポイント、二つ目は山頂の属するJCC/JCGの候補です。最後にその山頂の属する大陸(国内はJAのみ、その他アジア・オセアニア、ヨーロッパ・アフリカ、北米・南米の4種)の最新スポット情報が通知されます。

メッセージ:
  1.  Welcome to JA/KN-006 - Ooyama 1252m 8pts.  (SOTAサミットの情報)
  2.  Isehara-city<JCC#1115> (山頂のJCC/JCG情報)
  3. JA国内の最新スポット情報 

・また受信したAPRSビーコンの位置情報を元にSOTAwatchLive!の地図上に軌跡が描かれます。

便利なコマンド
APRSでJL1NIE-10宛にメッセージでコマンドを送ると様々な機能を使うことができます。
・スポット情報の入手
国内・DXの最新3スポットをメッセージで返します。

コマンド

JA 日本国内 
DX 全世界
AS又はOC アジア・オセアニア地域
EU又はAF ヨーロッパ・アフリカ地域
NA又はSA 北アメリカ・南アメリカ地域

例:

コマンド:JA
メッセージ:00:30-JL1NIE/1-14.061
・Welcomeメッセージの制御
コマンド
 ACT  (Activate)   山頂到着時のWelcomeメッセージの送信を行います
 DEACT (Deactivete)  山頂到着時のWelcomeメッセージの送信を止めます。
※デフォルトは特にお申し出のあった方を除きACTになります。
例:
 コマンド: ACT
 メッセージ: Activate summit message.

 ・現在位置情報の入手
コマンド 
 LOC  (LOCate)
  直近に受信したビーコンに基づき位置情報を返します。山頂からの距離によってメッセージの内容が異なります。山頂にいる際は山頂ビーコンの受信時間(UTC)と最寄りのサミットまでの距離と方角(真北からの角度)を返します。

メッセージ:

メッセージ(山頂) : JA/KN-006 - Ooyama 1252m 8pts. 51m(120deg).

メッセージ(300m以内): Approaching JA/KN-006, 250m(120deg) to go.

メッセージ(300m以上): 03:30 KN-006 2104m(120)

APRSビーコン受信状況入手
コマンド

 BC (BeaCon)
  直近2時間のAPRSビーコン受信状況を以下のフォーマットで返します。
  山頂にいる局リストにはビーコンの受信時間が表示されています。

メッセージ:

  On:<山頂300m以内にいる局のリスト>
  APR:<山頂に向かっている(600m以内)局のリスト>
  DESC:<山頂から下山中(300m以上)の局のリスト>
       RECV:<上記以外でビーコン受信中の局のリスト>

 例:On:JL1NIE(01:35) APR: None DESC: None RECV:None

 APRSメッセージ再送の制御
コマンド

  RET=数字 (Retry)

   APRSはメッセージが到着したか確認(Ack)があるまでメッセージの再送を行います。電波状況によってはメッセージが届かなかったり、逆にAckが届かずに再送が多すぎる場合があります。通常再送は3回がセットされています。再送不要の場合は0を、メッセージが届かない場合は最大18まで増やすことができます。

・設定情報の確認
コマンド
  ST (STatus)
  Welcomeメッセージの送信の有無、リトライ回数、最新のWelcomeメッセージの送信状況、最新のスポット情報を送ります。
メッセージ
  JL1NIE: Message=Active: Max.Retry=3: LatestSpot: 07/20 13:51 JA/OY-113:

・SOTAチェイサー向け

アラート/スポットの表示

SOTAwatchLive!の画面下半分のリストに、アラート登録時間の時間順でアラートがリスト表示されます

・サミットコードのボタンをクリックすると該当のサミットに地図が移動します(下図の赤枠部分)

f:id:CentralAttack:20190721004700j:plain

・スポットが入ると該当するアラートの下にスポット情報が表示されます(アラートが登録されていない場合はスポットだけが時間順に表示されます)。

f:id:CentralAttack:20190721005153j:plain

スポットされてから3分以内が赤点滅・30分以内が赤・1時間以内が黄色・2時間以内が青・それ以上は灰色で表示されます。
・SOTAアクティベータのAPRSビーコンが受信されると以下のボタンが表示されます。

f:id:CentralAttack:20190721005657j:plain

ボタンをクリックすると最新のビーコン発信位置に地図が移動します(山頂との距離に基づきで自動的にズームインします。)

地図表示

・アラートに登録されたSOTA山山頂にはチェッカーフラグのマーカが表示されています。クリックすると山名/ポイント/予定されているアクティベーションが表示されます。

・スポットと同時に山頂に点滅するマーカが表示されます。マーカーをクリックすると最新スポット情報が表示されます。

APRSビーコンを受信すると軌跡が表示されます。最新の受信位置にマーカが表示されビーコン受信時間とコールサイン及び目指す山頂までの直線距離が表示されます。

f:id:CentralAttack:20190721010304j:plain 
画面の切替え

画面下のドロップダウンメニューで画面を切り替えることが出来ます。対象を選択後、Applyボタンを押してください。

 For last: 対象時間の絞り込み

 ・4H + Alerts  直近4時間のアラート・スポットと16時間先までのアラート

  1分毎に画面が自動更新されます。(地図上辺にプログレスバーが表示されます)

 ・24 hours 過去24時間分のアラート・スポット

 ・48 hours 過去48時間分のアラート・スポット

  過去24/48時間分については画面が自動更新されないため、適宜Applyボタンで更新してください。

Area: 対象エリアの絞り込み

 WW 世界中

 JA 日本国内のみ(国土地理院地図を使用します)

 AS/OC アジア・オセアニア地域(ThunderforestのOutdoorMapを使用します)

 EU/AF ヨーロッパ・アフリカ地域(同上)

 NA/SAアメリカ・南アメリカ地域(同上)

 

 詳細な動作及び技術情報等

・SLIPPERはAmazon Lightsail上で動作しpythonでコーディングされています。SOTAwatch3からアラートやスポット情報の収集、twitterへの投稿、アラート情報に基づいてAPRS-ISからアクティベーション局のAPRSパケットの収集を行い、解析結果をWebサーバ上に格納します。
・具体的にはSOTAwatch3からJSON形式のアラートを10分間隔で、スポットは1分間隔で収集し、解析後にJA国内サミットのスポットを@SOTAwatchspotJAでツイートします。
・アラートは宣言した時間の16時間前からSOTAwatchLive!に表示されます。5時間前を過ぎるとSLIPPERはAPRSビーコンの収集を始め、6時間後に収集を終了します。
・SLIPPERは収集されたAPRSビーコンの位置情報から、30km四方にSOTA山がないか捜します。あった場合は山頂への距離・方角を計算し、近い順に3座分DB上へ保存します。

・山頂からの距離が300m以内・100m以内になったタイミングでメッセージを出力します。日本国内はJA1CTC局からご提供いただいた詳細なSOTA山岳データベースがあり、参考情報として山頂のJCC/JCG情報もメッセージとして送っています。日本国外はSOTA本家の山岳データを使いDBを作成しています。ちなみにDBは全てSQLiteで実装しています。山頂からの距離を元にステートマシンを作り、登っているのか降りているのか判別しています。尚、アラートで宣言したサミット以外のSOTA山に登頂してもWelcomeメッセージは通知されます(アラート情報はAPRSビーコンを収集するタイミングの指定にのみ使っています)。

・SLIPPERではAPRS-ISから送られてくるアクティベーション局のコマンドに反応しスポット情報等をメッセージとして送る機能も実現しています。Welcomeメッセージの再送時にバグがありメッセージの過剰な再送により一部のユーザの方に大変ご迷惑をおかけしてしまいました。メッセージ送信の要否・再送リトライ回数をユーザ毎に指定できるように機能拡張しました。

・SOTAwatchLive!もSLIPPER同様、Amazon Lightsail上で動いています。実体はクライアント側のJavascriptで、jQueryを利用してコーディングしています。地図描画はGoogle MapのAPIが有料化されたためLeafletを使っています。地図タイルは国内は国土地理院地図を、国外はThunderforestのものを使っています。Thunderforestは月間のアクセス制限があるようなので突然見えなくなるかもしれません(これならGoogleMapでも良かったかも)。

・UIはBootstrapを使い一応レスポンシブなっているつもり?(初めて使ったので使いこなせていません)。Chrome(Windows/Android)、iPad(Safari)、Firefox(Windows)、Edge、IEでの動作確認はしています。

APRSビーコンの軌跡はSSIDで描き分けています。人のマーカーの軌跡はAPRSSSID-5,6,7のビーコン受信位置から、車のマーカの軌跡はSSID-8,9のビーコン受信位置からそれぞれ描いています。

APRSメッセージの再送タイミングについてはAPRSクライアントソフトとして有名なXastirを参考にし、Decay with initial high rateアルゴリズムを実装しています。

参考資料

Why Many APRS clients Fail Miserably.