2015年1月13日火曜日

3GモデムをAsteriskに【つなぐ】

今まで「GP-712」や「GP-710」を使って【つなぐ】(※)を構築してきました。

しかし、これらは非常に高価です。
これらで【つなぐ】を構築すると、トータルで4万円以上かかります。
そこで、もっと安価に【つなぐ】を構築できないかを考えます。


※ 【つなぐ】とは何かは、以下の記事をご覧ください。
ガラケー(話し放題)と、スマホ(MVNO)を【つなぐ】>(概要説明)
MVNO(データSIM)で「話し放題」を実現する 【つなぐ】>(設定紹介)




しかしながら、2万も3万もする「GP-710」や「GP-712」を使った時点で、すでにもう高価です。
そこで、「GP-71x」の代わりに、安価な「Huawei製の3Gモデム」で【つなぐ】を構築してみました。

これならば、導入費を半額以下に抑えられると同時に、別途ガラケーを用意する必要もなくなります。



【必要な機材と設置】

  • IP-PBX(Asterisk)
  • Huawei 3Gモデム(※1)
  • スマホ(普段使い用)


    「IP-PBX」は今までどおり、「Raspberry Pi」を使います。
    そして、今回は「GP-71x」ではなく、代わりに「3Gモデム」を使います。

    設置は簡単です。
    「3Gモデム」のSIMスロットにドコモなどのSIMカードを装着して、「Raspberry Pi」にUSB接続するだけです。(※2、※3)
    なお、「3Gモデム」のSIMスロットは標準サイズが多いので、必要に応じてSIMアダプタを介します。

    ※1 使用可能モデル一覧は<このサイト>を参考にしてください。
    ※2 auは規格が違うため利用できません。
    ※3 一部のY!mobile(タイプ2)およびPHSは利用できません。




    【chan_dongleのインストール ~ Asteriskの設定】

    USBの3GモデムをAsteriskに接続するためには「chan_dongle」を使います。

    導入方法はすべてこのサイトのとおり実行するだけです。
    Wiki Chan_dongle


    ・・・それだけではあまりにも気が利かないので、ここではもっと簡単に、「chan_dongle」を使えるようにします。


    以下は、上記サイトを参考に、我流でインストールした備忘録です。

    OSには「Raspbian」を使いました。
    多分「RasPBX」でも問題ないと思いますが、動作未確認です。
    RasPBXを使う場合は、Asteriskのインストールは不要です。


    ● Asteriskをインストールします。
    apt-get install asterisk

    ● 続いて開発者ツールをインストールします。
    apt-get install asterisk-dev

    ● 3Gモデムを使えるようにするドライバみたいなものをダウンロードします。
    cd /usr/src
    wget https://asterisk-chan-dongle.googlecode.com/files/chan_dongle-1.1.r14.tgz

    ● 解凍します。
    tar -zxvf chan_dongle-1.1.r14.tgz

    ● makeします。
    cd /usr/src/chan_dongle-1.1.r14
    ./configure
    make

    ● インストールします。
    make install

    ● chan_dongleの設定ファイルとダイヤルプランを作成します。
    (extensions.confが上書きされるため、自分専用ダイヤルプランを作成していた人は事前にバックアップします。)
    cd /etc/asterisk/
    wget http://asterisk-chan-dongle.googlecode.com/svn/trunk/etc/dongle.conf
    wget http://asterisk-chan-dongle.googlecode.com/svn/trunk/etc/extensions.conf

    ● Raspbianを再起動します。
    reboot



    【chan_dongleで通話する】

    Raspbianの再起動が完了したら、「3Gモデム」が使えるかを確認します。
    「3Gモデム」に挿したSIMカードの電話番号に、他の電話機から電話します。

    英語のデモが流れたら成功です。
    あとは適切に「dongle.conf」と「extensions.conf」を設定します。
    なお、「3Gモデム」を1つしか使わない場合は、「dongle.conf」を編集する必要はありません。



    【ダイヤルプランの作成】

    「3Gモデム」から発信させるためには、extenの記述が通常と若干異なります。
    以下のように記述することで「3Gモデム」から発信するようになります。

    ; 0をトリガーにした発信例
    exten => _0.,1,Dial(Dongle/dongle0/${EXTEN},60)
    exten => _0.,n,Hangup()

    着信やその他の記述は、通常と変わりませんので、自分の環境にあったダイヤルプランを作成します。



    【音質の検証】

    私の環境では非常に良好な通話品質でした。
    特に遅延を感じることもなく、「普通の電話」です。

    ところが、【つなぐ】同士の会話は、かなりの遅延を感じます。(これはGP-71xを使ったシステムも同様です。)
    そのため、【つなぐ】同士の会話には、外線を使わずに内線通話となるように、ダイヤルプランを作成する必要があります。

    こうすれば、音声回線を経由しない通話が実現でき、その結果、より低遅延・高音質な通話が可能になります。


    今回もいつもどおり、3Gモデム版【つなぐ】の音質と遅延時間を検証します。
    音質については自分がどう聞こえるかより、自分の声が相手にどのように聞こえているかが重要なため、それを掲載します。

    [使用した端末]
  • iPhone4s(ドコモSIM使用)
  • SH-07D(Groundwire使用)

    [回線種別]
  • Wi-Fi(光回線)

    [録音環境]
  • 「FUSION IP-Phone SMART」の留守電(128kbps RIFF-WAVE)

    [遅延測定条件]
  • 「iPhone4sから音声を発信してから、SH-07Dがそれを受信する」までのタイムラグの測定

    [音声の元データ]


    [検証結果]
    回線種別
    (アプリ)
    コーデック 音質 遅延時間
    (つなぐから発信/つなぐで受話)
    Wi-Fi
    (Acrobits Groundwire)
    G.711μ

    257ms / 590ms


    何度か試験をしているうちに気付きました。
    どういうわけか、発信時より受話時の遅延時間が大きいのです。

    これの回避策は、以下『着信時の遅延回避策』に記載します。



    【着信時の遅延回避策】

    3Gモデム版【つなぐ】で受話した際の遅延時間については、もしかすると私の環境依存かもしれません。
    しかし、いずれにしても、この遅延時間では実用できません。

    そこで、これを実用するためには、キャリア転送を併用します。

    キャリアの転送を使うことによって、【つなぐ】による着信を迂回して、別の電話番号に着信させることが出来ます。
    つまり、受話時は【つなぐ】を使わないことで、遅延を回避させるわけです。

    転送先の電話番号には「ブラステル 050 free」を用います。(無料)
    ここであれば、低遅延・高音質での通話が可能です。
    (ブラステルを経由していることを全く意識せずに運用できます。)


    以上より、3Gモデム版【つなぐ】は、転送も「カケホーダイ」対象となるドコモとの相性が抜群です。
    もちろん、着信にはほとんど使用しない前提でしたら、ソフトバンクやY!mobileでも構いません。



    【まとめ】

    GP-71xを使った【つなぐ】と、3Gモデムを使った【つなぐ】、それぞれのメリットとデメリットを以下の表にまとめました。

      安定性 音質 遅延 価格 備考
    GP-71x 高い ・通話最初の1秒ぐらいが聞こえない。
    ・シェアの「有効/無効」切替ができる。
    ・収容する携帯キャリアを問わない。
    3Gモデム 未知 特殊 安い ・つなぐからの発信は遅延なし、受信時は遅延大。
    ・検証期間が浅いため、安定性がわからない。(現在までは良好)
    ・別途携帯を必要としない。(SIMをそのまま使う)
    ・auとPHSは収容できず。
    BTドングル 安い ・Bluetoothで携帯を直接Asteriskへ収容する。
    ・収容する携帯キャリアを問わない。
    ・ペアリングできる端末がかなり限定される。
    (私の手持ちデバイスではHFPで繋がらないため試験できず。)

    GP-71x限定機能の「シェアの切替」とは、GP-71xの設定画面を利用することで、その回線をシェアするか否かが簡単に切り替えられる機能になります。

    「最初はひとりで使いたいけど、後から複数人でシェアするかも知れない。」(またはその逆)などが、Asteriskのダイヤルプランを変えることなく切り替えられます。(要初期設定)

    なお、この表の中に「BTドングル」というのもがありますが、これは「chan_mobile」というAsteriskのアドオンを使って、携帯電話をAsteriskに直接収容する手法になります。

    しかし、私の技術力不足もありますが、あまりにも相性が酷く使用を断念しました。
    また、Asteriskとペアリングするために、Linuxコマンドを駆使するため、現実的ではないとも判断しました。
    Bluetoothを使う場合は素直にGP-71x使うべきです。



    【あとがき】

    chan_dongleは以前から知っていたのですが、私の知識ではハードルが高すぎて、今まで諦めていました。
    しかし、GP-71xを使った【つなぐ】を他の方に販売することになって、ひしひしと感じていたことがありました。

    「高すぎる・・・」と。

    と言うことで、今回はかなりがんばりました。

    分かってしまえばなんてこと無いのですが、Asteriskの開発者ツールを導入しないと「chan_dongle」のmakeに失敗します。
    うまく導入できない人のほとんどが、これが原因ではないかと思います。

    LinuxとAsteriskが扱える人は、本記事のとおりで【つなぐ】を構築できますので、ぜひチャレンジしてみてください。

    なお、<【つなぐ】オーダーフォーム>に「3Gモデム版」も追加しました。
    これにより、かなり安価に【つなぐ】を提供できるようになりました。


    【つなぐ】のオーダーは終了いたしました。
    本当はずっと続けていきたかったのですが、私の時間が無くなってしまったことと、かなりの赤字で販売していたことにより、継続が厳しくなってしまいました。申し訳ありません。