JR6PUE HOME PAGE

Svxlink19.09.1にバージョンアップとラウンドQSO的使い方


 Svxlinkバージョンが17.12.2(01Mar2018) から19.09.1(01Sep2019)にバージョンアップされています。
 半年くらい前に確認はしていたのですが、インストールは結構面倒なのでそのままにしていました。
 先日、1エリアの局長さんから防災対応にスマホアプリのエコーリンクを使いハムクラブの会員と情報共有を行いたいという
相談を受けました。私ができることなら協力しようと思いましたが、インストールを2年前にしたっきりなのでだいぶ忘れて
います。まずは、思い出すために最新バージョンをインストールすることにしました。
 ディジタル無線機が無くても、スマホアプリやPCからSvxlinlkに接続して使用する事でVOIP無線が楽しめるエコーリンク。
 まだまだ、捨てたものではありませんね。(2020.07.25)

 私がSvxlinkを動かしているラズパイはPi1 Model B(Raspberry Pi Model B Rev 2)という初期タイプです。
 これでも十分に動いています。前回、17.12.2にバージョンアップするときには、当時のStretchでは動作が不安定だった
のでJessieで動かしていたのですが、デスクトップ環境も入れていたので重かったのだろうと思っています。
 今回は、Buster LiteにすればPi1でも動くだろうと思い、Buster Liteにインストールすることにしました。
  ただ、Pi1 Model Bでのコンパイルはあまりにも時間がかかるので、Pi3 B+でインストールして最終的にPi1 Model Bで
動かすという手順です。

使ったOSは、現在の最新版をインストール

Raspberry Pi OS (32-bit) Lite
Minimal image based on Debian Buster
Version:May 2020
Release date:2020-05-27
Kernel version:4.19
Size:432 MB

1.初期設定を行う

(1)最新ソフトにアップデートしておきます
sudo apt update
sudo apt upgrade

(2)ラズパイをSvxlinkを動かす環境にしておきます
 Svxlinkは、CUIのバックグランドで動かすので日本語環境も入れません。極力、軽い環境にしました。

sudo raspi-config



     2 NetWork Options
       Boot Options B2 Wait for Network at Boot Choose whether to wait for network connection Yes

       ネットワーク環境が確立してからSvxlinkが起動するようにします。過去、エラーが出て悩みました

     4 Localisation Options Set up language and regional settings to match your
       @I2 Change Time Zone       Set up time zone to match your location
         TimezoneでTimezoneをAsiaのTokyoに設定。

      AI3 Change Keyboard Layout Set the keyboard layout to match your keyboard
         Generic 105-key PC (intl.)->Other->Japanese->Japanese->The default for the keyboard layout->
         No compose key->Yes->
    (但し、日本語設定しても文字化けして表示されないため言語はEnglishのままとする。)

      5 Interfacing Options  Configure connections to peripherals ( SSHサーバーをEnableとする)
        P2 SSH         Enable/Disable remote command line access to your Pi using

     以降は、SSHで作業できるようにしておきます。

  7 Advanced Options Configure advanced settings
    (A3 memory SplitでGPUに割り当てるメモリを16MBとする。(デフォルトは64MB))

          A3 Memory Split Change the amount of memory made available to the GPU
          How much memory (MB) should the GPU have?  e.g. 16/32/64/128/25616MB
       (x-windowを使わないのでGPUメモリーは最低にしています。qtelを使う場合は、そのままで良いです。)
 
  8 Update Update this tool to the latest version
          Updateでupdateする

2.ラズパイのIPアドレスを固定

sudo nano /etc/dhcpcd.conf

# Example static IP configuration:
interface eth0
static ip_address=192.168.1.222/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.1.1
static domain_name_servers=192.168.1.1 8.8.8.8

Pi1は、Wifiは着いていないので有線LANで固定しました。

あとは、このIPアドレスに使用しているルーターからポート転送を行います。

UDP 5198,5199
TCP 5200

3.必要なコンパイル用ソフトをインストール

sudo apt-get install g++ build-essential git sigc++ gcc make cmake \
tk-dev tk8.5-dev libsigc++-2.0-dev libsigc++-1.2-dev libgsm1-dev \
libpopt-dev libopus-dev tcl-dev tcl8.5-dev libgcrypt20-dev libspeex-dev \
libasound2-dev librtlsdr-dev rtl-sdr libssl-dev alsa-utils groff curl \
libcurl4-openssl-dev libjsoncpp-dev vorbis-tools

sudo apt-get install libqt4-dev

Qtelは使いませんが、コンパイルでエラーが出ないように入れておきます。
もし、Qtelを使いたかったらX-windowのインストールも必要になります。
svxlinkとQtelは同時には利用できません。詳細は、ここをご覧ください。

4.ユーザーを追加
 GPIOで動作する無線機インターフェースは私は利用しませんが、とりあえず動作に必要な全てのユーザを
追加しておきます。

sudo adduser svxlink
sudo adduser svxlink gpio
sudo adduser svxlink audio
sudo adduser svxlink dialout
sudo adduser svxlink plugdev
sudo adduser svxlink daemon

5.Svxlinkをインストール
 Svxlinkのインストールにあたっては、利用する音声USBデバイスと無線機制御用インターフェースを
USB Portに接続しておきます。

cd
sudo wget https://github.com/sm0svx/svxlink/archive/19.09.1.tar.gz
sudo tar xvfz 19.09.1.tar.gz
cd svxlink-19.09.1
cd src
sudo mkdir build && cd build
sudo cmake -DUSE_QT=OFF ..
sudo make
sudo make doc
sudo make install
sudo ldconfig

6.アナウンス用言語ファイルをインストール
(1)音声ファイルをインストール
cd
sudo wget https://github.com/sm0svx/svxlink-sounds-en_US-heather/releases/download/19.09/svxlink-sounds-en_US-heather-16k-19.09.tar.bz2

sudo tar jvfx svxlink-sounds-en_US-heather-16k-19.09.tar.bz2
sudo mkdir -p /usr/local/share/svxlink/sounds/en_US
cd en_US-heather-16k
sudo cp -r * /usr/local/share/svxlink/sounds/en_US

 今回、エコーリンクでサーバーに接続されたときにクラブ局のサーバと言うアナウンスを流したいというリクエストも
ありました。YL局のメッセージWAVファイルをいただいたのですが、さて、どうすればいいのか悩みました。
 対応方法は、カット&トライしかありませんでした。

(2)コネクトメッセージ変更
/usr/local/share/svxlink/sounds/en_US/EchoLink/greeting.wavがコネクト時のメッセージファイルです。
この対象ファイルを探すのにだいぶ苦労しました。(^^;

いただいた音声メッセージを同じファイル名にして入れ替えただけでは、使えませんでした。
色々調べてみると使用されているファイルは、オーディオビットレートが256kbpsです。
いただいた音声メッセージをこれと合わせるのに、えこでこツールと言うプログラムを使いました。



16,000Hz    16bit 1chにして、ビットレートを256kbpsにできました。

7.USBサウンドデバイスの接続先を確認

aplay -l

下記のような画面がでました。

**** List of PLAYBACK Hardware Devices ****
card 0: b1 [bcm2835 HDMI 1], device 0: bcm2835 HDMI 1 [bcm2835 HDMI 1]
 Subdevices: 4/4
 Subdevice #0: subdevice #0
 Subdevice #1: subdevice #1
 Subdevice #2: subdevice #2
 Subdevice #3: subdevice #3
card 1: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones]
 Subdevices: 4/4
 Subdevice #0: subdevice #0
 Subdevice #1: subdevice #1
 Subdevice #2: subdevice #2
 Subdevice #3: subdevice #3
card 2: U0x41e0x30d3 [USB Device 0x41e:0x30d3], device 0: USB Audio [USB Audio]
 Subdevices: 1/1
 Subdevice #0: subdevice #0

USBブラスターがcard2になっています。

だいたい、Card 1に接続されることが多いのですが、最近は、こういう事象が増えてきました。
HDMIでモニターに接続している状況では、音声をHDMIで送ることができます。
のちにモニター接続を外すとUSBデバイスはcard1になるようです。
USBサウンドデバイスを使うときは、必ず確認しておいた方がトラブルの早期解決解消につながります。
私もモニターを外して再起動したらSvxlinkが起動しなくなったので確認したらcard1になっていました。


この現象の原因がわかりました。私が、ラズパイに使用するるモニターはスピーカー内蔵タイプです。
つまり、HDMI経由でモニター内蔵スピーカーから音が出せるのでHDMIでモニターを接続しているときには、
card 1: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones]
こうなるんですね。悩みが解決しました。

8.Svxlink設定

cd /usr/local/etc/svxlink
sudo nano svxlink.conf

  (1)svxlink.confの修正ポイント

    @SimplexLogic
      ・MODULESをModuleEchoLinkのみとする
      ・CALLSIGNを修正する JR6PUE
      ・SHORT_IDENT_INTERVAL=30 30分に一回コールサインをアナウンス。
                          何故か、6エリアの数字は読み上げてくれない。(; _ ;)
      ・LONG_IDENT_INTERVAL=60   60分に一回システム状況をアナウンス。
      ・RGR_SOUND_DELAY=-1  (スタンバイピーを止める)
      ・REPORT_CTCSS=77.0 (お好みのトーン周波数を設定)

    詳細は、ここを確認下さい。
    
    ARx1
      ・AUDIO_DEV=alsa:plughw:1
       (デフォルトでは0の内蔵サウンドとなっているが、内蔵サウンドではキャプチャーが
        出来ないため、USB-SOUNDのCard_Noにすること)

       aplay -lで必ずUSBデバイスのCard番号を確認してください。
       スピーカー内蔵タイプのモニターを接続すると 2 となる場合もあります。

      ・SQL_DET=SERIAL
       (デフォルトではVOXになっている)
       
                       私は、ワンチップデザイン様のHAMSTIR STを利用していますのでSERIALで動作します。
       次のような汎用インターフェース回路を利用する場合は、オリジナル設定のVOXで動作します。
       今回問い合わせのあった1エリアの局長さんがお使いのインターフェースが汎用回路でしたので
       動作させるまでに時間がかかりました。(^^;
       
      ・CTCSS_FQ=77.0 (お好みのトーン周波数を設定 ただし、Rx Txとも同じ)
           ・SERIAL_PORT=/dev/ttyUSB0
       (デフォルトでは/dev/ttyS0となっているが、Raspberry PIにはSerial Portがないので、
        USB-Serialを使うため、このように変更すること)
           ・ SQL_DELAY=30 (スケルチ動作に少し時間差を持たせます 20ms〜100msの間で設定)
       ・SQL_HANGTIME=100  (スケルチが動作後無線機の送信が止まる時間
        デフォルトは2000なので短くしておきます)
     
    BTx1
      ・AUDIO_DEV=alsa:plughw:1

        デフォルトでは0の内蔵サウンドとなっているが、内蔵サウンドではキャプチャーが
        出来ないため、USB-SOUNDのCard_Noにすること)

       aplay -lで必ずUSBデバイスのCard番号を確認してください。
       スピーカー内蔵タイプのモニターを接続すると 2 となる場合もあります。

       aplay -lで必ずUSBデバイスのCard番号を確認してください。2となる場合もあります。

      ・PTT_PORT=/dev/ttyUSB0
       (デフォルトでは/dev/ttyS0となっているが、Raspberry PIにはSerial Portがないので、
        USB-Serialを使うため、このように変更すること)
         ・PTT_PIN=DTRRTS  #がはずれているか確認
          ・PTT_TYPE=NONEを
            PTT_TYPE=SerialPinへ変更

 (2)ModuleEchoLink.confの修正ポイント

cd /usr/local/etc/svxlink/svxlink.d
sudo nano ModuleEchoLink.conf

    ・TIMEOUT=60を、先頭に#を付けてコメントアウト
    ・SERVERS=asia.echolink.orgに変更
    ・CALLSIGN  JR6PUE-L
       ・ PASSWORD  *Echolinkに登録したときのパスワード
       ・ SYSOPNAME
       ・ LOCATIONを適宜変更

        LOCATION=In Conference *KYUSYU*
        自動接続するカンファレンス名を下記のように記載するとLive EchoLink Conference Statusに接続している局に
      カウントされます。
   必要がなければ自由に記載してください。JR6PUUE-Lが表示されるときの表示に利用されています。

    ・MAX_QSOS
    ・MAX_CONNECTIONS
         
           今回問い合わせのあった局長さんの要望は、自分のSvxlinkサーバーへスマホやPCアプリケーションから
     会員局が接続し、ラウンドQSOをしたいということでしたのでここの設定を増やしておきました。
     初期設定は、MAX_QSO 10,MAX_CONNECTIONS 11でした。最大どこまで増やせるのかわかりませんが
     上限はいくらとは書かれていませんでした。(^^;
     ただ、無線機は1台ですので無線機から参加できる局は1局のみですし参加局が増えれば増えるほど
     連続送信になります。無線機の冷却と出力には気を付けないといけないと思います。
     
     (マルチコネクト禁止)にしたい場合は、どちらも1にしておきます

    ・LINK_IDLE_TIMEOUTの先頭に#を付けてコメントアウト
    ・AUTOCON_ECHOLINK_ID=??????とする(??????は自動接続したいNODEのNODE No)
    ・AUTOCON_TIME=300(自動接続チェックのインターバルを秒で入力)

  詳細は、ここをご覧ください。

9.Svxlink自動起動設定
/home/piの中に、svxというファイル名でシェルスクリプト(下記内容)を作成

sudo nano svx

#!/bin/sh
#Start/stop/restart svxlink server.

#Start svxlink server:
svxlink_start() {
echo "Starting svxlink server"
svxlink --logfile=log --daemon
}

#Stop svxlink server:
svxlink_stop() {
echo "Stopping svxlink server"
killall svxlink
}

#Restart svxlink server:
svxlink_restart() {
svxlink_stop
sleep 3
svxlink_start
}

case "$1" in
'start')
svxlink_start
;;
'stop')
svxlink_stop
;;
'restart')
svxlink_restart
;;
*)
echo "usage $0 start|stop|restart"
esac
#

保存

   svxに実行権を付ける。
   $sudo chmod a+x svx

10. Svxlinkの動作確認
 コンソールから"svxlink"と入力して動作確認
単体の動作確認で問題がなければ、9で作成したシェルスクリプトの動作確認を行う。

  $sudo sh ./svx startでsvxlinkが起動し、logファイルにログが作成される
   $sudo sh ./svx stopでsvxlinkを停止
   $sudo sh ./svx restartでsvxlinkを再起動

11.svxsというファイル名でシェルスクリプトを作成
/home/piに作成

cd ~
sudo nano svxs

   #!/bin/sh
   cd /home/pi
   svxlink --logfile=log --daemon

保存

   svxsに実行権をつける
  $sudo chmod a+x svxs

12.Svslinki自動起動設定
  /etc/rc.localの中に、下記の行を追加する。
  (qtelを使う場合は設定しない)

   #Starting svxlink-server
   su - pi password -c 'sh /home/pi/svxs'         (passwordは4のAで設定したものです)
    
   これをexit0の上に追加する。

13.起動時にlogが開けないと言うエラー対策
/home/pi/logが
-rw-r--r-- 1 root   root      1117 Sep 18 18:12 logとなっています。

piで書き込みができるようにします。

$sudo chgrp pi log
$sudo chown pi log
-rw-r--r-- 1 pi   pi      1117 Sep 18 18:12  log

sudo reboot

エラーが出ていないことをlogで確認します。
logが肥大かしたときは、削除するかcrontabで定期的に消すようにしても良いと思います。
そんなに肥大化はしませんが気になる方は、1か月に1回程度自動で削除の設定を。

crontab -e

0 0 28 * * rm /home/pi/log

14.USBサウンドデバイス調整

 alsamixerコマンドで調整します。
 ここを参考にしてください。

15.無線機からDTMFで操作
 最近のハンディ機でDTMFが出せる無線機はほとんどありません。
 iOSがバージョンアップするまではこのアプリを使っていたのですがiOsがバージョンアップしてからは
使えなくなりました。
 と言うことで探したらApple storeに無料で使えるDialerと言うソフトを使うとDTMF信号が出せます。


 コマンドの番号を登録することもできますが、動作が早すぎてサーバー側が理解できないことがあるので手動で送信します。
 ゆっくり押しながら音を出した方が良いですね。

andoroidには、DTMF Toneと言うのがあります。


 無線機は、設定どおりトーン信号(私の場合77Hz)を入れてPTTを押した状態で
スマホでDTMF信号を送信します。
 コマンドの種類は、ここにありますので参考にしてください。

例 エコーサーバー 9999へ接続する

@無線機のPTT ONしてスマホのスピーカにマイクを近づけます。
Aスマホアプリを操作してDTMF信号を出します。
 (最初の2#は、サーバーにコマンドを送りますという命令のようです。その他のコマンドを送るときも、最初に2#が
  必要です。)
2#
9999#
B無線機PTT OFF
Cうまく受信されていればエコーサーバーから男性の声で返事があります。
D接続が確認できれば無線機から自分の声を送信して受信すれば、自分の音声が返ってきます。
E切断
 無線機 PTT ON
 スマホアプリで #
 無線機 PTT OFF

変調の具合が悪いときは、alsamixerで設定します。

今回、久しぶりにSvxlinkを触りました。
また、カンファレンスサーバーを動かさないでもスマホアプリやPCから接続することで
自局内のSvxlinkサーバーでラウンドQSOができることを再認識しました。

ディジタル無線機でのVOIPが盛んですが、旧式のFM無線機だけでVOIPができるエコーリンク。
まだまだ捨てたものではないとあらためて思ったところです。(2020.07.25)