4,723
回編集
差分
編集の要約なし
ここでいうRadioは無線機のことなのです。<br>
注:当初、レピータと表記していましたが、うちらの業界的にはゲートウェイだろうってことでゲートウェイに改めました。
<br>
=ニーズ=
さて、シカケは揃いました。あとはAsteriskに接続して・・・と、やってみたのですが上手くないです。理由がどうにもこうにもわからないので諦めました。<br>
当初の目論見ではAsteriskのConsoleデバイスで繋ごうと思ってたのですが、どうもオーディオがおかしくなりまともに音が出ないことが多くあります。たまに出ても数秒しか持たないなどさんざんでした。おそらくALSA+Pulseaudio+chan_consoleの組み合わせが悪いのか何なのかなのですが、もし解決方法を気付いた人がいたら教えてください。[[chan_console]] のテストをやっていて発見しました。USBオーディオの種類を変えてみても症状が治まらないので諦めました。
=無線レピータを作る無線ゲートウェイを作る=というわけで、Asteriskで直収するのは諦めてSIPを喋る無線レピータをつくりましょう。話は簡単です。SIPのソフトフォンを入れたSBC等を用意して、それにDigiRigで無線機を繋ぎ、ヘッドセット等の代わりが無線機になっていればOKです。というわけで、Asteriskで直収するのは諦めてSIPを喋る無線ゲートウェイをつくりましょう。話は簡単です。SIPのソフトフォンを入れたSBC等を用意して、それにDigiRigで無線機を繋ぎ、ヘッドセット等の代わりが無線機になっていればOKです。<br>
でまあ、今回はとりあえずRaspberry Pi 3B+を使いました。ソフトフォンを動かすだけなら余ってるRaspberry Piとかでいけます。<br>
参考:SIP,RTPのポートについて考慮すればAsteriskと同居させることはできます。なので、サーバ内でpjsuaを動かすのもアリです。<br>
==まとめる==
*オンボードのオーディオデバイスを全て無効化しDigiRigだけ使うようにする
*pjsuaをコンパイルし、/usr/local/bin/pjsua とする
*PTT制御プログラムをコンパイルし /usr/local/bin/pttctl とする
*PTTをネットワークから制御するため netrwを入れ、シェルスクリプトを /usr/local/etc/netptt.sh とする
以上を行い、/etc/rc.local に以下を書いて再起動しても無線レピータとして動くようにします。に以下を書いて再起動しても無線ゲートウェイとして動くようにします。
#!/bin/sh -e
#
exit 0
pjsuaはttyから切り離されたがらないのでscreenでバックグラウンド起動させます(デフォルトで入っていない場合はaptでscreenを入れて)。<br>
性能的にはpi zero系でもかまわないと思うのですが、OTGケーブルが要るのがちょっと面倒かも。
=Asteriskから使う=
[sub-pttctl]
exten => s,1,NoOp
exten => s,n,System(echo ${ARG1} | /usr/bin/netwrite ${RCONTACT} 5091)
exten => s,n,Return
features.confに以下のようにハンドラを登録します。登録するのはapplicationmapになります。
[applicationmap]
exten => 8890,n,Dial(PJSIP/phone10)
exten => 8890,n,Hangup
ただし、これは少し問題があります。PTTをオンにしたままAsterisk側の電話機を切ってしまうとPTTホールド状態で終了してしまい電波を掴んだままになってしまい、pttctlのタイムアウト(170秒)まで送信状態が続いてしまうので、電話を切ったらPTTをオフにしてやらなくてはいけません。次のように修正します。
exten => 8890,1,NoOp
ハングアップハンドラとしてPTTオフを登録します。
==電話機側も無線みたいに入りたい==
channel originate PJSIP/phone10 application ConfBridge radio
これでConfBridge(radio)に電話機側から参加すれば無線区間同様に同時に通話できます。が、しかしPTTの制御ができないので少し工夫します。音声会議の場合、DTMFが音声会議のメニュー制御に取られるのでDYNAMIC_FEATURESの方法が使えないため、ConfBridgeのメニューでPTTを制御します。ただこのとき引数を受け付けないようなので、まずPTT制御用のextenを以下のように書きます。