Armadilloフォーラム

LTE再接続について

nori.f

2022年12月20日 9時59分

お世話になります。
Armadillo 640にてSoracom Airを接続してLTE通信で運用している機器があります。
これが数日に1回程度ですが、ネットワーク通信ができない状況になってしまう現象が発生します。
そして通信できなくなると、そのままサービスが復旧せず機器を再起動しないと回復しない状態になります。
以下の記事にあるようなLTE再接続サービスは640で利用できないでしょうか?
https://armadillo.atmark-techno.com/forum/armadillo/13692

念の為、詳細を記載しますと
・機器は数10個単位で日本各地に納入しているが、本現象はそのうちの1つのみ発生
・現象が発生したあと、ドコモのSIMをソフトバンクに変更しましたが、現象は再現します。

コメント

> お世話になります。
> Armadillo 640にてSoracom Airを接続してLTE通信で運用している機器があります。
> これが数日に1回程度ですが、ネットワーク通信ができない状況になってしまう現象が発生します。
> そして通信できなくなると、そのままサービスが復旧せず機器を再起動しないと回復しない状態になります。
> 以下の記事にあるようなLTE再接続サービスは640で利用できないでしょうか?
> https://armadillo.atmark-techno.com/forum/armadillo/13692

回線ではモデムの仕様にあわせて再接続サービスを作っているので、
そのまま使えないのと、A640ではNetworkManagerを使っていないので、
ソフトウェアの機構的にも流用出来ないです。

内部の基本的な仕組みは、

1, 定期的にping等で任意の接続確認に使いたいIPに対して疎通確認する
2, 一定回数pingが失敗した場合にATコマンド等を使って最小の停止期間でモデムの再起動など実施する(モデムにより異なります)

という実装なので、A640に接続しているLTEモデムの製造元に
復旧に必要な仕様を確認してみて、上記実装を作ってみると良いと思います。

作り方でわからない所があったら聞いてください。

pingの失敗成功は次のように書けばシェルスクリプトで
実装できるはずです。eth0の部分はLTEモデムのインターフェース名で
置き換えてください。この例だとeth0から発報したpingが128.0.0.1に
到達して10秒以内に2回返ってこない場合に失敗扱いでrecover.shという
任意の復旧処理が書いてあるものを呼び出す、というサンプルです。

復旧処理を実行した直後に通信できない時間が仕様上存在する場合は、
例のように復旧処理を抜けた後にsleepして疎通確認を即座に実行
させないようにする等工夫する必要があるかもしれませんが、これも
モデム依存です。

ping -s 1 -c 2 -w 10 -I eth0 128.0.0.1
if [ $? -eq 1 ]; then
    recover.sh
    sleep 1 #recover.shを抜けても直ぐに通信できない場合確認を一時停止する
fi

コレ自体を、定期的に実行するプロセスを常駐させると期待するものになると思います。

常駐するプロセスの作り方はガイドの下記章を参考にすると良いです。
https://manual.atmark-techno.com/armadillo-guide-std/armadillo-guide-st…

復旧に関する処理は例のように一つのスクリプトにしておいて呼び出すと、テストが
しやすくて良いかと思います。

コメントありがとうございました。詳細をこれから確認させていただくところですが、ぜひ参考にさせていただきます。
大変助かります。

別で以下の記事を見つけました。この内容でも解決できる可能性があるかと思っています
実際は抜き差ししているわけではないですが、同様の事象に陥っている可能性はあります。
https://armadillo.atmark-techno.com/forum/armadillo/11862

もし、上記の記事も含めて、方針を検討したいと思っています。
いかがでしょうか?