D-STAR (Digital Smart Technologies for Amateur Radio) に対応したアマチュア無線機は、自身のアンテナで送受信できる範囲の電波での交信のみならず、このD-STARの仕様に則った、リピータ (中継局) やインターネットを通じての交信も行えるらしい。おもしろそうだし興味深くもあるので、試してみながらのメモを残します。
なお本記事の内容は、アマチュア無線やD-STARを私が「完全に理解した」とは言えない状態でチャレンジしているものなので、誤りを含む可能性が普段の記事よりも格段に高めです。
アイコム ID-52 (ID52)■液晶保護シート+カラーシートプレゼント■
ノーブランド品
D-STARのイメージを、最初に次の2つの資料を読み込んで掴んでみる。
資料2のページ5の図式を解釈すると、通信経路はこの3つの種類となっている。
3つの種類を模式的な図にすると上記の通り。3つ目の「GW (ゲートウェイ) 通信」の場合には、インターネット部分に「D-STAR管理サーバ」が噛んでいるので、事前に管理サーバへの登録作業が必須なんだろうと理解できる。
TO: CQCQCQ
FROM: 現在地から電波が届く範囲内の最寄リピータ
D-STARが使えるようになったら、次に、「dmonitor」というアプリケーションをラズパイで動作させる。これはインターネット経由でD-STARリピータの状況などがモニターできるものらしいが、私が普段よく遊んでいるようなUbuntu上のメジャーなOSSなどとは異なり、ウェブ上では、dmonitorに関する情報が整理されていて豊富、というわけではなさそう。よって、説明書に登場する用語もまだよく分からない私にとって未知数なアプリケーションなのだが、とりあえず動かしたらわかるだろう……の精神で進める。
ちなみに、dmonitorを使うと下記のような、モバイルしながら「どこでもお手軽D-STARモニタリング」を実現できるぞという直感があり、これを具現化してブログに書くぞというのが本記事執筆のモチベーションである (爆)。
項目 | 内容 |
---|---|
持ち物 | スマホ, ノートPC, D-STAR対応ハンディ無線機, ラズパイ, モバイルバッテリー |
移動範囲 | アマチュア無線の電波は届かなくても、スマホの電波は届く場所 (極端な話: 巷のカフェなど) |
次のようにすると実現できるだろう、と想定をしている。
上記のdmonitorの説明書のページ1によると、指定のOSは「Raspberry Pi OS (32-bit) Bookworm」である。我が家にあるラズパイの中から、このOSを動作させることが可能で、かつパワフル過ぎず消費電力が低い「Raspberry Pi 3 Model B」を選び出し (「Raspberry Pi 3 Model B+」あたりでも良いであろう)、次のように準備した。
ELEMENT(エレメント) Raspberry Pi 3 Model B+
Element14
ラズパイへSSHログインした端末画面、もしくはラズパイのデスクトップ環境での端末画面にて、dmonitorのインストールを進める。
$ 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
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
dpkg -L dmonitor
で確認するnmap
コマンドを使う確認方法などがあるがここでは省略)http://ラズパイのLAN環境でのIPアドレス/
(例えば192.168.1.NNN) を開く接続コールサインが日本のコールサインでないか最初に空白がある等、設定が間違っています。
という表示が出ている)項目 | 内容 | 備考 |
---|---|---|
接続リグ | ICOM | 無線機はICOM ID-52なのでICOMで良かろう |
LCD | NONE | ラズパイに外付けLCDを付けていないならNONE (dmonitorの説明書のページ19を参照) |
接続コールサイン | XX0XXX | 自身のコールサインを入力する (入力例の「XX0XX 」は空白を加えて8文字化されている) |
GPS自動送信 | 抑止 |
USB接続の場合は次の通り。
http://ラズパイのLAN環境でのIPアドレス/
を再読み込みする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
を行うsudo /usr/bin/rig_port_check
が案内されているラズパイとID-52とのBluetooth接続は、一応試してみたものの成功しなかった。そもそもdmonitorが、説明書にあるID-705の他にID-52とのBluetooth接続に対応しているのかどうかが分かっていない。
ここまで実現できれば、当初の目標の「どこでもお手軽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を使う場合に、やっておくと有用なことがいくつかあった。
ラズパイの電源をshutdown処理なしにいつでも切れるようにするためには、物理メディアのデータ破壊のきっかけとなる、物理メディアへの書き込みを行わないようにすることが必要だ。これはラズパイのファイルシステムをOverlay File System化 (OverlayFSを有効化) することで可能なので、次の手順で行う。
sudo raspi-config
を実行するOverlayFSを無効化する (物理メディアへの書き込みを行えるようにする) 場合は、同じように「P2 Overlay File System Enable/disable read-only file system」から、有効化の逆を選択する。
ラズパイ起動後のデスクトップ画面に現れる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 # ←この行をコメントアウト
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 | ★必要 |
上記の表で「★必要」となっている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"};