前回ラズパイと4GモジュールのPPP接続まで説明しました。今回は、実用面での課題を述べます。
① USBラインの瞬断
USBケーブルするタイプの4Gモジュールの場合、コネクタのぐらつきで瞬断する場合があります(もしくは想定されます)。IoT機器内に設置する場合、ケーブルの取り回しでストレスがかかることも。マイクロusbならなおさらです。
いろいろと試したところ、一度接続異常が発生すると、ラズバイがハングする場合があるようです。USB接続がぐらつかないよう物理的に対策をしておくことをおススメします。例としましては、
- USBケーブルをケース等に固定する。
- 取回しスペースが狭い場合、L字のUSBケーブルを使用する。
- 可能な場合、ラズパイのserialポートで、4Gモジュールと接続する。
② USBラインのノイズ
USBはノイズに弱いので、規定以上発生すると、PPPが断線します。ノイズの出やすいIoT機器の場合、どこに設置されるか想定できない機器の場合、配慮が必要です。実際に弊方でも本番装置に搭載後、予期無くPPP断線しました。以下そのsyslogの内容です。
Mar 2 10:33:20 raspi kernel: [ 1435.722327] usb usb1-port1: disabled by hub (EMI?), re-enabling... Mar 2 10:33:20 raspi kernel: [ 1435.722387] usb 1-1: USB disconnect, device number 2
EMI?(電磁障害かも)とラズパイは言いたいようです。この事象が発生すると、OSその他動作は継続するものの、OS再起動しないかぎりPPP接続が復帰しません。対策としては、PPPの接続状況を常時監視し、切断したらOS再起動さるシェルスクリプトを作成し、rcから起動し常駐化せました。以下そのスクリプト例です。
#!//bin/sh PPP_ON=0 while [ 1 ] do # Check PPP gen device ifconfig ppp0 > /dev/null RET_PPP=$? if [ $RET_PPP -eq 0 ];then PPP_ON=1 else # Turn PPP on to off if [ $PPP_ON -eq 1 ];then echo "Catch to turn PPP on to off." : ( いろいろ後始末 ) : shutdown -r now fi fi sleep 30 done
ifconfigコマンドで、PPP切断を判別してみました。リブート中は応答できなくても許容されるシステムに場合に限ります。
なお、本当のノイズか白黒つけるには、放射電雑試験を行うべきてすが、大きな電機メーカさんでも絡んでないと難しいです。
③ 起動時のチェック
動作環境によって、必ずしも起動時に、PPP接続できるとは限りません。可能なかぎり以下チェックをいれます。カッコ内は、チェックのためのコマンド例です。
- 4Gモジュールを認識しているか? ( lsusb | grep Qualcomm )
- WAN接続できているか? ( ifconfig wwan0 > /dev/null )
- PPP接続できているか? ( ifconfig ppp0 > /dev/null )
- ルーティングが正常か? ( route | grep ppp0 )
- ドメインにパケットが届くか? ( ping 対象ドメイン -c 3 )
起動後、すぐにPPP接続はできないので、数秒置きに数分繰り返し、PPP接続できない場合はOSリブートするしかないですね。上位の管理機器があれば、そちらに知らせて処置するが妥当でありましょう。