ブログ

Armadillo-IoT(G2): 3G通信切断時の再接続シェルスクリプト

at_ito
2016年5月8日 15時32分

現状(2016/5/9時点)のArmadillo-IoT(G2)の3Gモジュール(HL8548)ファームウェアにはバグがあり、umts0のifup/ifdownを繰り返すと269回目で切断状態から復帰できなくなる現象が確認されています。

そのため、3G回線が切断された場合に自動的に再接続するスクリプトを作成しましたので、ご参考にしてください。

3G回線再接続用のシェルスクリプトは以下の通りです。

#!/bin/sh

usage() {
    echo >&2 "usage: $0 [-c ping_count] [-i reconnection_interval(second)] ping_destination"
    exit 1
}

reset() {
    logger -s -t 3g-checker 'reset'

    echo 1 > /sys/class/gpio/RESET_N_3G/value
    while [ -e /dev/ttyATCMD ]
    do
        sleep 1
    done

    usleep 40000
    echo 0 > /sys/class/gpio/RESET_N_3G/value
    while [ ! -e /dev/ttyATCMD ]
    do
        sleep 1
    done

    sleep 30
}

ping_count=5
recon_int=600
while getopts c:i: OPT
do
    case $OPT in
    'c')
        ping_count=$OPTARG
        shift 2
        ;;
    'i')
        recon_int=$OPTARG
        shift 2
        ;;
    esac
done

[ $# -eq 1 ] || usage
ping_dest=$1

while :
do
    if ! 3g-phone-num > /dev/null 2>&1
    then
        logger -s -t 3g-checker 'SIM card not detected'
        sleep ${recon_int}
        continue
    fi

    ping -c ${ping_count} ${ping_dest}

    if [ $? -ne 0 ]
    then
        logger -s -t 3g-checker 'disconnected'
        reset
        ifdown umts0
        # 3g-set-ap [apn] [user] [password] [auth_type] [pdp_type]
        ifup umts0
    else
        logger -s -t 3g-checker 'connected'
        sleep ${recon_int}
    fi
done

上記スクリプトをArmadillo-IoT(G2)上で起動させてください。