こんにちは。ニフティクラウドでエンジニアをしている竹内です。
2016年10月25日にリリースされた新機能「ニフティクラウド Data Visualizer(β)」は、IoTデバイスや業務システムなどから生み出されるビッグデータを「見える化」し、アクションの「自動化」につなげるクラウド型BI(Business Intelligence)ツールです。
今回はこのData Visualizer(β)を利用し、IoTデバイスハブ + RDBで蓄積した自分の部屋の温度をグラフとして可視化してみました!
前回のサーバー不要! タイマー+スクリプトで定期処理を自動化 | ニフティクラウドブログと同じく、今回も一切サーバーを構築・運用することなく、データを描画するところまでできましたのでご紹介させていただきます!
こんな感じです
結果からお見せするとこんな感じになりました。6月~11月くらいまでの僕の部屋の温度の移り変わりを可視化することができました。上が温度で下が湿度になります。 (これだけだと地味すぎてなんのことやらという感じですが、温度だけでなくお客様がお持ちの任意のデータを可視化することができます!)
裏側の仕組みとしては、下記のようになっています。
- 自宅に置いたデバイスがIoTデバイスハブのSmart Module for RDBへとイベントを送信します。
- Smart Module for RDBが自動的にニフティクラウド RDBのDBサーバーへデータを蓄積します。
- Data Visualizer(β)を利用し、DBサーバーに蓄積されたデータを非常にカンタンに可視化することができます。
IoTデバイスハブ + RDB側の設定
IoTデバイスハブ + RDBの設定については、下記を参考に適宜行いました。 クラウドユーザーガイド(IoTデバイスハブ:RDBスマートモジュールを利用する) | ニフティクラウド
下記がハマりポイントですが、それ以外はドキュメント通りに設定すればうまく行くはずです。
- あらかじめRDBのDBサーバーを作成しておくことがある。
- あらかじめDBサーバー側のDBファイアウォールグループで指定のIPを許可しておく必要がある。 ※IP については、クラウド技術仕様(Data Visualizer(β):クエリ) | ニフティクラウド をご参照ください。
なお、Data Visualizer(β)側でタイムゾーンを日本とした状態でデータを閲覧するために、下記も合わせて設定しておくと便利です。 MySQLエンジンでタイムゾーンをUTCから他のものに変更することは可能ですか? | ニフティクラウド
Raspberry Pi側の設定
次にRaspberry Pi側の設定を行います。今回は温湿度データを取得するためにdht11という廉価で入手しやすいセンサーを利用しました。 Raspberry PiとDHT11の接続については下記を参考にやったらうまくいきました。
Temperature monitoring with Raspberry Pi and DHT11/22 temperature and humidity sensor - Documentation - Documentation DHT11 Humidity & Temperature Sensor Module | UUGear
あとは拙作のdht11-to-modeというプログラムをRaspberry Piにデプロイしていきます(詳細はこちらをご参照ください)。
$ cd /home/pi/
$ wget https://dht11-to-mode.jp-east-2.os.cloud.nifty.com/dht11-to-mode
$ chmod a+x dht11-to-mode
次に/home/pi/.env
に設定情報を書き込みます。
MODE_ENDPOINT=http://iot-device.jp-east-1.api.cloud.nifty.com/
MODE_DEVICE_ID=${デバイス ID}
MODE_DEVICE_API_KEY=${デバイス API キー}
INTERVAL=${情報取得間隔 (秒)}
この状態で配置したバイナリを実行すると情報取得が開始されます。
$ sudo ./dht11-to-mode
2016/07/17 06:24:51 [dht11] Triggering event: {HomeId:0 Timestamp:0001-01-01 00:00:00 +0000 UTC EventType:dht11-start EventData:map[value:1] OriginDeviceId:0 OriginDeviceClass: OriginDeviceIp:}
2016/07/17 06:24:52 [dht11] Triggering event: {HomeId:0 Timestamp:0001-01-01 00:00:00 +0000 UTC EventType:dht11-temperature EventData:map[value:30] OriginDeviceId:0 OriginDeviceClass: OriginDeviceIp:}
2016/07/17 06:24:52 [dht11] Triggering event: {HomeId:0 Timestamp:0001-01-01 00:00:00 +0000 UTC EventType:dht11-humidity EventData:map[value:45] OriginDeviceId:0 OriginDeviceClass: OriginDeviceIp:}
2016/07/17 06:24:52 [dht11] Triggering event: {HomeId:0 Timestamp:0001-01-01 00:00:00 +0000 UTC EventType:dht11-retried EventData:map[value:0] OriginDeviceId:0 OriginDeviceClass: OriginDeviceIp:}
Data Visualizer(β)で可視化してみる
さて、ここまで設定するとRDBのテーブルに温湿度データが続々と溜まり続けます。 だいたい7月~10月の間に動かしてみたところ、29万件ほどのデータが溜まりました。
mysql> select count() from mytable;
+----------+
| count() |
+----------+
| 295699 |
+----------+
1 row in set (0.05 sec)
こちらのデータをData Visualizer(β)を使って可視化してみます。
まずは、適切な名前でプロジェクトを作成しましょう。
次に、上記でデータが蓄積されたRDBの接続情報を入力し、rdbmysqlという名前でデータソースを作成します。
さらに、上記のrdbmysql データソースから、どんな切り口で可視化を行いたいのかを指定するクエリを作成します。
ここでは、期間中の毎日正午の温度を取得するために下記のようなSQLを入力してみました。
select *
from mytable m, mytable_type t
where t.name = "dht11-temperature"
and m.timestamp like '%12:00:%'
and m.event_type_id = t.id;
ここまできたらあとはグラフを作成するだけです。
上記操作を行うことで、冒頭にも掲載したようなグラフが描画できるようになりました。
まとめ
IoTデバイスハブ + RDBで蓄積したデータを Data Visualizer(β)で可視化することができました。 上記の通り、デバイス以外のサーバー操作は一切行う必要がなく、非常に便利です。
今回すべての機能を紹介できませんでしたが、MySQL以外にもPostgreSQL/MongoDB/Web上のURLをデータソースとすることもでき、特定の条件にマッチした場合にアラートメールを送信するといった設定も可能です。 詳しくはクラウド技術仕様(Data Visualizer(β)) | ニフティクラウドをご参照ください。
ぜひニフティクラウド Data Visualizer(β)をお試しください!