4GPi で 4G (LTE) 回線の電波強度や使用バンド、基地局情報 等を確認

# はじめに

[メカトラックス株式会社](https://mechatrax.com/)の[maeda01](https://qiita.com/maeda01)です。

弊社製品 4GPi を使っていただくうえで、4GPi の通信状況を確認したいという問い合わせをいただくことがあります。
本記事は 4GPi の通信状況を確認する、一般的な ModemManager を使用した方法と、固有の AT コマンドを使用した方法の紹介となります。

4GPi に関する詳細な情報は、[弊社ホームページ](https://mechatrax.com/products/4gpi/) をご参照ください。

# 使用するもの
* Raspberry Pi 4 model B 
* 4GPi
    以下の付属品も使用します。 
    * 4Gアンテナ: 2本
    * DCジャック – XHP-2コネクタ変換ハーネス: 1本
    * USB-A オス – USBmini-b オスケーブル (4GPi 接続用): 1本
    * 基板固定用六角スペーサ (M2.6) セット: 4セット
* micro SD カード
* 標準 SIM カード 
* AC アダプタ (12V/2A)

# 4GPi のセットアップ

以下の記事を参考に、4GPi のセットアップを行ってください。

https://mechatrax.com/blog/setup-4gpi/

APN 設定を行い、LTE 通信ができる状態になると 4GPi のステータス LED (青色 LED) が点滅します。
加えて、wwan0 に IP アドレスが割り当てられます。

```
mtx@raspberrypi:~ $ ip a show dev wwan0
4: wwan0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1430 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/none
    inet 10.***.***.***/28 brd 10.***.***.*** scope global noprefixroute wwan0
       valid_lft forever preferred_lft forever
```


# 通信状況の確認
通信状況の確認には mmcli コマンドと AT コマンドを使用します。

mmcli コマンドの詳細については以下をご参照ください。

https://manpages.debian.org/bookworm/modemmanager/mmcli.1.en.html

AT コマンドを実行するために picocom コマンド、もしくは chat コマンドを使用します。本記事では picocom を使用します。

4GPi のユーティリティをインストールする際、chat コマンドがインストールされますが、 picocom コマンドはインストールされません。
以下のコマンドで picocom をインストールしてください。

```
$ sudo apt install picocom
```

picocom コマンドの詳細については以下をご参照ください。

https://manpages.debian.org/bookworm/picocom/picocom.1.en.html


AT モデムのコンソールポートの設定は 4gpi-utils のインストール時に自動的に行われます。

https://github.com/mechatrax/4gpi-utils/blob/bookworm/4gpi#L5-L6



 ## モデムの情報の取得

モデムの情報は以下のコマンドで取得できます。

```
$ sudo mmcli -m 0
```

このコマンドを実行すると以下のような出力が得られます。

```
mtx@raspberrypi:~ $ mmcli -m 0
  -----------------------------------
  General  |               dbus path: /org/freedesktop/ModemManager1/Modem/0
           |               device id: ****************************************
  -----------------------------------
  Hardware |            manufacturer: QUALCOMM INCORPORATED
           |                   model: SIMCOM_SIM7600JC-H
           |       firmware revision: LE11B01SIM7600JC-H
           |          carrier config: Commercial-DCM
           | carrier config revision: 05010D0F
           |            h/w revision: 10000
           |               supported: gsm-umts, lte
           |                 current: gsm-umts, lte
           |            equipment id: 86394904*******
  -----------------------------------
  System   |                  device: /sys/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1
           |                 drivers: qmi_wwan, option1
           |                  plugin: simtech
           |            primary port: cdc-wdm0
           |                   ports: cdc-wdm0 (qmi), ttyUSB3 (at), wwan0 (net)
  -----------------------------------
  Numbers  |                     own: 070********
  -----------------------------------
  Status   |                    lock: sim-pin2
           |          unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)
           |                   state: connected
           |             power state: on
           |             access tech: lte
           |          signal quality: 100% (recent)
  -----------------------------------
  Modes    |               supported: allowed: 3g; preferred: none
           |                          allowed: 4g; preferred: none
           |                          allowed: 3g, 4g; preferred: 4g
           |                          allowed: 3g, 4g; preferred: 3g
           |                 current: allowed: 3g, 4g; preferred: 4g
  -----------------------------------
  Bands    |               supported: utran-1, utran-6, utran-5, eutran-1, eutran-3, eutran-8,
           |                          eutran-18, eutran-19, eutran-26
           |                 current: eutran-1, eutran-3, eutran-8, eutran-18, eutran-19,
           |                          eutran-26
  -----------------------------------
  IP       |               supported: ipv4, ipv6, ipv4v6
  -----------------------------------
  3GPP     |                    imei: 86394904*******
           |             operator id: 44010
           |           operator name: DOCOMO
           |            registration: home
  -----------------------------------
  3GPP EPS |    ue mode of operation: csps-2
  -----------------------------------
  SIM      |               dbus path: /org/freedesktop/ModemManager1/SIM/0
  -----------------------------------
  Bearer   |               dbus path: /org/freedesktop/ModemManager1/Bearer/0
```

このコマンドから、以下のようなことが取得できます。
* モデムのハードウェア情報
* モデムが認識しているポート (上の例では cdc-wdm0, ttyUSB3, wwan0)
* SIM の電話番号
* SIM の接続情報 (connected, disconnected など)
* SIM の PLMN
* サポートしているバンド (上の例では utran-1, utran-6, utran-5, eutran-1, eutran-3, eutran-8, eutran-18, eutran-19, eutran-26)

## 電波強度

電波強度の情報は以下のコマンドで取得できます。

```
$ sudo mmcli -m 0 --signal-setup=10
$ sudo mmcli -m 0 --signal-get
```


`$ sudo mmcli -m 0 --signal-setup=10` を実行することで10秒おきに信号の情報が取得されます。

この2つのコマンドを実行すると以下のような出力が得られます。

```
mtx@raspberrypi:~ $ sudo mmcli -m 0 --signal-setup=10
Successfully setup extended signal information retrieval
mtx@raspberrypi:~ $ sudo mmcli -m 0 --signal-get
  ----------------------
  Signal | refresh rate: 10 seconds
  ----------------------
  LTE    |         rssi: -55.00 dBm
         |         rsrq: -8.00 dB
         |         rsrp: -83.00 dBm
         |          s/n: 15.00 dB
```

出力のされる項目は以下の通りです。

* Signal
    * refresh rate : 信号情報の取得間隔

* LTE
  * rssi : 受信信号強度 (RSSI / Received Signal Strength Indicator)
  * rsrq : 基準信号受信品質 (RSRQ / Reference Signal Received Quality)
  * rsrp : 基準信号受信電力 (RSRP / Reference Signals Received Power)
  * s/n :  S/N 比 (Signal-to-Noise Ratio)

RSSI (dBm) の 大きさの目安は以下を参考にしてください。

https://m2msupport.net/m2msupport/atcsq-signal-quality/


## 基地局の情報

4GPi が接続している基地局の情報は以下のコマンドで取得できます。

```
$ sudo mmcli -m 0 --location-get
```

このコマンドを実行すると以下のような出力が得られます。

```
mtx@raspberrypi:~$ sudo mmcli -m 0 --location-get
  --------------------------
  3GPP |      operator code: 440
       |      operator name: 10
       | location area code: FFFE
       | tracking area code: 9011
       |            cell id: 09159011
```

出力される項目は以下の通りです。
* operator code: Mobile Country Code (MCC)、電気通信事業者の運用地域を示すコード
    * 日本では 440 が割り当てられています。
* operator name: Mobile Network Code (MNC)、電気通信事業者を識別するコード
    * NTT ドコモなら 10、Softbank なら 20、KDDI なら50, 51, 52、楽天モバイルなら 11 が割り当てられています。
    * その他 PLMN (MCC + MNC) 番号については総務省のページをご参照ください。
    https://www.soumu.go.jp/main_content/000749615.pdf
* location area code: エリアコード (3G 用)
    * 16進数の値で出力されます。
* tracking area code: エリアコード (LTE 用)
    * 16進数の値で出力されます。
* cell id: 基地局の ID
    * 16進数の値で出力されます。
    * 基地局の位置情報は一般的には開示されていないため、cell id のみではどこの基地局に接続しているかまではわかりません。

※ SORACOM の API (SORACOM コマンド) を使用すると LTE の基地局の位置情報 (緯度経度) を取得できます。
ただし、精度はそれほど高くないようです。

以下のようなコマンドで基地局の位置情報が取得できます。
パラメータ `--tac` (tracking area code) と `--eci` (cell id) は 10進数に変換して指定していることに注意してください。

```
$ soracom cell-locations get --mcc 440 --mnc 10 --tac $(echo "ibase=16; 9011"|bc) --eci $(echo "ibase=16; 09159011"|bc)
```

位置情報の取得に失敗することもあります。

```
mtx@raspberrypi:~$ soracom cell-locations get --mcc 440 --mnc 10 --tac $(echo "ibase=16; 9011"|bc) --eci $(echo "ibase=16; 09159011"|bc)
Error: {"code":"CEL0006","message":"not found"}
```

位置情報の取得に成功すると以下のように緯度経度 (lat, lon) が出力されます。

```
mtx@raspberrypi:~$ soracom cell-locations get --mcc 440 --mnc 10 --tac $(echo "ibase=16; 9011"|bc) --eci $(echo "ibase=16; 09159005"|bc)
{
        "avg_strength": 0,
        "created": "2023-02-05T23:11:51Z",
        "exact": 0,
        "lat": 33.5939319,
        "lon": 130.3504261,
        "range": 131,
        "samples": 14,
        "updated": "2023-02-06T00:20:04Z"
}
```


基地局取得 API に関する SORACOM のブログ

https://blog.soracom.com/ja-jp/2020/10/14/cell-location-api/

基地局取得 API に関する SORACOM の API リファレンス

https://users.soracom.io/ja-jp/tools/api/reference/#/CellLocation/getCellLocation



## 使用バンド、EARFCN、上下通信帯域幅

4GPi が使用しているバンド、EARFCN、上下通信帯域幅の情報は以下のコマンドで取得できます。

```
$ echo -ne 'AT+CPSI?\r\n' | picocom -qrx 1000 /dev/tty4GPI
```


このコマンドを実行すると以下のような出力が得られます。

```
mtx@raspberrypi:~ $ echo -ne 'AT+CPSI?\r\n' | picocom -qrx 1000 /dev/tty4GPI

+CPSI: LTE,Online,440-10,0x9011,152540433,328,EUTRAN-BAND19,6100,3,3,-92,-797,-532,19

OK
```

SIM7600 の AT Command Manual によると LTE の通信網にアタッチしている場合の `AT+CPSI` の応答フォーマットは以下のようになっています。

`+CPSI: LTE,<Operation Mode>[,<MCC>-<MNC>,<TAC>,<SCellID>,<PCellID>,<Frequency Band>,<earfcn>,<dlbw>,<ulbw>,<RSRQ>,<RSRP>,<RSSI>,<RSSNR>] `

* \<Frequency Band>: 使用バンド
    * 上の例では Band19 に接続していることが確認できます。   
* \<earfcn>: EARFCN
    * 上の例では EARFCN 6100 となっています。

* \<dlbw>,\<ulbw>: 基地局との下り通信帯域幅と上り通信帯域幅
    * この例では上り通信帯域幅 3MHz、下り通信帯域幅 3MHz であることが確認できます。

* \<RSRQ>, \<RSRP>, \<RSSI>, \<RSSNR> は電波強度の項で実行した `$ sudo mmcli -m 0 --signal-get` で取得できる電波強度の情報と同じものになっています。
* \<MCC>-\<MNC>,\<TAC>,\<SCellID> は基地局の情報の項で実行した `$ sudo mmcli -m 0 --location-get` で取得できる情報と同じものになっています。


※ 4GPi は以下のバンドに対応しています。
* Band1 (2100MHz)
* Band3 (1800MHz)
* Band8 (900MHz)
* Band18 (800MHz)
* Band19 (800MHz)
* Band26 (800MHz)

https://github.com/mechatrax/4gpi/wiki/%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2#5-%E9%80%9A%E4%BF%A1%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB


## 下り帯域の周波数の計算
AT コマンド `AT+CPSI?` で取得した EARFCN を使用すると下り帯域の周波数を計算できます。
3GPP TS の資料は以下の URL からダウンロードできます。本記事では 3GPP TS 36.101 v18.4.0 をもとに計算をしていきます。

https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=2411

5.7.3 Carrier frequency and EARFCN の $$ F_{DL} = F_{DL_{low}} + 0.1 (N_{DL} - N_{Offs-DL}) $$
という式から下り帯域の周波数を計算します。
AT コマンドの結果より、
$$ N_{DL} = 6100 $$

Table 5.7.3-1: E-UTRA channel numbers で、Band19 の行から、
$$ F_{DL_{low}} = 875 $$
$$ N_{Off-DL} = 6000 $$

以上のことから、下り帯域の周波数は

``` math
\begin{align}
 F_{DL} & = F_{DL_{low}} + 0.1 (N_{DL} - N_{Offs-DL})\\
 & = 875 + 0.1 (6100 - 6000)\\
 & = 885
 \end{align}
```
となり、885 Hz ということが求まります。

※ 4GPi に搭載されている LTE 通信モジュールの SIM7600JC-H では上りの EARFCN は取得できないため、上り帯域の周波数を求めることはできません。

※ 以下のサイトで下りの EARFCN と周波数が表でまとめられています。

https://www.gadget-and-radio.com/freq-earfcn/



# おわりに
以上、4GPi の通信状況の確認方法を紹介しました。通信トラブルなどが起こった際に参考にしていただけると幸いです。