アマチュア無線初心者として: D-STARとdmonitorをやってみたり改造したり
デジタル無線×インターネット
D-STAR (Digital Smart Technologies for Amateur Radio) に対応したアマチュア無線機は、自身のアンテナで送受信できる範囲の電波での交信のみならず、このD-STARの仕様に則った、リピータ (中継局) やインターネットを通じての交信も行えるらしい。おもしろそうだし興味深くもあるので、試してみながらのメモを残します。
なお本記事の内容は、アマチュア無線やD-STARを私が「完全に理解した」とは言えない状態でチャレンジしているものなので、誤りを含む可能性が普段の記事よりも格段に高めです。
アイコム ID-52 (ID52)■液晶保護シート+カラーシートプレゼント■
ノーブランド品
D-STARを使ってみる
Step-1. 概要の把握
D-STARのイメージを、最初に次の2つの資料を読み込んで掴んでみる。
資料2のページ5の図式を解釈すると、通信経路はこの3つの種類となっている。
- 直接通信: 無線局Aと無線局Bが自身の電波で直接通信する
- 山かけ通信 (ひとつのリピータだけを使う交信): 無線局Aと無線局Bが共通のリピータR0と電波で通信することで、無線局Aと無線局Bが通信する
- GW (ゲートウェイ) 通信: 山かけ通信のリピータがインターネット上で2つに引き伸ばされたイメージ。インターネット経由で接続されているリピータR1とリピータR2があり、リピータR1と無線局Aが電波で通信し、リピータR2と無線局Bが電波で通信することにより、無線局Aと無線局Bがインターネット+電波で通信する
3つの種類を模式的な図にすると上記の通り。3つ目の「GW (ゲートウェイ) 通信」の場合には、インターネット部分に「D-STAR管理サーバ」が噛んでいるので、事前に管理サーバへの登録作業が必須なんだろうと理解できる。
Step-2. D-STAR管理サーバへの登録
- D-STARシステム > D-STAR利用申込み画面 へ進み、自身の無線局のコールサイン、メールアドレス、氏名などを登録する
- 登録完了後に事務局での手続きが終わるとメールが届くという記載があるが、私の場合は数日経ってもメールが届かなかった (具体的には、ある日曜の夜に登録して木曜の夜までには届かなかった)
- しかしながら D-STARシステムログイン にはログインできたので先へ進むとしよう
- D-STAR管理サーバーへの機器情報の登録について を参考に、使用する機器を登録する
- 今回は「ICOM ID-52」の1台を登録した
Step-3. 無線機 (リグ) での設定
- 資料2のページ8を参考に、自局設定で自身の無線局のコールサインを登録する
- 資料2のページ9を参考に、簡単設定機能 (DR) をONにし、TOは初期状態 (CQCQCQ=山かけCQ) のまま、FROMは決定キーを使って選択肢からひとつ選び、次の状態にする
TO: CQCQCQ FROM: 現在地から電波が届く範囲内の最寄リピータ
- 資料2のページ12を参考に、PTTボタンを押して離しての「カーチャンク」をやってみる
- カーチャンクを行った結果、次の3つのことが確認できれば、リピータまで電波が届き、かつ登録したコールサインが認識OKだという確認になると思われる
- PTTボタンを離した後、無線機の画面下部にリピータからの応答として「UR?」という文字が表示されること
- D-STAR Repeater Monitorの最新の行付近に、「My Call」として自身の無線局のコールサインが表示されること
- 管理サーバーへの「テーブル書き換え要求」エラー詳細 に自身の送信に関するエラーが表示されていないこと
dmonitorを動かしてみる
Step-1. dmonitorを使う場面のイメージ作り
D-STARが使えるようになったら、次に、「dmonitor」というアプリケーションをラズパイで動作させる。これはインターネット経由でD-STARリピータの状況などがモニターできるものらしいが、私が普段よく遊んでいるようなUbuntu上のメジャーなOSSなどとは異なり、ウェブ上では、dmonitorに関する情報が整理されていて豊富、というわけではなさそう。よって、説明書に登場する用語もまだよく分からない私にとって未知数なアプリケーションなのだが、とりあえず動かしたらわかるだろう……の精神で進める。
- Index of /doc/dmonitor
- http://app.d-star.info/doc/dmonitor/dmonitor_02.00.pdf: Dmonitor バーションV02.00 (テスト版) の説明書
- 大好き! アマチュア無線/第9回 ラズパイ4Bでdmonitorを楽しみましょう!|2020年11月号 - 月刊FBニュース アマチュア無線の情報を満載
どこでもお手軽D-STARモニタリング
ちなみに、dmonitorを使うと下記のような、モバイルしながら「どこでもお手軽D-STARモニタリング」を実現できるぞという直感があり、これを具現化してブログに書くぞというのが本記事執筆のモチベーションである (爆)。
項目 | 内容 |
---|---|
持ち物 | スマホ, ノートPC, D-STAR対応ハンディ無線機, ラズパイ, モバイルバッテリー |
移動範囲 | アマチュア無線の電波は届かなくても、スマホの電波は届く場所 (極端な話: 巷のカフェなど) |
次のようにすると実現できるだろう、と想定をしている。
- スマホでのWiFiテザリングをONにして, ラズパイとノートPCをインターネットへ接続する
- ラズパイのデスクトップ画面をノートPCで開く (リモートデスクトップ接続を利用)
- ラズパイでdmonitorを起動する
- ラズパイと無線機をBluetooth接続またはUSB接続する
- dmonitorを通じて聞こえる様々な場所の交信状況を、カフェでまったりしながら無線機でモニターする
Step-2. リモートデスクトップ接続可能なラズパイの準備
上記のdmonitorの説明書のページ1によると、指定のOSは「Raspberry Pi OS (32-bit) Bookworm」である。我が家にあるラズパイの中から、このOSを動作させることが可能で、かつパワフル過ぎず消費電力が低い「Raspberry Pi 3 Model B」を選び出し (「Raspberry Pi 3 Model B+」あたりでも良いであろう)、次のように準備した。
- リモートデスクトップ接続を実現するRustDeskを導入し、ラズパイのデスクトップ画面を他のPCから操作できるようにした
- RustDesk導入手順は別記事に書いた: リモートデスクトップソフトウェア「RustDesk」をRaspberry Pi OSへ導入する方法 [2024-06-12]
- Tailscaleも導入し、ラズパイの接続環境を問わず他のPCのブラウザからdmonitor画面を確認したり、SSHログインできるようにした
- Tailscale導入方法に関するウェブ情報は他に多くあるのでここでは省略
ELEMENT(エレメント) Raspberry Pi 3 Model B+
Element14
Step-3. dmonitorのインストール
ラズパイへSSHログインした端末画面、もしくはラズパイのデスクトップ環境での端末画面にて、dmonitorのインストールを進める。
- dmonitorの説明書のページ3を参考に、次のコマンドを実行する
$ curl http://app.d-star.info/debian/bookworm/dmonitor_setup | bash
- 確認事項に答える
======================================================== 本プログラムはD-STAR委員会の著作物です D-STAR委員会の承諾なしで再配布しないでください また、Raspberry Piとの抱き合わせ等の販売をしないで下さい ======================================================== 上記条件に同意します y/N:Y V02.00の解説書を読まれ、動作環境を確認されましたか y/N:y
- 約100個のパッケージがインストールされる
- インストール中の画面を見ていると、dmonitorはどうやら一部にPerlを使用しているアプリケーションであろうと推察できる (個人的にはとても懐かしい)
- インストールされたdmonitorのパッケージ情報を、
apt show dmonitor
で確認する$ apt show dmonitor Package: dmonitor Version: 02.00 Priority: optional Section: hamradio Maintainer: Satoshi Yasuda <7m3tjz@jarl.com> Installed-Size: 352 kB Depends: libc6 (>= 2.34), libssl3 (>= 3.0.0), libusb-0.1-4 (>= 2:0.1.12), perl:any, libcgi-application-perl, nkf, lighttpd, surf, wiringpi, bluetooth, pi-bluetooth, bluez, blueman, expect, rsyslog Homepage: http://app.d-star.info/ Download-Size: 85.2 kB APT-Manual-Installed: yes APT-Sources: http://app.d-star.info/debian/bookworm Packages Description: D-STAR repeater monitor D-STAR Rpeater monitor program access point multi_forward program
- インストールされたdmonitorのファイルを
dpkg -L dmonitor
で確認する- ファイルの種類は、大まかに言うと、サービスファイル, 実行ファイル, ローカルウェブサーバ用のファイル などだなと分かる
Step-4. dmonitorの起動
- 必須ではないが安心のため、ラズパイの80/tcpがopenでウェブサービスが稼働していることを確認する (
nmap
コマンドを使う確認方法などがあるがここでは省略) - 他のPCのウェブブラウザにて、
http://ラズパイのLAN環境でのIPアドレス/
(例えば192.168.1.NNN) を開く - dmonitorの初回起動画面が確認できる (この段階ではまだ未設定なので
接続コールサインが日本のコールサインでないか最初に空白がある等、設定が間違っています。
という表示が出ている) - dmonitorの説明書のページ3を参考に、接続コールサインを設定する
- 画面上部の [システム ツール] (下線は見えないがクリック可能) をクリックし、次に [dmonitor設定] をクリックする
- dmonitorの説明書のページ5を参考に、次の内容を入力して [登録] ボタンを押す
項目 内容 備考 接続リグ ICOM
無線機はICOM ID-52なのでICOMで良かろう LCD NONE
ラズパイに外付けLCDを付けていないならNONE (dmonitorの説明書のページ19を参照) 接続コールサイン XX0XXX
自身のコールサインを入力する (入力例の「XX0XX 」は空白を加えて8文字化されている) GPS自動送信 抑止
- ラズパイの再起動が行われ、再起動後のdmonitorの画面は、左側の黄色エリアに「レピータ 一覧」も表示された次のような状態になる
dmonitorに無線機を接続してモニターする
Step-1. 無線機と接続する
USB接続の場合は次の通り。
- ラズパイと無線機ID-52とをデータ通信対応のUSBケーブルで接続し、無線機の画面の左上に「USB COM」と表示されることを確認する (表示されない場合、USBケーブルを他のデータ通信対応のものに取り替えたりしてみる)
- 無線機を MENU > DVゲートウェイ > ターミナルモードにする
- ブラウザで表示しているdmonitor画面
http://ラズパイのLAN環境でのIPアドレス/
を再読み込みする - 無線機が反応して「ぴっ」などと音が出ればOK
/dev/ttyAMA0について
dmonitor画面の左下領域に「/dev/ttyAMA0が見つかりません」というようなエラーが表示された場合、エラー解消には次の手段が有効かもしれない (しかし自分が行った解決方法をメモし忘れたので不正確かもしれない)。
- ラズパイにログインし、
/dev/dstar
のシンボリックリンク先が/dev/ttyAMA0
になっていることを確認する$ ls -al /dev/dstar lrwxrwxrwx 1 root root 7 Jun 30 02:01 /dev/dstar -> ttyACM0
- なっていない場合は、
sudo rm /dev/dstar ; sudo ln -s /dev/ttyAMA0 /dev/dstar
を行う - dmonitorの説明書のページ25では、あらかじめ準備されているスクリプトの実行
sudo /usr/bin/rig_port_check
が案内されている
- なっていない場合は、
Bluetooth接続は私の場合はNG
ラズパイとID-52とのBluetooth接続は、一応試してみたものの成功しなかった。そもそもdmonitorが、説明書にあるID-705の他にID-52とのBluetooth接続に対応しているのかどうかが分かっていない。
- 参考にしたのは、ID-705に関するdmonitorの説明書のページ11
Step-2. 任意のリピータに接続する
- 次の2箇所のどちらかの上に表示されている、任意のリピータのコールサインのリンクをクリックする (ここでは一例としてリピータ「京都伏見430」をクリック)
- 背景黄色の「リピータ 一覧」の表
- 「使用中リピータ一覧」をクリックして開く別ウィンドウの表
- リピータに接続が行われたら、画面左下の白背景部分に「Connected to ‘JP3YJE A’ ‘京都伏見430’」が表示される
- さらに無線機の画面には「MSG: LINK TO JP3YJE A」と表示され、当該リピータが使用中の時にはそこでの交信音声が聞こえる
ここまで実現できれば、当初の目標の「どこでもお手軽D-STARモニタリング」は叶えられたと言えよう。
まとめ・感想
D-STARを始めるまでは、ハンディ無線機で受信できる限られた範囲のいわば近所の交信状況しかモニターできなかった。しかしD-STAR+dmonitorでは、交信が活発な時間帯 (早朝が意外に激しいんだな) だと一般のいくつかのラジオ局から選ぶような感覚で、全国で使用中のリピータを選択でき、そこで交信が行われているか耳を傾けることができる。しかも音声はノイズ無く明瞭に聴こえるので、遠方との距離感が意識から遠ざかる。とにかく日本中のアマチュア無線ユーザの声がモニターできるので、まず聞いているだけでおもしろい。
ちなみに、ラズパイに「4G/LTE対応モデム」を挿してインターネット接続を4G/LTE通信で行うようにして、携帯電話の電波が届く範囲ならどこででもD-STARのGW (ゲートウェイ) 通信ができる、モバイルバッテリーで駆動可能なdmonitorのポータブルシステムも作ってみた。dmonitor画面はノートパソコンのブラウザを使って操作する想定だ (参考: リモートデスクトップソフトウェア「RustDesk」をRaspberry Pi OSへ導入する方法 [2024-06-12])。このシステムはたとえば、平時は車に載せておいたりするとおもしろいかもしれない。
ピクセラ LTE対応 SIMフリー USBドングル ホワイト PIX-MT110-AZ
ピクセラ
参考情報: dmonitor使用に際してやっておくと有用なこと
私の環境および使い方でdmonitorを使う場合に、やっておくと有用なことがいくつかあった。
参考-A) ラズパイの電源をいつでも切れるようにする
ラズパイの電源をshutdown処理なしにいつでも切れるようにするためには、物理メディアのデータ破壊のきっかけとなる、物理メディアへの書き込みを行わないようにすることが必要だ。これはラズパイのファイルシステムをOverlay File System化 (OverlayFSを有効化) することで可能なので、次の手順で行う。
- ラズパイで
sudo raspi-config
を実行する - 「4 Performance Options」を選択する
- 「P2 Overlay File System Enable/disable read-only file system」を選択する
- 「Would you like the overlay file system to be enabled?」で「Yes」を選択する
- 「Would you like the boot partition to be write-protected?」で「Yes」を選択し、表示に従ってラズパイをrebootする
OverlayFSを無効化する (物理メディアへの書き込みを行えるようにする) 場合は、同じように「P2 Overlay File System Enable/disable read-only file system」から、有効化の逆を選択する。
参考-B) dmonitor_startの自動起動を止めるには
ラズパイ起動後のデスクトップ画面に現れるdmonitor_startは、dmonitorのサーバプログラム本体ではなくクライアントの一種のようで、これを動かしていなくてもdmonitorは別PCのブラウザから利用可能である。dmonitor_startの自動起動を止めるためには、ファイル/etc/xdg/lxsession/LXDE-pi/autostart
の最後の行「@lxterminal -e /usr/local/bin/dmonitor_start
」をコメントアウトすればよい。
$ cat /etc/xdg/lxsession/LXDE-pi/autostart
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash
@lxterminal -e /usr/local/bin/dmonitor_start # ←この行をコメントアウト
参考-C) URL中のホスト名 (IPアドレス) を正しくする
dmonitorのCGIプログラムの中では、ウェブサーバ自身のホスト名として、「hostname -I
」の実行結果の1番目に現れるIPアドレスを採用している。しかしウェブサーバは一般的にこのIPアドレスのみでサービスしているとは限らない (たとえばラズパイにTailscaleを導入してTailscale経由でdmonitorを扱う場合は、「hostname -I
」での2番目のIPアドレスがTailscale上のIPアドレスで、これがURL中のホスト名になるべきである)。そこで、どのIPアドレスでサービスした場合でも対応できる、CGIプログラムとして正しい作法である環境変数SERVER_ADDR
からホストのIPアドレスを取り出すロジックへ、dmonitor全体を改造する。
改造対象のファイル
$ cd /var/www/cgi-bin/
$ grep -l -R 'hostname -I 2>&1 |' * | sort # 下記の21ファイルがヒットする
上記grepでヒットする21ファイルのうち実際に改造が必要なファイルは、$result
(後述) をURLの一部として用いている、下記の表で「★必要」としている15ファイルである。
/var/www/cgi-bin/以下のファイル | 改造の必要性 |
---|---|
CI-VStore | 不要 |
DmonitorStore | ★必要 |
DvapStore | ★必要 |
DvmegaStore | ★必要 |
FileExpand | ★必要 |
NodeStore | ★必要 |
debug_dmonitor_log | 不要 |
debug_messages | 不要 |
debug_rpt_conn_log | 不要 |
debug_syslog | 不要 |
dmonitor_reboot0 | ★必要 |
dmonitor_upd | 不要 |
menu | ★必要 |
redirect | ★必要 |
repActive | ★必要 |
repDmon | ★必要 |
repMon | ★必要 |
repScan | ★必要 |
repUpd | ★必要 |
simple_redirect | ★必要 |
update_log | ★必要 |
Perlスクリプトの改造内容
上記の表で「★必要」となっている15ファイルについて、$result
を導出している既存部分 (8行) をコメントアウトし、$result = $ENV{"SERVER_ADDR"};
の1行を追加する。
改造前の当該ブロック
open my $rs , "hostname -I 2>&1 |";
my @ip = <$rs>;
close $rs;
my $result = join '' , @ip;
my $num = index ($result, ' ');
$result = substr($result, 0, $num);
$result =~ s/\s+//g;
$result =~ s/[[:cntrl:]]//g;
改造後の当該ブロック
#open my $rs , "hostname -I 2>&1 |";
#my @ip = <$rs>;
#close $rs;
#my $result = join '' , @ip;
#my $num = index ($result, ' ');
#$result = substr($result, 0, $num);
#$result =~ s/\s+//g;
#$result =~ s/[[:cntrl:]]//g;
$result = $ENV{"SERVER_ADDR"};