【新機能】AWS IoTの新しい概念「Thing Types」でThingの属性を効果的に使う
こんにちは、せーのです。今日はAWS IoTの新しい機能「Thing Types」をご紹介します。こちらを使いこなすとAWS IoTのThingsやRegistryがより効率的に使えるようになります。
Thing、使ってる?
AWS IoTを使ってのデータの流れはセンサーなどがつながっているゲートウェイ側からデータをJSON方式でAWS IoTのDevice GatewayにあるTopicにMQTTSで飛ばし、そこにSubscribeしてあるThing RulesからのActionで後ろになるAWSのリソースにデータを流す、というものが主流となります。
この流れを構築するのに、実はThingを作る必要はありません。センサー側となるクライアントとAWS IoTを繋ぐには証明書さえあればOKなので、証明書を作ってしまえばThingsなしでAWS IoTとつなぎ、自分の考えたTopic名に対してデータをPublishすれば良いのです。
ではThingを作るのはどういう時でしょう。Thingが必要になるのは「Registryを使う時」と「Shadowを使う時」です。
Shadowはそのデバイスの「状態」を保管するものとして使用する、もっと砕いて言うとAWS IoT SDKやAPIを使用してデータのやり取りを行う際に使うと便利になります。逆に言えばクライアント側がAWS IoT SDKのモジュールを入れられるほどリッチではない場合はmosquitto等の通常のMQTTソリューションを使ってTopicに直接投げる、という形になるかと思います。ではRegistryはどうでしょう。これはデバイスの数が大量になった時に役に立ちます。通常IoTデバイスというのは簡単にログインできない場所やネットワーク上においてあります。どのデバイスがどこにあるどんな種類のもので証明書はいつまでなのか、というような情報はクラウドに一元管理しておくと運用上非常に便利になります。
ただこのRegistryはJSON形式で自由に書くため、フォーマットを統一するのに意外と苦労します。またそこで使うのが今回ご紹介する「Thing Types」です。
Thingの雛形をつくるThing Types
Thing Typesは文字通りデバイスのタイプを雛形として事前に作成するものです。このTypeにはそれぞれ属性(Attribute)を3つまでつけることができます。元々ThingにはAttributeが3つつけられるのでその代替という感じですね。ThingにThing Typeをつけると更にThingには合計50個までAttributeをつけることができます。
例えば上の例で言うとBicycleという名前のTypeをThingにつけると予め決めてあったBicycle用のAttribute(ex. 補助輪あり/なし、タイヤインチ、カゴ付き/カゴなし、みたいな)が自動的に付き、さらに50個まで新たなAttributeがつけられる、というわけです。
更にこのTypeで決められたAttributeは検索可能なのでデバイスを検索する時に使いそうな項目でAttributeを作ると便利ですね。
制限事項
Thing Typesに関する制限事項は以下のようになっています。
- ThingにつけられるThing Typesはひとつのみ
- ThingにThing Typesを一回つけたら変更は出来ない
- 変更できない代わりにTypesをDeprecated(非推奨)にすることが出来る
- Thing Typesを削除するには対象となるTypeをDeprecatedにしてから5分以上待たないといけない
- ひとつのアカウントにThing Typesは無限に作ることができる
やってみた
それでは早速やってみましょう。マネージメントコンソールでAWS IoTを開きます。
新しく「Create Thing Type」という項目が増えています。ここからThing Typeを作ります。
Thingと同じように名前と説明を書いたらAttributeを追加していきます。3つまで追加できます。
今回は「監視カメラ(Surveillance Camera)」というタイプを作ってみました。地域、場所、階数を属性として持ちます。これで登録すればTypeの登録は完了です。次に作ったTypeをThingに紐付けていきます。
Thingの登録画面にChoose a thing typeという項目が増えています。ここから先程作った[surveillance camera]を追加します。
Typeの属性にそれぞれ値を入れたらその他にも属性を追加することが出来ますので追加していきます。今回は秋葉原(佐久間町オフィス)、秋葉原(イトーピアオフィス)、札幌オフィスの3つ分のカメラThingを登録しました。
それぞれのThingを見てみると[used in a thing search]という項目と[Non-searchable attributes]という項目にわかれています。
名前の通りtypeで指定したAttributeは検索につかえます。実際に検索してみましょう。
Tsuyoshis-iMac:~ Tsuyoshi$ aws iot list-things --attribute-name "Area" --attribute-value "Akihabara" { "things": [ { "attributes": { "ID": "1234567890", "Area": "Akihabara", "Place": "Sakuma", "Maker": "OPTEX", "Floor": "8" }, "thingName": "CM_camera1" }, { "attributes": { "ID": "2234567890", "Area": "Akihabara", "Place": "Itopia", "Maker": "OPTEX", "Floor": "5" }, "thingName": "CM_camera2" } ] } Tsuyoshis-iMac:~ Tsuyoshi$ aws iot list-things --attribute-name "Area" --attribute-value "Sapporo" { "things": [ { "attributes": { "ID": "3234567890", "Area": "Sapporo", "Place": "BricCube", "Maker": "OPTEX", "Floor": "9" }, "thingName": "CM_camera3" } ] }
ちなみにNon-searchable Attributeは検索できません。
Tsuyoshis-iMac:~ Tsuyoshi$ aws iot list-things --attribute-name "Maker" --attribute-value "OPTEX" { "things": [] }
でもマネージメントコンソールの検索窓からは検索できたりもします。
まとめ
いかがでしたでしょうか。地味にRegistryやAttributeは使ってこなかった方も多かったのではないでしょうか。これを機会に是非デバイスには属性をつけてAWS上で管理してみてはいかがでしょうか。