2019年8月18日日曜日

中古ルーターにAsteriskを入れてみる

Buffalo WZR-HP-AG300Hをハードオフで300円でゲットした。
最初は昔買ったfonとかnanopiに入れようかと思ったけど、
複数のVoIPゲートウェイを接続して見たかったからHUBがあるルーターって選択肢として結構ありかも。

OpenWrtインストール

分解してUARTまで接続したけど、実はそんなことしなくても大丈夫だった。
https://openwrt.org/toh/buffalo/wzr-hp-ag300h
  1. 初期化する
  2. 192.168.11.1にアクセスすると管理画面が開く(root/パス無しで)
  3. ファームアップにて[openwrt-18.06.4-ar71xx-generic-wzr-hp-ag300h-squashfs-factory.bin]を書き込む
  4. 192.168.1.1にアクセスすると管理画面が開く
  5. ファームアップにて[openwrt-18.06.4-ar71xx-generic-wzr-hp-ag300h-squashfs-sysupgrade.bin]を書き込む
これで、OpenWrt化完了
@import “中古ルーターにAsteriskを入れてみる\openwrt.png”
その他の設定は良きに計らう

asteriskをインストール

root@OpenWrt:~# opkg install asterisk15 asterisk15-cdr \
asterisk15-chan-sip asterisk15-codec-ulaw asterisk15-res-rtp-asterisk \
asterisk15-format-gsm asterisk15-codec-gsm asterisk15-format-pcm asterisk15-res-agi
GUIからでも良いけど、なんとなく

まずは相互通話

/etc/asterisk/sip.conf
[general]
context=default
port=5060
bindaddr=0.0.0.0
language=ja
;nat=yes
allowguest=no
allow=ulaw
allow=alaw
allow=gsm

[user1]
type=friend
defaultuser=user1
secret=password1
host=dynamic
canreinvite=no

[user2]
type=friend
defaultuser=user2
secret=password2
host=dynamic
canreinvite=no
/etc/asterisk/extensions.conf
[default]
exten => 1,1,Dial(SIP/user1,30,r)
same  => n,Hangup()

exten => 2,1,Dial(SIP/user2,30,r)
same  => n,Hangup()
/etc/init.d/asterisk restart
通話できた!

USBメモリを使えるようにする

何かと使えるようにしておくと便利か
https://openwrt.org/docs/guide-user/storage/usb-drives-quickstart
https://rc30-popo.hatenablog.com/entry/20160103/1451829248
/etc/asterisk/extensions.conf
exten => 5,1,Goto(my-ivr,s,1)

[my-ivr]
exten => s,1,Set(dir=/mnt/sda1/)
exten => s,n,Ringing()
exten => s,n,Wait(3)
exten => s,n,Answer()
exten => s,n,Playback(${dir}music)
みたいな

USBシリアル変換を使えるようにする

これもついでに
https://qiita.com/hnw/items/9b5c99fa73e3716f67d2
今回は確かこれのはず
http://www.aitendo.com/product/13039
opkg install kmod-usb-serial-pl2303
これで/dev/ttyUSB0みたいに認識できた。
やっはりUSBがあるルーターは便利だ。夢が広がる。
(死ぬほどあるFON2405Eの出番がますます無くなる・・・)

PHPインストール

opkg install php7 php7-cli zoneinfo-asia

phpagi

PCでやった時と同じように
phpagi.php - The main phpagi class.
を/usr/share/asterisk/agi-binに保存する。改行コードとかに注意する。
あとはdtmf.phpを少し変更して
#!/usr/bin/php-cli -q
<?php
    /**************************************************
     *  dtmf.php
     **************************************************/

    set_time_limit(30);
    require_once('phpagi.php');
    error_reporting(E_ALL);
    //die("Syntax ok\n"); // line A: uncomment for syntax test

    define('ANS_TONE', '/usr/share/asterisk/sounds/dtmf');
    define('LOG_PATH', '/tmp/dtmf.log');
    define('TIMEOUT', 1000);

    /* log用 */
    $fp = fopen(LOG_PATH, "w");
    fwrite($fp, date("Y/m/d H:i:s")."\t"."Log File.\n");

    /* AGI */
    $agi = new AGI();
    $agi->answer();

  do
  {
    $result = $agi->get_data('/usr/share/asterisk/sounds/beep', 3000, 20);
    $keys = $result['result'];
    fwrite($fp, date("Y/m/d H:i:s")."\tDTMF=".$keys."\n");
  } while($keys != '111');
  $agi->hangup();

?>

も一緒に保存した。
あとは、
/etc/asterisk/extensions.conf
exten => 6,1,agi(dtmf.php)
これで出来た。

0 件のコメント:

コメントを投稿