NodeJS Event Loops&倾听事件

时间:2014-04-07 18:18:26

标签: javascript node.js events

我有一个门传感器连接到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);

1 个答案:

答案 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的倍数。尽量减少间隔时间。