SORACOM Developers

Documents

USSD を用いて Beam / Funnel / Harvest にデータを送信する

当ガイドでは、USSD を用いて Beam / Funnel / Harvest の各サービスにデータを送信する方法について解説します。

はじめに

USSD とは、Unstructured Supplementary Service Data の略で、SORACOM Air の Global SIM (plan01s および plan01s-LowDataVolume) で利用可能なデータ送受信方法です。

デバイスから USSD 経由でデータを送信し、それを Beam / Funnel で転送したり、Harvest へ蓄積したりすることができます。

USSD は、デバイスから AT コマンドを用いて送信することはもちろん、スマートフォンの電話アプリなどで特殊な番号にダイヤルすることでもデータを送信できます。

USSD を使用する際はデータ通信のセッションを作成する必要がありませんので、簡単にデータを送信できます。

ただし、USSD で一度に送信できるデータは 160 バイト(GSM 7 bit default alphabet を使用する場合は 182 文字、サービス識別のためのサービスコードや * # などの記号も含む)までとなり、またデータ通信速度もそれほど早くないので大容量のデータ通信には向きません。

また、現時点ではネットワーク側を起点としたデータ通信(いわゆるダウンリンク通信)ができません。 (デバイス側が送信した USSD に対するレスポンスをネットワーク側から返却することは可能です。)

したがって、IoT デバイスから少量のデータをそれほど高くない頻度でアップロードしたい、という用途に向いた通信方法です。

対応フォーマット

現時点では、テキストフォーマット (Data Coding Scheme = 15, GSM 7bit default alphabet) での送信にのみ対応しています。

送信時は、 *{Service Code}*{任意のデータ}# という形式の MMI 文字列を使用します。

Service Code 部には以下のいずれかの値を指定します。

任意のデータ の部分には GSM 7bit default alphabet の範囲内の文字を使用可能です。

デバイスの準備

USSD でデータ送信を行うには、USSD に対応したデバイスが必要です。

現時点では、以下のデバイスでテキストフォーマット(Data Coding Scheme = 15, GSM 7bit default alphabet)での送信に対応していることを確認しています。 - MS2131i-8 - MS2372h-607 - Wio 3G SORACOM Edition - UC20 (+ EVBKIT) - UG96 (+ EVBKIT)

他のデバイスに関しては、メーカーにお問い合わせください。 一般的なスマートフォンの電話アプリを用いてデータ送信を行うこともできます。

Beam を使って任意のサーバーへデータを送信する

Beam の転送先となるサーバーアプリケーションを構築する

HTTP もしくは HTTPS で Content-Type: application/json のデータを受信可能なサーバーアプリケーションを構築します。

サーバー側から、以下の条件を満たすレスポンスを返却すると、デバイス側でレスポンスを受け取ることができます。

このドキュメントでは、上記の条件を満たすテスト用のサーバーとして beamtest.soracom.io を転送先として設定します。

Beam のコンフィグレーションを行う

SORACOM User Console を用いて Beam のコンフィグレーションを行います。

  1. SORACOM User Console にログインします。
  2. カバレッジタイプ:グローバル を選択します。
  3. USSD を送信できるようにしたい SIM を選択し、[操作] メニューから [グループ変更] > [グループを新規作成] を選択します。(もしくは既存のグループを割り当てます)
  4. 3 で SIM に割り当てたグループの設定画面を開きます。
  5. SORACOM Beam の欄を開き、[+] ボタンを押します。表示されたメニューの中から、 [USSD → HTTP/HTTPS エンドポイント] を選択します。
  6. 設定画面が開くので、「設定名」に任意の名前、「転送先」のホストに beamtest.soracom.io を設定して「保存」ボタンを押します。

デバイスから USSD でデータを送信する

MS2131i-8 もしくは MS2372h-607 の場合

PC の USB ポートに MS2131-i8 または MS2372h-607 を接続し、ターミナルエミュレーターソフトウェアを用いてシリアル通信ポートに接続します。 Windows の場合は Putty や TeraTerm といったソフトウェアを用い、MS2131-i8 または MS2372h-607 の COM ポートに接続します。 Mac/Linux の場合は screen コマンドなどで /dev/tty.xxx や /dev/cu.xxx といった名称のデバイスファイルを開きます。

シリアル接続ができたら以下の AT コマンドを実行します。

AT^USSDMODE=0
AT+CSCS="GSM"
AT+CUSD=1,"*901011*123#",15

1 行目は Huawei の機種に固有のコマンドで、USSD を通常どおり、3GPP の規格に従って送信するモードにします。 2 行目は、用いる文字セットを GSM 7 bit default alphabet に設定しています。 3 行目で実際の USSD の送信をしています。Beam / Funnel / Harvest の選択のためのサービスコードなどが含まれています。

最初の2行はモデムの電源 ON 後に一度だけ実行すればよく、その後は 3 行目だけを繰り返すことで複数回のデータ送信を行うことができます。

サーバー側には以下のような JSON 文字列が届くはずです。

 {
   "imsi":"29505xxxxxxxxxx",
   "ussdDataCodingScheme":15,
   "ussdString":"*901011*123#",
   "value":"123"
 }

ussdString には AT コマンドで指定した文字列そのものが入っています。 value には、ussdString からサービスコードなどを取り除いた部分が入っています。

Wio 3G SORACOM Edition の場合

Arduino IDE を起動し、以下のようなスケッチを実行します。 (Wio 3G のライブラリのバージョンを最新に更新してから実行してください。)

#include <Wio3GforArduino.h>

Wio3G Wio;

void setup() {
  delay(200);

  SerialUSB.begin(115200);
  SerialUSB.println("");
  SerialUSB.println("--- START ---------------------------------------------------");

  SerialUSB.println("### I/O Initialize.");
  Wio.Init();

  SerialUSB.println("### Power supply ON.");
  Wio.PowerSupplyCellular(true);
  delay(500);

  SerialUSB.println("### Turn on or reset.");
  if (!Wio.TurnOnOrReset()) {
    SerialUSB.println("### ERROR! ###");
    return;
  }

  SerialUSB.println("### Registering location.");
  if (!Wio.WaitForCSRegistration()) {
    SerialUSB.println("### ERROR! ###");
    return;
  }

  SerialUSB.println("### Sending USSD.");

  const char* message = "*901011*123#";  // Beam
  //const char* message = "*901021*123# ";  // Funnel
  //const char* message = "*901031*123#";  // Harvest
  char response[256];
  size_t respLen = sizeof(response);

  if (!Wio.SendUSSD(message, response, &respLen)) {
    SerialUSB.println("### ERROR! ###");
    return;
  }

  SerialUSB.print("### Received response: ");
  SerialUSB.println(response);
}

void loop() {
}

これを実行することで、beamtest.soracom.io からのレスポンスが表示されるはずです。

UC20 + Mini PCIe EVBKIT の場合

QCOM tool を使い、以下の AT コマンドを実行します。

AT+CUSD=1,"*901011*123#",15

スマートフォンの電話アプリを使う場合

電話アプリを起動し、以下の番号に電話をかける操作を行います。

*901011*123#

Funnel を使ってクラウドサービスへデータを送信する

ここでは Funnel を使って AWS Kinesis Firehose へデータを送信してみます。

AWS Kinesis Firehose および SORACOM Funnel の設定に関しては こちら のドキュメントを参照してください。

AWS Kinesis Firehose および SORACOM Funnel の設定が完了したら、Beam のときと同様にデータを送信します。 ただし、送信時に利用するサービスコードを 901011 から 901021 に変更します。

Harvest を使ってデータを蓄積し、可視化する

Harvest へデータを蓄積するためには、SIM が所属しているグループの設定で Harvest の使用を ON にするだけです。 (Harvest の使用を ON にしたままですと 1 日 5 円の課金が続きますので、使用終了後は OFF に戻すのを忘れないようにしてください。)

Harvest が使える状態になったら、Beam のときと同様にデータを送信します。 ただし、送信時に利用するサービスコードを 901011 から 901031 に変更します。

データを送信したら、Harvest の画面を開きます。

value の値を元にグラフが描かれているはずです。(データを1回だけ送信した場合は点が表示されるだけですので見づらいかもしれません。その場合は値を変えながら数回送信してみましょう。

Getting Started

SORACOM Air for セルラー

SORACOM Air for LoRaWAN

SORACOM Air for Sigfox

SORACOM Beam

SORACOM Canal/Direct/Door

SORACOM Endorse

SORACOM Funnel

SORACOM Gate

SORACOM Harvest

SORACOM Inventory

SORACOM Junction

SORACOM Krypton

SORACOM Lagoon

サービス機能詳細

Developer Tools

pagetop