開発の流れ
Thing-IF SDK を使って IoT ソリューションを開発する流れを紹介します。
ここでは、以下の IoT シナリオを実装することを想定して話を進めます。
サンプル IoT シナリオ:エアコンを Thing Interaction Framework に接続
エアコンのステート管理:
- 現在の部屋の温度と湿度を Thing Interaction Framework に報告
- 現在のエアコン設定(設定温度とファン速度)を Thing Interaction Framework に報告
ユーザーによる遠隔監視:
- モバイルアプリでエアコンのステート(部屋の温度や湿度)をチェック
ユーザーによる遠隔操作:
- モバイルアプリでエアコンを操作(例:電源のオン/オフ、設定温度とファン速度の設定)
エアコンのトリガー制御:
- モバイルアプリよりエアコン自動操作用トリガーをセット(例:温度が摂氏 30 度以上になったら電源をオン)
IoT ソリューション実装の流れは次のとおりです。各ステップにおいて、上であげたサンプル IoT シナリオを適宜参照しつつ説明を行います。
- ステップ 1:Thing のスキーマを定義する
- ステップ 2:Thing を初期登録する
- ステップ 3:Thing のステートを登録する
- ステップ 4:Thing にコマンドを送信して遠隔操作する
- ステップ 5:Thing のステートを参照する
- ステップ 6:コマンドリザルトを閲覧する
- ステップ 7:トリガーをセットする
ステップ 1:Thing のスキーマを定義する
まずは、利用する Thing の能力をスキーマとして定義します。機能の詳細は スキーマ をご覧ください。
今回の IoT サンプルシナリオでは、たとえば次のようなスキーマを使うことになります。
ステート:
- power(boolean):エアコンの電源の状態(オンかオフか)
- current temperature(int):現在の部屋の温度
- current humidity(int):現在の部屋の湿度
- preset temperature(int):エアコンの設定温度
- fan speed(int):エアコンのファン速度
アクション:
- TurnPower(boolean):エアコンの電源をオン/オフする
- SetPresetTemperature(int):エアコンの設定温度を指定の値にする
- SetFanSpeed(int):エアコンのファン速度を指定の値にする
Android モバイルアプリ側でのスキーマ反映の実装方法は スキーマの定義 をご覧ください。iOS ではスキーマを実装上反映しませんが、スキーマに従ったコマンドを送信します。
ステップ 2:Thing を初期登録する
次に Thing の初期登録を行います。初期登録とは、Thing をモバイルアプリと連携し、サービス利用可能な状態にすることを指します。機能の詳細は 初期登録 をご覧ください。
初期登録は、次のいずれの方法でも行うことができます。
モバイルアプリから初期登録を行う方法
基本的な流れは以下のとおりです。
- Thing より vendorThingID とパスワードをモバイルアプリに送信します。
- モバイルアプリは、与えられた vendorThingID とパスワードを使って初期登録を行います。Thing Interaction Framework は、Thing に対して thingID とアクセストークンを払い出します。
- モバイルアプリは、払いだされた thingID とアクセストークンを Thing に送信します。
- Thing は、与えられた thingID とアクセストークンを使って初期登録処理を完了します。
モバイルアプリ側での初期登録の実装方法はこちら(Android、iOS、JavaScript)、Thing 側は モバイルアプリから紐付ける場合 をご覧ください。
Thing とモバイルアプリの両方で初期登録を行う方法
基本的な流れは以下のとおりです。
- Thing は、vendorThingID とパスワードを使って初期登録を行います。Thing Interaction Framework は、Thing に対して thingID とアクセストークンを払い出します。
- Thing は、vendorThingID または thingID のいずれかとパスワードをモバイルアプリに送信します。
- モバイルアプリは、与えられた vendorThingID/thingID とパスワードを使って初期登録を行います。
モバイルアプリ側での初期登録の実装方法はこちら(Android、iOS、JavaScript)、Thing 側は Thing とモバイルアプリ両方から紐付ける場合 をご覧ください。
ステップ 3:Thing のステートを更新する
初期登録が完了すると、Thing のステートを Thing Interaction Framework にアップロードして更新できるようになります。ステートの更新は、SDK 初期化のタイミングで指定した時間を元に定期的に実行されます。機能の詳細は ステートの登録と取得 をご覧ください。
今回の IoT サンプルシナリオの場合、エアコンの設定値や部屋の温度/湿度を定期的にアップロードすることができます。
Thing 側でのステート更新の実装方法は ステートの更新 をご覧ください。
ステップ 4:Thing にコマンドを送信して遠隔操作する
初期登録が完了すると、モバイルアプリより Thing を遠隔操作できるようになります。
モバイルアプリよりコマンドを送信
モバイルアプリはコマンドを送信して Thing の遠隔操作を行います。機能の詳細は アクションとコマンドの実行 をご覧ください。
コマンドは、1 つ以上のアクションにより構成されます。複数のアクションを 1 つのコマンドとして送信した場合は、指定した順番どおりにアクションが実行されます。
今回の IoT サンプルシナリオの場合、たとえば次のようなコマンドを送信することが考えられます。
コマンド "MySetting-1"
1. TurnPower(true)
2. SetPresetTemperature(25)
3. SetFanSpeed(5)
モバイルアプリ側でのコマンド送信の実装方法はこちら(Android、iOS、JavaScript)をご覧ください。
Thing でコマンドを受信する
モバイルアプリから送信されたコマンドは、一旦 Thing Interaction Framework に送られます。コマンドはこの後 Thing Interaction Framework に中継され、対応する Thing に配信されます。
コマンドを受け取った Thing は、コマンド内のアクションに従って適切な操作を実行します。
今回の例だと Thing はコマンド "MySetting-1" を受信、解釈します。この結果、エアコンの電源がオンになり、設定温度が摂氏 25 度にセットされ、ファン速度が 5 にセットされます。
Thing 側でのコマンド受信の実装方法は コマンドの実行 をご覧ください。
コマンドリザルトを報告する
最後に、Thing はコマンドの実行結果として、各アクションを実行した結果を Thing Interaction Framework に報告します。
今回の場合、エアコンはリクエストされたアクション(電源オン、設定温度を摂氏 25 度にセット、ファン速度を 5 にセット)の実行が成功したかどうかを報告します。
Thing 側でのコマンドリザルト(アクションリザルト)報告の実装方法は アクションリザルト をご覧ください。
ステップ 5:Thing のステートを参照する
Thing は Thing Interaction Framework に記録されたステートを参照できます。また、正しいオーナーがログインしている場合はモバイルアプリからもステートの参照ができます。
今回の IoT サンプルシナリオの場合は、エアコンの現在の設定値や観測値を Thing やモバイルアプリより参照できます。
モバイルアプリ側でのステート参照の実装方法はこちら(Android、iOS、JavaScript) をご覧ください。
ステップ 6:コマンドリザルトを閲覧する
コマンドリザルトが Thing よりアップロードされると、Thing Interaction Framework はコマンド ID とともにこの事実をモバイルアプリに通知します。モバイルアプリは、この ID で問い合わせを行うことでコマンドリザルトを閲覧できます。
モバイルアプリ側でのコマンドリザルト閲覧の実装方法はこちら(Android、iOS、JavaScript)をご覧ください。
ステップ 7:トリガーをセットする
モバイルアプリよりトリガーをセットすることで、指定した条件が満たされたタイミングでのコマンド自動実行ができます。機能の詳細は トリガーによる自動実行) をご覧ください。
今回の IoT シナリオの場合、「ステートの温度フィールド摂氏 30 度以上」という条件を満たすとき「電源をオン」というコマンドを発行するようにトリガーを設定して登録します。
モバイルアプリ側でのトリガー設定の実装方法はこちら(Android、iOS、JavaScript)をご覧ください。