ブログ

Armadillo Base OS: コンテナから Python で LTE の情報を取得する方法

at_mitsuhiro.yoshida
2023年9月29日 15時00分

はじめに

Armadillo Base OS(以下 ABOS) では、 3G/LTE モジュールの制御に modemmanager を使用しております。
本ブログでは、コンテナから ABOS 上で動作している modemmanager を経由して LTE モジュールの電波品質、IMEI、SIM の電話番号を取得するサンプルの使い方を説明します。
NetworkManager が ModemManager とのやりとりで使用している DBus を使用して実現します。

動作確認環境

本ブログでは Armadillo-IoT ゲートウェイ A6e Cat.M1 モデルに、2023年9月28日時点で最新の ABOS 3.18.3-at.4 を適用した状態で動作確認を行っております。
同じ手順で Armadillo-IoT ゲートウェイ G4 LTE モデル、Armadillo-IoT ゲートウェイ A6E Cat.1 モデルでも使用可能です。

注意事項

  • 本サンプルは、都度 DBus の ModemManager の modem を生成してから電波品質などを取得していますが、
    周期的に繰り返し情報を取得するのであれば、生成した MMModem インスタンスを保持する方が処理速度が速くなります。
    • MMModem インスタンスを保持する場合の注意点は、ABOS にて LTE コネクションの再接続を実行した場合、
      保持している MMModem インスタンスが使えなくなり再度 MMModem インスタンスを生成する必要があります。
      電波品質などを取得してエラーが発生した場合に MMModem の再生成を実行してください。
  • 本サンプルは、例外処理に関して網羅できていない可能性がありますので、最終製品に組み込む場合は動作検証の上ご利用ください。

概要

ModemManager の中では、 LTE モジュールを modem というインスタンスで管理しています。
この modem に対して DBus 経由でアクセスし、各種情報を取得します。

ModemManager のDBus 定義は、ModemManager のドキュメント内 Part IV. D-Bus Reference を参照ください。

使用するファイル

サンプルファイルをまとめた zip ファイル を解凍すると中に以下のファイルが含まれています。

  • mm_dbus_modem_example.conf: コンテナの設定ファイルです。/etc/atmark/containes/ に配置して使用します。
  • mm_dbus_modem.py: modem の DBus アクセス用オブジェクトを生成し、各プロパティを取得するメソッドを提供します。
  • test_modem.py: mm_dbus_modem.py の使い方のサンプルです。

手順

ここでは、mm_dbus_modem_example という名前のコンテナで実行します。
ファイルの永続化などの方法は製品マニュアルを参照してください。

  1. コンテナの設定ファイル /etc/atmark/containers/mm_dbus_modem_example.conf を以下の内容で作成してください。
set_image docker.io/alpine
set_command sleep infinity
add_volume /run/dbus
  1. コンテナを生成・開始してコンテナの中に入ります
[armadillo:]~# podman pull docker.io/alpine
[armadillo:]~# podman_start mm_dbus_modem_example
[armadillo:]~# podman exec -it mm_dbus_modem_example /bin/sh
[container]/# 
  1. コンテナの中で python の DBus を使用するための設定を行います。
[container]/# cd 
[container]~ # apk update && apk upgrade
[container]~ # apk add python3 py3-pip py3-dbus py3-gobject3
  1. mm_dbus_modem.py と test_modem.py を同じディレクトリに配置してください。
  2. 以下のコマンドを実行します。 Own Number は SIM によっては表示されなこともあります。
[container]~ # python3 test_modem.py
first modem found
SignalQuality: XX
IMEI: XXXXXXXXXXXXXX
Own Number:  XXXXXXXXX