IoT開発の谷間を埋めるトランジットサービス活用のススメ

2021/04/17に公開

ども、takiponeです。今日のコンピュータシステムは、特性の異なるサブシステムを連携させて作ります。クラウドに蓄積したデータを表示するスマホアプリ然り、デバイスからセンサーデータをクラウドに送りトレンドを導き出すIoTシステム然りです。IoTシステムにおいてはデバイスとクラウドをサブシステムとし、それぞれ分野の異なる専門知識を持つエンジニアが分担して開発する体制が多く(開発チームの規模によりますが)、おのおのがIoTシステムに抱く関心にはしばしばギャップが生じます。そこで本記事では、その関心のギャップから生まれるIoT開発の谷間を埋めるべく、トランジットサービスを活用する様子をご紹介します。

デバイス開発とクラウド開発のギャップ

デバイスの開発は、センサーとマイコン(MCU)を協調動作させる回路を設計するハードウェア分野とRTOSをベースにファームウェアを作り込む組み込みソフトウェア分野があり、密接な関わりがあるため両輪のバランスで開発を進めていきます。一方のクラウドは、ハードウェアの汎用化/抽象化が進みサービス化されており、開発はソフトウェア分野に寄っています。接続してくるデバイス数ややりとりするデータ量の増加に備える性能面および運用面の非機能要件を作り込むべく、クラウドが予め用意するソフトウェア込みのクラウドサービスや拡張性のある仮想マシン構成を検討します。開発にあたっての関心は当然デバイス/クラウドおのおのが開発する自身のコンポーネントであり、おろそかになりがちなのがデバイス/クラウド間でやりとりする データ通信の仕様策定および合意形成 です。

データ通信は、テレメトリや遠隔操作といったIoTシステムの目的に応じて通信方向やその頻度などを詰めつつ、プロトコルやフォーマットを設計していきます。シンプルな通信であればクラウドのデファクトスタンダードであるRestful APIおよびHTTPSで行きたいところですが、デバイスのハードウェア/ソフトウェアの制約でそれらの採用が難しいケースが少なからずあります。また、PoCないし開発の過程で、あとからの仕様の追加に迫られることもあるでしょう。そんな事態に備えるべく、 トランジットサービス を活用するのがオススメです。

トランジットサービスとは

トランジットサービスは、デバイス/クラウド間のデータ中継機能を提供します。例えば、前述のデバイスの制約にかなうシンプルな構造のデータを受け取り、それをHTTPSのリクエストボディに載せてクラウドに転送する プロトコル変換 を提供します。

さらに中継というワンクッションを置くので、 中継先の抽象化 という側面もあります。各デバイスからは一律でトランジットサービス宛てにデータを送る一方、トランジットサービスはデバイスによって中継先を変えてデータの出し分けをします。あるデバイスのデータはクラウドの開発環境に、別のデバイスのはクラウドの本番環境に中継するという具合です。

プロトコル変換のメリットとユースケース

デバイスで使える通信プロトコルは千差万別です。MQTTやHTTPのライブラリが用意されることもあれば、TCPないしUDPでテレメトリデータの送信を独自に実装したり、ときにはガラケーのテキストメッセージにも利用するSMS(ショートメッセージサービス)で送る場合もあります。既製のハードウェアだと通信プロトコルがあらかじめ決まっていることが多く、電池稼働など消費電力の制約が厳しいケースでは 計算量と通信データ量を節約するため に軽量なプロトコルを選択する場合もあります。ちなみにHTTPSが利用するTLSは、ハンドシェイクの計算量が多く(オフロードできる場合もありますが)、CA証明書のサイズが大きいのでマイコンでは敷居が高いです。

デバイスのデータ通信の実装例

パソコンやクラウドでのネットワークプログラミングというと、あらかじめOSにIPアドレスやDNSなどネットワークの設定をしておいてソケットプログラミングからスタートする形をイメージするでしょう(ライブラリやフレームワークでさらに抽象化される場合も多いと思います)。IoTでよく利用するLTEやLTE-Mなどのセルラー通信をマイコンで利用する場合は、RTOSやセルラー通信モジュールごとにネットワークスタックの様子が異なり、汎用のソケットライブラリで開発できるケースは多くありません。一方、最近のセルラー通信モジュールにはネットワークスタックやシンプルなソケット通信機能を内蔵しているものがあり、それらの機能を古くからモデムの制御に用いられてきたATコマンドで利用できます。

LTE-M通信モジュールQuectel BG96でのUDPデータ送信の例

# UDPの通信先をホストuni.soracom.ioの23080番ポートにセットして、疑似ソケットをオープン
AT+QIOPEN=1,1,"UDP","uni.soracom.io",23080 
OK

+QIOPEN: 1,0
# 標準入力から入力するデータ(test)を送信
AT+QISEND=1 
> test<ctrl-z>
SEND OK

# 受信バッファ(ホストからのレスポンス)を読み取り
AT+QIRD=1   
+QIRD: 46
200 Success: {"payload"=>"dGVzdA0N"} => test

OK

ATコマンドによるやりとりはUARTなどのシリアル通信なので、Wi-Fiなどネットワークインターフェースを既に持っているIoTデバイスに後付けで追加することもできます。デバイスのメインのサービスは他のネットワーク経由、デバイスの保守やメンテナンス用途の独立した通信はセルラー通信で、というような役割を分担する構成もアリだと思います。

トランジットサービスの例

トランジットサービスは、このようなデバイスがサポートしやすい複数の通信プロトコルをサポートしそれらの通信をHTTPSに変換、クラウドに中継することでデバイスとクラウド間のデータ通信に柔軟性を持たせることができます。IoTプラットフォームSORACOMではトランジットサービスに相当するものとして、以下のサービスを提供しています。

これらのサービスには、デバイスから送信されるデータを変更するバイナリパーサーや変更するプログラムをユーザーが自分でアップロードできる(SORACOM Orbit)と組み合わせることもできます。

まとめ

IoTシステムにおけるデバイスとクラウド間のデータのやりとりを柔軟にするトランジットサービスをご紹介しました。IoTのシステムをスピーディーに作りたいというときの選択肢に入れてみてください。

Discussion