Thing-IF SDK の構成

Thing-IF を利用したモバイルアプリと Thing 実装のための SDK として、以下のものが提供されています。

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

Thing のデバイス上で動作する Thing-IF SDK for C version 1 は obsoleted(廃止予定)です。

Thing-IF SDK for C version 2

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

SDK の構成

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

SDK は、ebisu というリポジトリで提供されます。これをユーザープログラムから利用することによって Thing Interaction Framework を利用します。

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

  • コールバック関数を用意すれば Thing Interaction Framework の利用が可能です。

    基本的に、Thing 上のプログラムは初期設定を行い開始 API を実行するとコールバック関数(アクションハンドラーとステートセッター)が SDK から呼び出されるのを待つだけの実装となります。

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

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

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

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

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

    コマンドの送受信に必要なメモリ領域は、ユーザープログラム側で用意して SDK の初期化の際に渡します。

    一部 SDK 内でヒープ領域を確保する処理があります。その場合は malloc, free 相当のコールバック関数を設定してください。設定しない場合は内部で malloc, free を使用します。

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

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

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

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

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

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

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

リファレンス実装

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

  • Linux
  • GT202
  • Ti CC3200
  • Avnet IoT Starter Kit

これら以外の環境で使用する場合、OS に依存するソケットやタスク(スレッド)生成などの処理をプラットフォームごとに用意します。 その際 ebisu リポジトリ内の tio ディレクトリ下の各サンプル内のソースコードを参考にしてください。

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

モバイルアプリ用 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 の機能を呼び出すこともできます。

Thing-IF SDK for C version 1

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

この SDK は廃止予定のものです。新規プロジェクトでの利用は避けてください。

SDK の構成

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

SDK は、thing-if-ThingSDKKiiThingSDK-Embeddedkii_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 内で利用しません。

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

  • 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 ファイルに相当するソースコードを環境に合わせて用意してください。

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