EdisonでIoT Analyticsを使ってみる [edison]
前回,Intel XDK IoT Editionで温湿度センサAM2321を使ってみた.
今回は,その温湿度センサの値をIoT Analyticsへ飛ばしてみる.
IoT Analyticsがどんなものであるかとか,必要な設定は下記サイトが詳しい.
・21: Intel Edison実践編 (1) 〜 センサーデータを受け取るSaaS「IoT Analytics」
・22: Intel Edison実践編 (2) 〜 EdisonからIoT Analyticsにデータを送る
・23: Intel Edison実践編 (3) 〜 XDKで開発したプログラムからiotkit-agentにデータを送る
というわけで,上記サイトを参考に,ほぼそのままやってみる.ただ,今回は温度と湿度をIoT Analyticsに送りたいので,以下のようにコマンドを入力してやる.
あとはコードだが,前回同様,適当なProjectを作って,package.jsonとmain.jsを以下のようにしてやる.
まず,package.json
次に,main.js
これをビルドして実行すると,IoT Analyticsに10秒おきに温度と湿度を送信するようになる.
で,しばらく動かしてみたときの結果は,こんな感じ.
送信したデータをグラフにしてくれる.あと,csvのエクスポートも可能だ.
非常にお手軽に温湿度を送ることができる.
お試しあれ.
今回は,その温湿度センサの値をIoT Analyticsへ飛ばしてみる.
IoT Analyticsがどんなものであるかとか,必要な設定は下記サイトが詳しい.
・21: Intel Edison実践編 (1) 〜 センサーデータを受け取るSaaS「IoT Analytics」
・22: Intel Edison実践編 (2) 〜 EdisonからIoT Analyticsにデータを送る
・23: Intel Edison実践編 (3) 〜 XDKで開発したプログラムからiotkit-agentにデータを送る
というわけで,上記サイトを参考に,ほぼそのままやってみる.ただ,今回は温度と湿度をIoT Analyticsに送りたいので,以下のようにコマンドを入力してやる.
iotkit-admin register temperature temperature.v1.0 iotkit-admin register humidity humidity.v1.0
あとはコードだが,前回同様,適当なProjectを作って,package.jsonとmain.jsを以下のようにしてやる.
まず,package.json
{ "name": "iot_analytics_test", "description": "", "version": "0.0.0", "main": "main.js", "engines": { "node": ">=0.10.0" }, "dependencies": { "sleep": "*" } }
次に,main.js
var dgram = require('dgram');
var client = dgram.createSocket('udp4');
var udpOptions = {
host : '127.0.0.1',
port : 41234
};
function sendObservation(name, value, on){
var msg = JSON.stringify({
n: name,
v: value,
on: on
});
var sentMsg = new Buffer(msg);
console.log("Sending observation: " + sentMsg);
client.send(sentMsg, 0, sentMsg.length, udpOptions.port, udpOptions.host);
}
var mraa = require('mraa');
console.log('MRAA Version: ' + mraa.getVersion());
var sleep = require('sleep');
function crc16(buf, length)
{
var crc = 0xFFFF;
for (var j = 0; j < length; j++) {
crc ^= buf[j];
for (var i = 0; i < 8; i++) {
if (crc & 0x01) {
crc >
>
= 1;
crc ^= 0xA001;
}
else {
crc >>= 1;
}
}
}
return crc;
}
function Am2321(bus, address, bufsize) {
this.x = new mraa.I2c(bus);
this.x.address(address);
this.buff = new Buffer(bufsize);
this.wakeupSensor = function() {
this.x.writeReg(0, 0);
}
this.sendCommand = function() {
get_command = new Buffer([0x03, 0x00, 0x04]);
this.x.write(get_command);
sleep.usleep(1500);
}
this.receiveData = function() {
this.buff = this.x.read(8);
}
this.checkCrc = function() {
var crc = this.buff[6] + this.buff[7] * 256;
return crc == crc16(this.buff, 6);
}
this.checkRecieveData = function() {
return (this.buff[0] == 0x03) && (this.buff[1] == 0x04);
}
this.getHumidity = function() {
var high = this.buff[2];
var low = this.buff[3];
return (high * 256 + low) / 10;
}
this.getTemperature = function() {
var temperature = 0;
var high = this.buff[4];
var low = this.buff[5];
if (high & 0x80) {
temperature = -1 * (high & 0x7F) * 256 + low;
}
else {
temperature = high * 256 + low;
}
return temperature / 10;
}
}
var sensor = new Am2321(6, 0x5C, 8);
periodicActivity();
function periodicActivity()
{
sensor.wakeupSensor();
sensor.sendCommand();
sensor.receiveData();
if (sensor.checkCrc() == true) {
if (sensor.checkRecieveData() == true) {
var humidity = sensor.getHumidity();
var temperature = sensor.getTemperature();
console.log("%d %%, %d C", humidity, temperature);
var date = new Date();
sendObservation('humidity', humidity, date.getTime());
sendObservation('temperature', temperature, date.getTime());
}
}
setTimeout(periodicActivity,10000);
}
これをビルドして実行すると,IoT Analyticsに10秒おきに温度と湿度を送信するようになる.
で,しばらく動かしてみたときの結果は,こんな感じ.
送信したデータをグラフにしてくれる.あと,csvのエクスポートも可能だ.
非常にお手軽に温湿度を送ることができる.
お試しあれ.