プラネックスコミュニケーションズのどこでもセンサーを購入した.
どこでも環境センサーとどこでも人感センサーをひとつづつ.
まず,どこでもセンサーはセンサーの取得した値をクラウドに上げている.しかも利用料は今のところ無料である。クラウドに上げてチャートを見られるサービスはほかの商品でも見られるが,この商品の違うところはAPIを使うと自分のアプリケーションでデータを使用できること.
しかし,人感センサーは使い物にならないかな(と思う).人がいないのに数百カウントしてしまう.感度の問題と思っていたが感度を下げても改善されない.
環境センサーの方はいったん接続が途切れた時にすぐに復帰を試みるのだが,その際に温度計の取得する値が上昇する.しばらくすると値が落ちていくことからすると,自分の制御処理系の発熱も感じているとみえる。
気を付けないと使えないかも.しかもAPIもレスポンスに503ばかりがかえってくる.これは,改善を目指しているようだが作りが荒い。といっても,クラウドサービスを無料にしている関係でやむを得ないのか
var request = require('request');
var fs = require('fs')
var mongodb = require("mongodb");
var client = mongodb.MongoClient;
var url = "mongodb://username:password@localhost:27017/dbname";
var dbName = 'dbname';
var colName = 'dokodemosensors';
var getDatum = function(uri, mac, token) {
var options = {
url: uri,
method: 'GET'
}
//リクエスト送信
request(options, function (error, response, body) {
//コールバックで色々な処理
console.log(body);
console.log(mac);
var json = null;
try {
if (response.statusCode == 200) {
json = JSON.parse(body);
writeDataSafe(json, mac);
} else {
}
}
catch (e)
{
console.log('error');
}
});
};
var CheckIn = function(mac, token) {
client.connect(url, (error, db) => {
var col = db.db(dbName).collection(colName);
col.find({'mac': mac}, { sort: { date: -1 }, skip: 0, limit: 1 })
.toArray()
.then((docs) => {
var date = new Date();
date.setDate(date.getDate() - 31);
if (docs.length > 0) {
date = docs[0].date;
}
date.setHours(date.getHours() - 9);
dateto = new Date(date)
dateto.setDate(dateto.getDate() + 31);
var dateStr = date.getFullYear() + "-"
+ ('0' + (date.getMonth() + 1)).slice(-2) + "-"
+ ('0' + date.getDate()).slice(-2) + " "
+ ('0' + date.getHours()).slice(-2) + ":"
+ ('0' + date.getMinutes()).slice(-2) + ":"
+ ('0' + date.getSeconds()).slice(-2);
var dateStrTo = dateto.getFullYear() + "-"
+ ('0' + (dateto.getMonth() + 1)).slice(-2) + "-"
+ ('0' + dateto.getDate()).slice(-2) + " "
+ ('0' + dateto.getHours()).slice(-2) + ":"
+ ('0' + dateto.getMinutes()).slice(-2) + ":"
+ ('0' + dateto.getSeconds()).slice(-2);
var uri = 'api' + '?type="WS-USB01-THP"&mac="' + mac + '"&from="'
+ dateStr
+ '"&to="'
+ dateStrTo
+ '"&token="' + token + '"'
console.log(uri);
getDatum(uri, mac, token)
})
.catch((err) => {
console.log(err);
console.log('error');
})
.then(() => {
db.close();
});
});
}
var writeDataSafe = function(json, mac) {
for (var i = 0; i < json.length; i++) {
var dt = new Date(Date.parse(json[i][0] + ' GMT'));
json[i][0] = dt;
json[i][1] = parseFloat(json[i][1])
json[i][2] = parseFloat(json[i][2])
json[i][3] = parseFloat(json[i][3])
}
var jsons = [];
for (var i = 0; i < json.length; i++) {
item = {'date': json[i][0], 'temperature': json[i][1], 'humidity': json[i][2], 'atomospheric pressure': json[i][3], 'mac': mac};
jsons.push(item);
}
client.connect(url, (error, db) => {
var col = db.db(dbName).collection(colName);
if (jsons.length > 0) {
for (var i = 0; i < jsons.length; i++) {
col.update({"date": jsons[i].date, 'mac': jsons[i].mac},
jsons[i],
{'upsert': true}, function(error, result) {
this.db.close();
}.bind({'db': db}));
}
setTimeout(function() {
this.db.close();
console.log('timeout');
}.bind({'db': db}), 30000);
}
});
}
CheckIn('mac', 'token')
setInterval(function () {
CheckIn('mac', 'token')
}, 210000);