コマンドとステートの設計
モバイルアプリから Thing を操作するには、コマンドやステートのデータ型を事前に定めておく必要があります。Thing Interaction Framework では、これらのデータ形式の定義を スキーマ と呼びます。
定めたスキーマは Thing Interaction Framework に登録しませんが、設計情報としてプロジェクト全体で情報共有します。
コマンドとステートは、それぞれ JSON を使って表現します。この JSON のフィールド名や値の型、その意味付けを定義したものがスキーマです。
コマンドの定義
コマンドは、アクションの配列として表現されます。各アクションはアプリケーションの仕様に合わせて独自のパラメーターを持つことができます。同時に、各アクションはアクションリザルトによって結果を得ることができます。
Hello Thing-IF では、次の2つのアクションを持っています。
turnPower
アクション電源のオンとオフを切り替えます。内部に
power
フィールドを持っており、true
とfalse
で電源のオンとオフを表します。setBrightness
アクションLED 電球の明るさを指定します。内部に
brightness
フィールドを持っており、0~100 で明るさを指定します。電源オフのコマンドでは、このアクションをコマンドに含みません。
ここでは、図のような設計を行います。特に下線の部分を明確化しておきます。アクション名、パラメーター名、パラメーターの型や値の範囲などを決め、それを設計情報とします。今回はパラメーターを単純な値としていますが、配列や JSON を値に持つこともできます。
各アクションは、その実行結果としてアクションリザルトを持ちます。モバイルアプリから実行後のコマンドを取得すると、各アクションとそれに対応するアクションリザルトの全体を取得できます。アクションリザルトの形式は Thing Interaction Framework で定義されており、図のように、成功したかどうかのフラグと、失敗時のエラーメッセージを持ちます。
今回のサンプルでは、スマート LED ライトの制御のため、これら 2 点のアクションを定義しました。実際のソリューションを構築する際は、実現したい遠隔操作やステートの内容に合わせて、独自の JSON 形式のパラメーターを定義します。JSON でアクションを表現できれば、どのような形式のコマンドでもやりとりできます。
ステートの定義
ステートは、スキーマ 1 つにつき 1 種類だけを定義できます。ステートも JSON で表現され、アプリケーションの仕様に合わせて独自の情報を持たせることができます。
Hello Thing-IF では、最後に受け取ったコマンドの内容とモーションセンサーの値をステートとして定義します。アクションと同様に、ステートは配列や JSON も値に持つことができます。
アクションと同様に、実現したいサービスの仕様に合わせて任意の形式のステートを設計できます。
スキーマの定義
最後に、コマンドとステートをスキーマとしてまとめます。さらに、定義したスキーマは、スキーマ名とスキーマバージョンを付けて識別できるようにします。
モバイルアプリからコマンドを送る場合、スキーマ名とスキーマバージョンを指定してコマンド形式を特定します。Thing では、スキーマ名とスキーマバージョンを確認し、自分がサポートする形式だけを受け付けることができます。
次は...
以上で Hello Thing-IF の機能と設計についての説明は完了です。次のページからはサンプルアプリをビルドして実際に動かす手順を説明します。
サンプルのビルド に移動してください。
より詳しく学びたい方へ
- スキーマの詳細は、スキーマ をご確認ください。