「Windowsはゲーム専用OS」と信じている竹永です。 あっ、やめて。そんな怖い顔しないで。
前回の記事では値をセンサーから引っ張りだしました。
せっかく引っ張りだした値も、数字を見て「へー」で終わるのはおもしろくないので、
Amazon Elasticsearch Service(Amazon ES)を使ってとっとと可視化します。
つかうもの
- Amazon Elasticsearch Service
- 前の記事でつくったやつ
Amazon ESを起動する
Amazon ESの起動手順はこちらをご覧ください。
起動には10分ほどかかるので、この間にElasticsearchに値を飛ばす準備をします。
コードをいじくる
前回作ったコードをちょちょいと弄るだけで、Elasticsearchに値を格納できます。
まず、ElasticsearchとはHTTP(S)で通信するので、そのへんのライブラリを require します。
// 使うライブラリを require する
var Util = require('util');
var Async = require('async');
var SensorTag = require('sensortag');
/* ↓の行を追加 */
var Https = require('https');
次はAmazon ESにPOSTする関数を追加します。
require の下あたりに置いておけばきっと動いてくれます。
hostnameにはAmazon ESのEndpointを入力してください。
function postData(json_text) {
var https_options = {
/* ここは環境に合わせて書き換える↓ */
hostname: 'search-hogehogera-xxxxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com',
port: 443,
path: '/sensordata/sensortag/',
method: 'POST',
headers: { 'Content-Length': Buffer.byteLength(json_text) }
};
var post_req = Https.request(https_options, function(res) {
res.setEncoding('utf8');
res.on('data', function(chunk) { Util.log('Response: ' + chunk); });
});
Util.log('POST: ' + json_text);
post_req.write(json_text);
post_req.end();
}
次に、センサーが吐き出すデータに時刻情報をくっつけます。
やっぱりこういうデータは時系列で見たいですよね。
function readSensorsValue(sensorTag) {
Util.log('Reading sensors value: ' + sensorTag);
sensorData = {};
/* これ↓を追加 */
sensorData.timestamp = new Date().toISOString();
最後に、センサーの値をAmazon ESに飛ばすようなコードを追加します。
function(callback) {
// 集めたセンサーの値をコンソールに出力
Util.log(sensorData);
/* これ↓を追加 */
postData(JSON.stringify(sensorData));
あとは実行すれば値が飛んでいきます。
# node sensor.js
19 Feb 18:37:57 - discoverAll
19 Feb 18:38:26 - Discovered: {"id":"xxxxxxxxxxxx","type":"cc2650"}
19 Feb 18:38:26 - enableIrTemperature
19 Feb 18:38:26 - enableHumidity
19 Feb 18:38:38 - Reading sensors value: {"id":"xxxxxxxxxxxx","type":"cc2650"}
19 Feb 18:38:39 - { timestamp: '2016-02-19T09:38:38.969Z',
ambTemp: 27.71875,
humidity: 58.917236328125 }
19 Feb 18:38:39 - POST: {"timestamp":"2016-02-19T09:38:38.969Z","ambTemp":27.71875,"humidity":58.917236328125}
19 Feb 18:38:40 - Response: {"_index":"sensordata","_type":"sensortag","_id":"AVL45UPldmnhkxPNoD9g","_version":1,"created":true}
19 Feb 18:38:48 - Reading sensors value: {"id":"xxxxxxxxxxxx","type":"cc2650"}
19 Feb 18:38:49 - { timestamp: '2016-02-19T09:38:48.977Z',
ambTemp: 27.65625,
humidity: 58.209228515625 }
19 Feb 18:38:49 - POST: {"timestamp":"2016-02-19T09:38:48.977Z","ambTemp":27.65625,"humidity":58.209228515625}
19 Feb 18:38:50 - Response: {"_index":"sensordata","_type":"sensortag","_id":"AVL45WhYdmnhkxPNoD9h","_version":1,"created":true}
...
Kibanaで値を見る
Amazon ESにはKibanaがプリインストールされているので、可視化もすぐにできます。
Management Consoleに書いてあるKibanaのリンクをクリックしましょう。
リンクをクリックした後、Kibanaを初めて使う場合はたぶん下図のような画面がでてくるので、IndexとTime-fieldの設定をします。
今回作成したコードだと、下図のまんまで設定すれば大丈夫です。
設定が終わったらDiscoverタブで値が見えるはずです。
さらにさらに、VisualizeタブでLine chartを選び…
下図のような設定をすれば温度の履歴が見れます。
直感的に使いやすいツールではありますが、ググると他の使い方がみれて楽しいです。
おわり
以上、Amazon ESとちょっとのコード変更だけで可視化してみました。
センサー1台、温度と湿度だけ、可視化はKibanaのシンプルな構成ではありますが、可視化のおもしろさが伝われば幸いです。
この調子でいろいろなものを可視化してみてはどうでしょうか。