Armadilloフォーラム

LTE電波状況

uen2825

2024年3月13日 15時04分

お世話になっております。
現在10分毎にLTEでの通信をしており、通信開始前に電波状況を確認しています。
pythonでの実行をしています。電波強度取得python.txt。
殆どの場合は OK.txt ですが
たまに NG.txt のようになり、電波情報がつかめなくなります。
確認する場所等アドバイスを頂けたら幸いです。
宜しくお願いいたします。

ファイル ファイルの説明
電波強度取得python.txt
OK.txt
NG.txt
コメント

at_mitsuhiro.yoshida

2024年3月13日 15時19分

吉田です。

LTE の再接続中及び起動時には NG.txt の状況になります。
そのため、取得できない状況もあり得る前提でのご利用・設計をお願いします。

よろしくお願いします。

吉田様
早速のご回答ありがとうございます。
追加で申し訳ございません。
10分毎、SLEEPから起動しています。
その場合、毎回再接続となると思うのですが、違うのでしょうか。
宜しくお願いいたします。

ファイル ファイルの説明
power-utils.conf

at_mitsuhiro.yoshida

2024年3月13日 16時06分

吉田です。

はい、起床した時点で ModemManager を再起動しておりますので、
再接続となります。
NG.txt は再接続に時間がかかっているケースかと思われます。
様々な要因で LTE の接続までの時間にかかる・接続に失敗することはあります。

at_mitsuhiro.yoshida

2024年5月21日 15時47分

吉田です。

幾つか実現手段はあると思いますが、
一例を記載します。

/usr/bin/send-at をコピーし、そのディレクトリを共有します。

mkdir /var/app/rollback/volumes/mm
cp /usr/bin/send-at /var/app/rollback/volumes/mm/.
armadillo:/var/app/rollback/volumes/mm# ls
send-at

コンテナ設定ファイルで、上記ディレクトリをコンテナに見せて、
ttyMux を add_hotplugs に設定しコンテナからアクセス可能にします。

add_hotplugs を使用することで、
LTE モジュールを再起動させた後も ttyMux2 をコンテナから使用できます。

armadillo:~# cat /etc/atmark/containers/.~conf
... 前略 ...
add_volumes /var/app/rollback/volumes/mm:/mm:
add_hotplugs ttyMux

コンテナ上でコマンドの実行が可能になります。

~ # /mm/send-at /dev/ttyMux2 AT+CSQ echo ems31
+CSQ: 21,99
OK

吉田様
ありがとうございます。
ご説明の通りでコンテナ上からコマンド実行できる事を確認いたしました。
------------
こちらでする質問で無いようでしたらご容赦ください
pythonで運用しておりますがatコマンドの結果を取得しようとしています

    res = subprocess.run("/mm/send-at /dev/ttyMux2 AT+CSQ echo ems31",shell=True, stdout=PIPE, text=True)
    print(res)
 
その結果が
CompletedProcess(args='/mm/send-at /dev/ttyMux2 AT+CSQ echo ems31', returncode=0, stdout='')

stdoutに値が入りません。
ls / 等で試したのですがこちらは値が入ります

CompletedProcess(args='ls /mm', returncode=0, stdout='send-at\n')

atコマンドには対応していないという事でしょうか?

at_mitsuhiro.yoshida

2024年5月22日 15時26分

吉田です。

ざっくりした回答になるのですが、
コンテナ上で ttyMux2 が見えていますので
ttyMux2 に pyserial を使用する手もあります。

import serial
 
 
if __name__ == '__main__':
    _mux2 = serial.Serial('/dev/ttyMxu2', baudrate=460800, timeout=5)
    _mux2.write(str.encode('AT+CSQ\r\n'))
    line = _mux2.readline()
    print(line)
    line = _mux2.readline()
    print(line)
    _mux2.close()

上記ですと line には

b'AT+CSQ\r\r\n'
b'+CSQ: 25,99\r\n'

の様に値が入るかと思われます。
※ AT+CSQ の echo が返ってこない場合もあります。

不要なレスポンスの読み捨て、異常系は考慮しておりませんが参考になれば幸いです。

吉田様
早速のご回答ありがとうございました。
ご教授いただいた方法で上手くいきました。