圏外になった後の通信の復帰について


#1

Candy Pi Lite +Dをつかっておりますが、
圏外になって、通信が途絶えた後、再び圏内になった場合の挙動について教えてください。
1)その場合はcandyサービスが自動で通信を再開するのでしょうか
2)通信が途切れた場合、何かしらのエラーをpythonプログラムからしることがでるでしょうか。
3)自動で再開するために何か設定などする必要はあるのでしょうか
4)通信が途切れたことを確認する方法はありますでしょうか。できればPythonプログラムから通信状態を知りたいです。
5)電波強度もPythonプログラムから知りたいのですが、なにか方法がありますでしょうか。

よろしくお願いいたします。


#2

1)その場合はcandyサービスが自動で通信を再開するのでしょうか

現状は、自動で再開しておりませんが、IPレベルの仕組みで通信不可状態を検出できそうですので、自動再接続をできるように変更を予定しています。現状の振る舞いについては、下記投稿の内容もご覧ください。

2)通信が途切れた場合、何かしらのエラーをpythonプログラムからしることがでるでしょうか。
3)自動で再開するために何か設定などする必要はあるのでしょうか
4)通信が途切れたことを確認する方法はありますでしょうか。できればPythonプログラムから通信状態を知りたいです。

上記1)の回答と同様で、現状はコマンドを実行しないとわからないのですが、より簡便にできるように機能を変更予定しています。

5)電波強度もPythonプログラムから知りたいのですが、なにか方法がありますでしょうか。

USB接続の場合は、Lte通信中の電波取得方法について にあるようにcandyコマンドをPythonからchild_processなどで実施すると結果を取り扱えます。なお、実行結果にカラー制御文字がついてしまうことがありますので、その場合は、Candyコマンドのオプション の投稿をご覧になりプログラム側での対処をお願いいたします。

UARTで接続された場合は、candy suspend connectionにて一時的に接続を中断し、電波強度を取得した後、candy resume connectionを実行します。この時、圏外の場合は接続できるまでリトライをバックグラウンドで実施します。

機能のリリース予定につきましては、1〜2週間以内を見込んでいます。対応しましたらこちらにも投稿いたします。


#3

ありがとうございます。
自動再接続の機能のリリースよろしくお願いします。
出来れば早めにリリースいただけると大変助かります!

念の為にUSB接続している時にpythonから再接続するための手順を確認したいのですが、
通信が切れば場合、ネットワーク処理で例外はが発生するので、
1)例外が発生したら、Subprocessなどをつかって、コマンドで’ candy netwrok show’を実行し、
operatorが’N/A’になっているかで圏外かどうかを判断する

2)圏外の場合、おなじくSubprocessで’sudo candy restart’を実行して再起動する
3)candy serviceは圏外にはいるまで、接続リトライする
4)pythonプログラム側では再び接続できるまでネットワークチェックをする

という形になりますでしょうか?

幾つか質問がございます。
圏外かどうかの判断に
1)candy connection status の結果を使えないのでしょうか?
2)candy network show の結果に network : がありますがこの結果は使えないのでしょうか

また、再接続するために
USB接続ではcandy serviceを再起動する必要ありますでしょうか?
(candy connection suspend -> resume はUART接続でないと使えないのでしょうか。)

よろしくお願いいたします。


#4

ご質問の件につきまして下記回答いたします。

1)例外が発生したら、Subprocessなどをつかって、コマンドで’ candy netwrok show’を実行し、operatorが’N/A’になっているかで圏外かどうかを判断する
2)圏外の場合、おなじくSubprocessで’sudo candy restart’を実行して再起動する
3)candy serviceは圏外にはいるまで、接続リトライする
4)pythonプログラム側では再び接続できるまでネットワークチェックをする

上記流れで特に問題はありません。

圏外かどうかの判断に
1)candy connection status の結果を使えないのでしょうか?

残念ながら使用できません。こちらは、電波状況ではなく通信モジュールとOSとの間のPPP接続状態を使用しております。圏外でも通信モジュール側でPPP接続を終了させないような動きをしてしまっているため、圏外判定には利用できないようです。通信モジュール側の挙動についてはユーザー側で変更できるようにはなっていないため、別の方法を利用する必要があります。

2)candy network show の結果に network : がありますがこの結果は使えないのでしょうか
また、再接続するために
USB接続ではcandy serviceを再起動する必要ありますでしょうか?
(candy connection suspend -> resume はUART接続でないと使えないのでしょうか。)

networkの値は現在利用できません。この結果を取得するためのATコマンドがこの通信モジュールでは利用できなかったためです。
また、USB接続・UART接続どちらの場合も、圏外になった場合は一度candy service restartが必要です。これは通信モジュール側の挙動により、圏外から圏内の復帰が通信モジュール単体では行われないためです。

candy connection suspend/resumeは、USB接続でも利用できますが、このコマンドは、PPP通信によって占有されるシリアルポートを一時的に解放するための用途です。USB接続の場合、PPP接続でシリアルポートが占有されていても別のシリアルポートが利用可能なので、USB接続の場合はあまり必要する場面はないと思われます。

ご不明点等ございましたらこちらにお知らせ下さい。


#5

大変申し訳ございません。通信中に圏内から圏外になった場合について、その後圏外から圏内になった場合に「自動で圏内で再接続しない」という内容に誤りがありましたので訂正します。
実際には以下の通り、圏外から圏内へ復帰した際に、自動的に接続を行います。接続については、以下の2通りの方法で行います。

  1. 通信モジュールによる接続
  2. candy-pi-liteサービス(ソフトウェアサービス)による接続

上記どちらが動作するかは、網側と通信モジュールの状態によりますが、利用者の方が意識して対応する必要はありません。

検証機種

CANDY Pi Lite+ D

検証ソフトウェア/バージョン

  • candy-pi-lite v5.1.0

検証に使用したSIMカード

  • OCN モバイル ONE (LTE)
  • SORACOM Air Global SIM (3G)

検証時のCANDY Pi Liteボード接続方法

  • USB(USB拡張ボードあり)
  • UART(USB拡張ボードなし)

検証方法

通信確立状態で、電波遮断ケースへ収納し、圏外状態にします。圏外状態のまま1時間20分ほど放置し、再度圏内にした場合に自動で復帰するかどうかを確認します。

  • 圏内の確認方法
    • suco candy network showの結果にoperatorが表示されたり、ネットワーク登録状態となっていること。
    • pingコマンドによって応答が返ってくること。
  • 圏外の確認方法
    • suco candy network showの結果にoperatorがN/Aと表示されたり、ネットワーク登録状態がUnregisteredまたはSearchingとなっていること。
    • pingコマンドによって応答が返ってこないこと。

結果

OCN、SORACOM共に通信状態から圏外になった後、圏内に復帰すると自動的に再接続しました。
なお、SORACOM側のコンソール上では、圏外になってもすぐにはオフラインを検出せず、約1時間後にセッションが自動的に切断されてからオフラインと判定されました。

以下は、圏内、圏外の状態におけるsudo candy network showの結果を示します。

// OCN LTE 圏内の場合の状態
{
  "operator": "NTT DOCOMO NTT DOCOMO", 
  "rssi": "-51", 
  "network": "N/A", 
  "rssiDesc": "OR_MORE", 
  "registration": {
    "cs": "Unregistered", 
    "ps": "Registered"
  }
}
// OCN LTE 圏外の場合
{
  "operator": "N/A", 
  "rssi": "-117", 
  "network": "N/A", 
  "rssiDesc": "", 
  "registration": {
    "cs": "Unregistered", 
    "ps": "Unregistered"
  }
}
// 圏外 検索中の場合
{
  "operator": "N/A", 
  "rssi": "-117", 
  "network": "N/A", 
  "rssiDesc": "", 
  "registration": {
    "cs": "Searching", 
    "ps": "Searching"
  }
}
---
// SORACOM Global 3G 圏内の場合の状態
{
  "operator": "NTT DOCOMO", 
  "rssi": "-99", 
  "network": "N/A", 
  "rssiDesc": "", 
  "registration": {
    "cs": "Roaming", 
    "ps": "Roaming"
  }
}
// SORACOM Global 3G 圏外の場合
{
  "operator": "N/A", 
  "rssi": "-117", 
  "network": "N/A", 
  "rssiDesc": "", 
  "registration": {
    "cs": "Unregistered", 
    "ps": "Unregistered"
  }
}
// 電波の捜索中の場合もある
{
  "operator": "N/A", 
  "rssi": "-95", 
  "network": "N/A", 
  "rssiDesc": "", 
  "registration": {
    "cs": "Searching", 
    "ps": "Searching"
  }
}

この結果は、「自動で圏内で再接続しない」という以前の回答と異なるため、こちらの以前の確認について、手順に誤りがある可能性があります。よって他の機種においても追加で検証します。


#6

Pingを利用して圏外か圏内かを状態判別できる機能を追加しました。
初期設定では無効になっています。また、パケットを消費しますので(送受信合わせて60バイト程度)、契約プランの性質に応じて頻度(時間間隔)を調節するようにしてください。
設定方法は、こちらに記載しています。