NIFTY Advent Calendar 2016の18日目の記事です。
昨日は、clutterさんのSlack × hubotで笑いをとるでした。chatbotおもしろいですよね。
じつは、去年はこんなことを書いていました。これの続きを書きたいなと考えていたのですが、新しい機能が色々でてきていますので「つなげる」のつながりでプログラミングレスでデバイスデータを表示させるところまでをやっていきたいと。
はじめに
今回は、以下のような流れで、IoTデバイスハブとRDBとData Visualizer (β)をつなげて、デバイスから上がってきたデータをグラフで確認できるようにしてみます。
プログラミングレスでここまで実現できるというところを感じていただけると思います。
IoTデバイスハブの設定
想定環境
家の温度を管理するためのアプリケーションをIoTデバイスハブで提供する想定で進めていきます。
IoTデバイスハブでアプリケーションを提供するには、アプリケーションを管理するための「プロジェクト」をはじめに作ります。今回であれば、温度アプリケーションとして「testpro」とします。その次に、温度アプリケーションが管理する単位である家が「ホーム」になります。今回であれば、家を「testhome」とします。ただ、「ホーム」と名前がついていますが、このあと出てくるデバイスを管理するためのまとまりようなものですので、家じゃないと使えないってわけではなさそうです。
家の温度を取得する製品(温度計)を「デバイス」言います。今回は「testdev」とします。複数の温度計をまとめて「デバイスクラス」と言っています。「デバイスクラス」は、まとめてデバイスを操作できる単位となりますので、例えば部屋単位やフロアとかで作っていくことになります。これは、提供するアプリケーションに依存しますので、はじめに決めるようにしてください。
提供されているデバイスをコントロールするためのアプリケーションが「アプリ」となります。今回は「testapp」とします。その「アプリ」を操作するための「ユーザ」もいます。今回は「testuser」とします。
この関係性を思いながら、設定していきましょう!!
プロジェクトの作成
はじめに、新しいプロジェクトを作成します。今回は「testpro」と設定していきます。
IoTデバイスハブを選択すると、以下のような画面が表示されます。
ここから、プロジェクトを作成していきます。「+新規」をクリックします。
プロジェクト名に「testpro」と説明に「テストプロジェクト」を入力し、ユーザアカウントの認証を選択します。
今回は、電話番号を利用して認証したいと思いますので一番上の選択します。
「保存」をクリックします。
これで、温度を管理するプロジェクトが作成できました。簡単ですよね。
登録された「testpro」プロジェクトを選択してみましょう。
登録できているのが確認できました。
続いて、デバイスの登録を行っていきます。
デバイスクラスとデバイスの作成
次に、温度を取得するためのデバイスクラスを作っていきます。
今回は、「testdev」という名前で作成していきます。
ここから、デバイスクラスを作成していきます。「+新規」をクリックします。
クラスIDに「testdev」と説明に「テストデバイス」と入力します。
「保存」をクリックします。
登録された「testdev」をクリックしてみましょう。
これで、温度をとるデバイスクラスの作成ができました。
デバイスクラスに登録するデバイスを作成していきます。
デバイスリストの「+新規」をクリックします。
「タグ」には何も入れずに、「追加」をクリックします。
これで、デバイスの作成が完了しました。
登録されたデバイスを選択することで、詳細を確認することができます。
登録したデバイスは、シミュレーターで操作することができます。
「シミュレーターの起動」をクリックしてみます。
ここから、デバイスがなくても操作したように擬似的にデータを送信することができます。
今回は、デバイスからのデータは、こちらを利用して登録していきます。
アプリケーションの作成とユーザ登録
続いて操作するアプリケーションを登録していきます。今回は、「testapp」と設定していきます。
「アプリ」を選択して、「+新規」をクリックします。
アプリIDに「testapp」、説明に「テストアプリケーション」と設定します。
「保存」をクリックします。
そうすると、「testapp」アプリケーションが登録されます。
登録されているか、「testapp」をクリックしてみましょう。
先ほど登録された内容が確認できます。
登録したアプリケーションは、シミュレーターで動作させることができます。
「シミュレーターの起動」をクリックします。そうすると、アプリのシミュレーターが起動されます。
ここから、ユーザ登録を行っていきます。
「新規ユーザの登録」をクリックします。
起動したアプリケーションから、ユーザ登録を行っていきます。
「apptestuser」と設定し、認証を行うための電話番号を設定します。電話番号は「+81」で開始して、はじめの「0」を省いた携帯番号を指定し、「登録」をクリックします。
うまく認証が進みますと指定した電話にSNSが到着します。
電話番号に受信した認証コードを設定して、「送信」ボタンをクリックします。
うまく登録されたことが確認できます。
続いて、アプリケーションから管理するためのホームを登録していきます。「testhome」と設定していきます。
「+新規」をクリックします。
ホーム名に「testhome」を設定し、「追加」ボタンをクリックします。
先ほど登録した「testhome」が表示されています。
続いて、作成したホームにデバイスを登録していきます。
デバイスの登録
作成した、ホームにデバイスを登録していきます。
はじめに、左メニューの「デバイス」を選択します。
「testdev」をクリックします。
登録されているデバイスリストからデバイスを選択します。
画面では、デバイスID「1341」をクリックします。
選択したデバイスのクレームコードを覚えておきます。
再び、左メニューから「アプリ」をクリックします。
「シミュレーターの起動」をクリックします。
アプリシミュレーターから「デバイス」をクリックします。
「新規」をクリックします。
クレームコードに、先ほど調べておいたデバイスのクレームコードを入力します。
「追加」ボタンをクリックします。
ホームに、デバイスが登録されました。
以上でIoTデバイスハブの準備ができました。
これから、IoTデバイスハブのデータを格納するRDBの準備を行います。
RDBの設定
設定概要
登録されたデータをData Visualizer (β)で表示させるためには、RDBにデータを登録する必要があります。
RDBにデータを登録するためには、スマートモジュールを使っていきます。
スマートモジュールで作成するRDBを以下のように設定していきます。
RDBの作成
はじめにRDBを作成します。
ビックメニューから「RDB」を選択します。
「DBサーバー作成」をクリックします。
連携するためのDBの種類を選択します。今回は、MySQL 5.5.41を選択します。
このRDBを選択する際に、MySQL 5.7.15だと動作しませんのでご注意ください。
「基本設定へ」をクリックします。
データベース名に「testdbsv」、ゾーン、DBサーバータイプ、ディスクタイプ、ディスク容量はお好みのものを選択してください。
今回は接続させるのみですので、冗長構成もとらず、プライベートLAN、DBファイヤーウォール、DBパラメーターグループもデフォルトにしました。
「DB設定へ」をクリックします。
データベース名に「testdb」と設定し、マスターユーザ名に「testuser」、パスワードを任意に、ポートはデフォルトの「3306」を設定します。
「オプション設定へ」をクリックします。
オプションは、デフォルトのままで設定します。
「確認」をクリックします。
設定された内容に問題がないかを確認して、「作成する」をクリックします。
しばらく待つと、設定したRDBが起動してきます。
以上で、RDBを作成することができました。
作成したRDBへIoTデバイスハブとData Visualizer (β)からアクセスできるように、ファイヤウォールの設定を変更します。
IoTデバイスハブからのアクセスができるように「164.70.6.0/24」とData Visualizer (β)からのアクセスができるように「164.70.21.0/24」を設定します。
CIDRで設定していますが、IPアドレスが公開されていますので、そちらを個別で設定することをおすすめします。
これでRDBの設定が終わりました。
ふたたびIoTデバイスハブの設定
これからIoTデバイスハブのデータをRDBに登録する設定を行っていきます。
RDBにデータを登録するには、スマートモジュールを作成する必要があります。
RDBスマートモジュールの作成
では、次にIoTデバイスハブにRDBスマートモジュールを登録していきます。
ふたたび、「IoTデバイスハブ」を選択し、先ほど作成した「testpro」をクリックします。
「スマートモジュール」を選択し、「+新規」をクリックします。
RDBのスマートモジュールを追加しますので、「ニフティクラウドRDB」の「+追加」をクリックします。
RDBへの接続情報を入力していきます。
モジュールIDに「rdbmod」を、説明に「RDBモジュール」を設定します。
リージョン、ゾーン、DBサーバは、先ほど作成したRDBを選択して設定します。
ユーザ名には、RDBで指定したマスターユーザ名の「testuser」を、パスワードには、RDBで指定したパスワードで任意に設定した文字列、データベースには、RDBで指定したデータベース名の「testdb」を指定してください。テーブル名には、「testtbl」を指定します。
設定が完了しましたら、「保存」をクリックします。
登録し終わると、モジュールが登録されて格納用のテーブルが作成されます。
作成されたテーブルを確認してみましょう。
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| testtbl |
| testtbl_type |
+------------------+
2 rows in set (0.01 sec)
mysql> desc testtbl;
+---------------+------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------+------+-----+---------------------+-------+
| event_type_id | bigint(20) | NO | PRI | 0 | |
| value | double | YES | | NULL | |
| timestamp | timestamp | NO | PRI | 0000-00-00 00:00:00 | |
+---------------+------------+------+-----+---------------------+-------+
3 rows in set (0.01 sec)
mysql> desc testtbl_type;
+------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(1024) | YES | MUL | NULL | |
| home_id | bigint(20) | YES | | NULL | |
| origin_device_id | bigint(20) | YES | | NULL | |
+------------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)
「testtbl」には、デバイスから上がってくるデータが格納されます。「testtbl_type」には、イベントタイプが登録されます。
動作確認
では、シミュレーターでデータを登録してみましょう。
「デバイス」を選択し、登録されている「testdev」をクリックします。
登録されているデバイスリストからデバイスを選択します。
画面では、デバイスID「1341」をクリックします。
シミュレーターを起動しますので、「シミュレーター」をクリックします。
デバイスを操作できる状態にするために、「クレームモード」をクリックします。
これにより、一定時間の操作が可能となります。
イベントタイプに「temp」を設定します。これは、デバイスから上がってくるイベントの名前になります。
イベントデータには「value」を設定し、値を「9」に設定します。
登録を行うために「イベントのトリガー」をクリックします。
イベントデータが登録されました。
登録されたデータをデータベースに接続して確認してみましょう。
mysql> select * from testtbl_type;
+----+------+---------+------------------+
| id | name | home_id | origin_device_id |
+----+------+---------+------------------+
| 1 | temp | 18 | 1341 |
+----+------+---------+------------------+
1 row in set (0.04 sec)
mysql> select * from testtbl;
+---------------+-------+---------------------+
| event_type_id | value | timestamp |
+---------------+-------+---------------------+
| 1 | 9 | 2016-12-10 00:51:25 |
| 1 | 12 | 2016-12-10 00:51:59 |
+---------------+-------+---------------------+
2 rows in set (0.01 sec)
先ほど登録されたデータが反映されていました。
この登録したデータを、Data Visualizer (β)で見れるように設定していきましょう。
Data Visualizer (β)の設定
接続するための環境設定
Data Visualizer (β)で表示するためのプロジェクトを設定します。
「Data Visualizer (β)」を選択し、「+プロジェクト追加」をクリックします。
プロジェクト名に「testdv」を設定し、メモに「テスト」を設定します。
「確認へ」をクリックします。
設定内容に問題がなければ、「作成する」をクリックします。
データを表示するためのプロジェクトが作成できました。
作成した「testdev」プロジェクトを選択し、データを取得する先のデータソースを設定します。
データソースには、前項で設定したRDBの情報を設定していきます。
データソースを選択し、「+データソースの作成」をクリックします。
データソース名には「testds」と設定し、タイプを「MySQL」を選択します。
ホストにはRDBサーバのグローバル側のIPアドレスを、ポート番号にはRDBサーバのポート番号を指定してください。
DB名にはRDBで指定したデータベース名の「testdb」を、RDBで指定したマスターユーザ名の「testuser」を、パスワードには、RDBで指定したパスワードで任意に設定した文字列、テーブル名には、「testtbl」を指定します。
入力が終わりましたら、「確認へ」をクリックします。
登録したデータに問題がなければ、「作成する」をクリックします。
獲得するデータソースが登録できました。
続いて、データを取得するクエリを設定します。
「クエリ」を選択し、「+クエリ作成」をクリックします。
クエリ名には「testq」を設定し、データソース名には、先ほど作成した「testds」を選択し、実行間隔は、「10分毎」を選択し、メモに「テスト」を設定します。
入力が終わりましたら、「クエリ設定へ」をクリックします。
クエリに、取得するクエリを設定します。
今回は、IoTデバイスハブのスマートモジュールで設定した「testtbl」テーブルからデータを取得しますので、「select * from testtbl;」と設定します。
入力が終わりましたら、「確認へ」をクリックします。
登録したデータに問題がなければ、「作成する」をクリックします。
獲得するクエリが登録できました。
登録後に正しく実施できているかを確認してみます。
「testq」の横をクリックしてチェックし、「選択したクエリ操作」から「実行」を選択します。
「実行する」にチェックをいれて、「OK」ボタンをクリックします。
「V」ボタンをクリックし、「実行結果」タブをクリックすると実行結果を確認できます。
先ほど確認したデータを確認できます。
表示するための設定
では、このデータを表示させていきます。
はじめにグラフから作っていきます。
「グラフ」を選択します。
「+グラフ作成」をクリックします。
グラフ名には「testg」を設定し、クエリ名には先ほど登録した「testq」を設定します。
タイプには「折れ線グラフ」を選択し、高さ、幅はデフォルトを設定します。
X軸を時間にしたいので「timestamp」を選択し、Y軸には「value」を選択します。
X軸の目盛りの数、Y軸の目盛りの数、凡例の表示、凡例の位置はデフォルトを設定します。
設定が終わると、表示例が下に表示されいます。
2つしかデータがないので少しへんですが、グラフを確認することができます。
「作成する」をクリックして、登録します。
せっかくなので、できたグラフをウィジェットに追加してみましょう。
「プロジェクト」を選択し、「+ウィジェット追加」をクリックします。
タイトルには「testv」を設定し、タイプには「グラフ」を選択し、グラフ名には先ほど登録した「testg」を選択します。
高さと幅はデフォルトのまま設定します。
入力が終わりましたら、「追加する」をクリックします。
表示されました。
あと、クエリーの結果をそのまま表示することもできますので、これも追加してみましょう。
タイトルには「testvq」を設定し、タイプには「クエリ」を選択し、クエリ名には先ほど登録した「testq」を選択します。
高さと幅はデフォルトのまま設定します。
入力が終わりましたら、「追加する」をクリックします。
クエリの結果が表で表示されました。
おわりに
いかがでしたでしょうか?
まったくプログラミングせずに、設定のみでIoTデバイスからのデータをグラフで表示できました。実際に利用する場合には、デバイスの管理単位やそれに合わせた表示方法なども検討する必要があります。
リアルなデータを連携した記事が、ニフティクラウド ブログのここにありますので、ご利用いただければと思っております。
次は、なにをつなげようかな・・・。
明日は、megane42さんです。