Origami Devices

たまに変なもの作ります。あと、Raspberry Pi を長期運用したいと思います。

Raspberry Pi と Asterisk + iaxmodem + hylafax と Fusion IP-Phone Smart で作る FAX サーバ(2)

Raspberry Pi と Asterisk + iaxmodem + hylafax と Fusion IP-Phone Smart で作る FAX サーバ(1) - Raspberry Pi を何年か使い続けるブログ

の続きです。

セットアップの確認

前回であらかたのセットアップが終わったので、セットアップが出来ているかをまずは確認しましょう。

まず、 Asterisk のコンソールを起動します。

$ sudo asterisk -vvvr
Asterisk 1.8.13.1~dfsg1-3+deb7u3, Copyright (C) 1999 - 2012 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
  == Parsing '/etc/asterisk/asterisk.conf':   == Found
Running as group 'asterisk'
  == Parsing '/etc/asterisk/extconfig.conf':   == Found
Connected to Asterisk 1.8.13.1~dfsg1-3+deb7u3 currently running on rpi120 (pid = 10820)
Verbosity is at least 4
rpi120*CLI> sip show peers

まず、sip show peers で SIP の状態を確認します。

rpi120*CLI> sip show peers
Name/username              Host                                    Dyn Forcerport ACL Port     Status
fusion-smart/12345678      61.213.230.153                               N             5060     OK (11 ms)
1 sip peers [Monitored: 1 online, 0 offline Unmonitored: 0 online, 0 offline]

「Status OK」になっていれば大丈夫です。

次に、iax2 show peers で、 iaxmodem が見えているかを確認します。

rpi120*CLI> iax2 show peers
Name/Username    Host                 Mask             Port          Status
iaxmodem/iaxmod  127.0.0.1       (D)  255.255.255.255  4570          Unmonitored
1 iax2 peers [0 online, 0 offline, 1 unmonitored]

iaxmodem のモニタが通りませんが(というよりモニタ機能がない?)、このように登録ができていれば大丈夫です。

あとは、Fusion IP-Phone Smart の 050 番号に FAX を送ってみて、動作を確認してください。

動作確認のポイント

モデムの状態

faxgetty は、/var/log/daemon.log にログを出しています。モデムのログがまずここに出ます。

$ sudo cat /var/log/daemon.log | grep FaxGetty
(略)
Dec 25 05:28:16 rpi120 FaxGetty[2378]: MODEM set DTR OFF
Dec 25 05:28:16 rpi120 FaxGetty[2378]: MODEM set baud rate: 0 baud (flow control unchanged)
Dec 25 05:28:16 rpi120 FaxGetty[2378]: DELAY 75 ms
Dec 25 05:28:16 rpi120 FaxGetty[2378]: MODEM set DTR ON
Dec 25 05:28:16 rpi120 FaxGetty[2378]: DELAY 2600 ms
Dec 25 05:28:19 rpi120 FaxGetty[2371]: STATE CHANGE: RUNNING -> LOCKWAIT (timeout 30)
Dec 25 05:28:19 rpi120 FaxGetty[2371]: MODEM input buffering enabled
Dec 25 05:28:19 rpi120 FaxGetty[2378]: MODEM set baud rate: 19200 baud, input flow XON/XOFF, output flow XON/XOFF
Dec 25 05:28:19 rpi120 FaxGetty[2378]: DELAY 10 ms
Dec 25 05:28:19 rpi120 FaxGetty[2378]: MODEM flush i/o
Dec 25 05:28:19 rpi120 FaxGetty[2378]: <-- [4:ATZ\r]
Dec 25 05:28:19 rpi120 FaxGetty[2378]: --> [2:OK]
Dec 25 05:28:19 rpi120 FaxGetty[2378]: DELAY 3000 ms
Dec 25 05:28:22 rpi120 FaxGetty[2378]: MODEM flush i/o
Dec 25 05:28:22 rpi120 FaxGetty[2378]: <-- [10:AT+VCID=1\r]
Dec 25 05:28:22 rpi120 FaxGetty[2378]: --> [9:AT+VCID=1]
Dec 25 05:28:22 rpi120 FaxGetty[2378]: --> [2:OK]

また、送信・受信時の詳細ログが、キューごとのファイルになって /var/spool/hylafax/log に格納されています。

$ sudo cat c000000186
Dec 26 23:10:39.40: [ 2382]: SESSION BEGIN 000000186 8150XXXXXXXX
Dec 26 23:10:39.40: [ 2382]: HylaFAX (tm) Version 6.0.6
Dec 26 23:10:39.40: [ 2382]: CallID: "XXXXXXXXXXX" "XXXXXXXXXX" "<NONE>" "s"
Dec 26 23:10:39.40: [ 2382]: MODEM set XON/XOFF/FLUSH: input ignored, output disabled
Dec 26 23:10:39.40: [ 2382]: <-- [4:ATA\r]
Dec 26 23:10:42.19: [ 2382]: --> [10:NO CARRIER]
Dec 26 23:10:42.19: [ 2382]: ANSWER: Ring detected without successful handshake
Dec 26 23:10:42.19: [ 2382]: Ring detected without successful handshake
Dec 26 23:10:42.19: [ 2382]: SESSION END

このログは、FAX ではない電話からテストコールしたときのものです。

faxstat

faxstat コマンドは、送受信のキューの結果を表示します。 faxstat -d でこれまでに処理したジョブの一覧が出ます。

$ sudo faxstat -d
HylaFAX scheduler on rpi120: Running
Modem ttyIAX (+81.50.XXXX.XXXX): Running and idle

JID   S Number       Pages Dials Date       Time Status
16    F 050XXXXXXXX   0:1   2:2  2014/12/26 16.21.06 No response to PPS repeated
8     D 050XXXXXXXX   1:1   2:2  2014/12/26 11.24.32
15    F 03XXXXXXXX    0:1   2:2  2014/12/26 16.19.48 No carrier detected; too ma
12    D 03XXXXXXXX    1:1   1:2  2014/12/26 12.55.46
20    F 050XXXXXXXX   0:4   2:2  2014/12/26 16.47.17 Failure to train remote mod
10    F 03XXXXXXXX    0:1   2:2  2014/12/26 11.54.15 Failure to receive silence
9     F 03XXXXXXXX    0:1   2:2  2014/12/26 11.24.55 Busy signal detected; too m
14    F 03XXXXXXXX    0:1   2:2  2014/12/26 16.01.47 Failure to train remote mod
18    F 03XXXXXXXX    0:1   2:2  2014/12/26 16.29.45 Failure to train remote mod
13    D 03XXXXXXXX    1:1   2:2  2014/12/26 15.29.03
17    F 03XXXXXXXX    0:1   2:2  2014/12/26 16.25.11 Busy signal detected; too m
11    F 03XXXXXXXX    0:1   2:2  2014/12/26 11.57.10 DIS/DTC received 3 times; D
19    D 050XXXXXXXX   1:1   1:2  2014/12/26 16.37.46
21    F 03XXXXXXXX    0:1   2:2  2014/12/26 16.50.44 Failure to train remote mod

ジョブの番号順には出力されない、というちょっと不思議な仕様がある *1 ため、 faxstat -d | sort -n とかのほうが見やすいかもしれません。

faxstat -s はキューに入ったジョブの一覧が出ます。キューになにもいない場合はモデムの状態だけが出ます。

$ sudo faxstat -s
HylaFAX scheduler on rpi120: Running
Modem ttyIAX (+81.50.XXXX.XXXX): Running and idle

faxstat は、root 以外で実行すると「Bad (null) user name; your password file entry probably has bogus GECOS field information.」と出ることがありますが、これ無視していいんじゃないかと思います。 /etc/passwd の5番目のフィールド見てるって、そこに何か書いてある人っていまほっとんどおらんのと違うか… *2

FAX 送信

$ /usr/bin/sendfax -n -f USERNAME -d 03XXXXXXXX /path/to/faxsendfile.txt

faxadduser でユーザの登録を…という記事をたまに見かけますが、少なくとも aptitude でインストールする sendfax コマンド*3では -f オプションで自分のユーザー名を書いてしまえば送信出来ちゃいました。あと、 -d で送信先の電話番号をハイフン抜きで記述してください。

/path/to/faxsendfile.txt で送信するファイルを指定しますが、テキストファイル、PDFファイルを指定可能です。

オチ

さて、ここまで書いておいてなんですが、Raspberry Pi に FAX サーバをやらせてみると、実に送受信が安定しないことがあります。安定するときもあるししない時もありました。どうも Fusion IP-Phone Smart の音声品質自体がたまに落ちる *4 のか、それとも Raspberry Pi に何かが起きているのか、相手方 FAX のネゴシエーションが 2400bps でも成立しないことも一度二度ではありませんでした。SIPのコーデックを ulaw から gsm に変えて遅延を減らそうとしたら却ってひどくなった(送受信の9割近くがエラーになる)ので、ちょっと打つ手が見つかりません。

ただ、top をガン見したり sar をガン見する限りでは、 CPU やメモリが足りないという感じもなかったので、この「具合の悪さ」の正体がいまいちまだわかっていません。もうちょっとだけ続くのじゃよ…

*1:http://www.hylafax.org/archive/2005-07/msg00121.php によると、ジョブファイルの名前ではなく、inode でソートするという意味不明な仕様になっているんだそうな。

*2:http://www.hylafax.org/archive/2001-05/msg00353.php 参照

*3:hylafaxをインストールすると一緒に入ります

*4:といっても、普通に通話をする分にはあまり気にならない程度の遅延なのですが