Thing-IF SDK の構成

Thing-IF SDK は、Thing のデバイス上で動作する Thing-IF SDK for C と、モバイルアプリ上で動作する Thing-IF SDK for Android、Thing-IF SDK for iOS、Thing-IF SDK for JavaScript を提供しています。

Thing 側の SDK とモバイルアプリ側の SDK の両方を使ってプログラムを作成することで、モバイルアプリから Thing を操作するサービスを構築できます。

Thing-IF SDK for C

Thing-IF SDK for C は Thing 上で動作する C のプログラムです。ソースコードが公開されており、開発時にはそれをダウンロードして環境に合わせてビルドできます。

SDK の構成

SDK の構成を以下に示します。

SDK は、thing-if-ThingSDK、KiiThingSDK-Embedded、kii_json という 3 つのリポジトリから構成されます。これをユーザープログラムから利用することによって Thing Interaction Framework を利用します。

構成上、特に注意すべき点は以下のとおりです。

  • ハンドラーを用意すれば Thing Interaction Framework の利用が可能です。

    基本的に、Thing 上のプログラムは初期化が完了すると、コールバック関数(コマンドハンドラーとステートハンドラー)が SDK から呼び出されるのを待つだけの実装となります。

  • 内部で Thing SDK Embedded を使用しています。

    Thing-IF SDK の内部では、Thing SDK Embedded を利用しています。これは組み込み環境に向けた C 言語の SDK で、Kii Cloud SDK の重要な機能をサポートしています。

    Thing SDK Embedded は直接利用することもできます。詳細は Thing SDK Embedded で Thing を実装 をご覧ください。また、内部で利用している kii-core の利用方法については kii-core の利用 をご覧ください。

  • OS 関連の機能は用意されています。

    thing-if-ThingSDK では、特定の環境向けに リファレンス実装 を定義しています。Socket や Task など、OS と深く関連した API はリファレンス実装の中で用意されており、そのままビルドして実行できます。リファレンス実装以外の環境で利用する場合、ソースコードを元にこれらの機能を用意する必要があります。

    なお、実際の実装では、KiiThingSDK-Embedded に存在する OS 依存の各種ライブラリを thing-if-ThingSDK で統合して利用する形を取ります。

  • MQTT の実装は用意されています。

    MQTT クライアントは KiiThingSDK-Embedded に実装されており、特別な追加ライブラリなしで MQTT によるプッシュ通知を利用できます。Thing の実装では、プッシュ通知を コマンドの受信 などで利用します。

  • バッファはユーザープログラム側で用意します。

    コマンドの送受信に必要なメモリ領域は、ユーザープログラム側で用意して SDK の初期化の際に渡します。ヒープ領域からメモリを確保する、malloc 相当の API は SDK 内で利用しません。

    なお、バッファ関連の実装方法の詳細はリファレンスガイドの 初期化コードの実装 をご覧ください。

  • JSON の解析に kii_json ライブラリを利用できます。

    モバイルアプリとの連携には JSON 形式の文字列の解析が必要です。

    本質的には単なる文字列処理のため、どのような実装を使っても問題ありませんが、ユーザープログラムからも kii_json を利用すると、確実で簡単な実装になります。実装方法は JSON の解析 をご覧ください。

  • 通信の制御はライブラリー内で行います。

    OS ごとのソケットの API 呼び出しの実装や、その呼び出しの制御は thing-if-ThingSDK のライブラリー内に実装されています。ソケットの基本的な APIである connect()close()send()recv() を呼び出し元から切り離して実装しているため、ターゲット環境に合わせたカスタマイズや SSL/TLS の利用も実現できます。

    また、MQTT 経由でサーバーからのコマンドの到着を待つ処理では、コネクションが切断された場合の再接続処理もライブラリー側で実装されています。

リファレンス実装

リファレンス実装を提供している環境は以下のとおりです。

  • Linux
  • Intel Edison
  • Ti CC3200

これら以外の環境で使用する場合、必要な API を自分で用意します。構成図のとおり、OS に依存するソケットやタスク(スレッド)生成などの処理はプラットフォームごとに差し替えられる形になっているため、基本的にどのようなプラットフォームにも展開できます。

API の実装を差し替える場合、thing-if-ThingSDK リポジトリ内の kii_iot_environment_linux.c ファイルに相当するソースコードを環境に合わせて用意してください。

具体的な導入手順は 開発の準備 をご覧ください。

モバイルアプリ用 Thing-IF SDK

Thing Interaction Framework に対応したモバイルアプリを作成できる SDK を用意しています。SDK は、Android と iOS によるネイティブアプリ、JavaScript(TypeScript)による Web アプリの開発に対応しています。SDK を使うと Thing を制御するモバイルアプリを容易に作成できます。

動作環境は SDK の構成とサポート環境 をご覧ください。

Thing-IF SDK を利用するためには、Kii Cloud SDK も併用する必要があります。

  • Thing-IF SDK は、ステートの読み込みやコマンドの送信などの Thing Interaction Framework の操作に対する機能を提供します。

  • Kii Cloud SDK は、初期化の際に Thing の所有者となるユーザーのアクセストークンや ID を取得するために必要です。

Thing Interaction Framework では、コマンド送信やステータスなどを実現するため、内部で ユーザー、データ管理、プッシュ通知など Kii Cloud の機能を利用しています。これらの接点となる部分については、アプリ開発ガイドで実装方法を案内しているため、標準的なモバイルアプリでは、それに従って Kii Cloud SDK の機能を呼び出してください。

Kii Cloud と Thing Interaction Framework は、同一のクラウド上のアプリケーションを共有するため、データ管理やプッシュ通知などの機能を利用したい場合は、Kii Cloud SDK の機能を呼び出すこともできます。

導入手順はこちら(AndroidiOSJavaScript)をご覧ください。

REST API

Thing Interaction Framework を使ったソリューションを構築する際は、上記の SDK の代わりに REST API を直接利用して、モバイルアプリ、または、Thing を作成することができます。

特に、Thing Interaction Framework の機能範囲では、MQTT プロトコルだけを使って Thing を構築することもできます。MQTT プロトコルだけで実装する方法は MQTT 経由での API の利用 および MQTT プロトコルだけでの実装 をご覧ください。