我有一个门传感器连接到Raspberry Pi。要检查门是否已打开,以下脚本将以2秒的间隔运行。如果已打开,则会向外部API服务器发出POST请求。
这很有效,但目标是发出一个POST请求,其中包含打开门的时间以及 打开时的信息。我的第一个想法是使用Node Events& EventEmitter功能,但我不确定这个的实现。
var rest = require('restler');
var gpio = require('pi-gpio');
setInterval(function(){
gpio.read(16, function(err, value) { // sensor is attached to pin 16
if(err) throw err;
if(value === 1){ // If closed, the value is 0
console.log("Door Opened");
rest.post('http://192.168.6.109:3000/door/save', {
data: {
door: 'Open'
}
}).on('complete', function(data, response){
console.log('door status code: ' + response.statusCode);
});
}
});
},2000);
答案 0 :(得分:0)
您需要两件事:时间戳和打开和关闭事件之间经过的时间。然后,您可以将信息发送到服务器。这样的事情可以奏效:
var rest = require('restler');
var gpio = require('pi-gpio');
var open;
setInterval(function(){
gpio.read(16, function(err, value) { // sensor is attached to pin
if(err) throw err;
if(value == '1'){ // If closed, the value is '0'
console.log("Door Opened");
open = Date.now ();
}else{
//"0" is assumed
console.log("Door Closed");
//Check whether the door was opened
if (open){
var elapsed = Date.now () - open;
rest.post('http://192.168.6.109:3000/door/save', {
data: {
door: 'Open',
openTime: open,
elapsedTime: elapsed
}
}).on('complete', function(data, response){
console.log('door status code: ' + response.statusCode);
});
open = null;
}
}
});
},2000);
但我担心经过的时间总是2000的倍数。尽量减少间隔时间。