どこでもセンサーを購入
プラネックスコミュニケーションズのどこでもセンサーを購入した.
どこでも環境センサーとどこでも人感センサーをひとつづつ.
まず,どこでもセンサーはセンサーの取得した値をクラウドに上げている.しかも利用料は今のところ無料である。クラウドに上げてチャートを見られるサービスはほかの商品でも見られるが,この商品の違うところは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);