2014-04-07 3 views
1

라즈베리 파이에 문 센서가 연결되어 있습니다. 문이 열려 있는지 확인하려면 아래 스크립트가 2 초 간격으로 실행됩니다. 열려 있으면 외부 API 서버에 POST 요청이 만들어집니다.NodeJS 이벤트 루프 및 이벤트 수신

이 잘 작동하지만, 목표는 도어가 열리고 있던이이 을 열 때 얼마나의 정보를 포함하는 POST 요청을하는 것입니다. 내 첫 번째 생각은 노드 이벤트 & 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

필요한 것을 저장하고 보내주십시오. 또는 서버에 변경 사항을 기록 하시겠습니까? – Mosho

+0

죄송합니다. '필요한 것을 저장 하시겠습니까?'라는게 무엇을 의미합니까? – Anconia

답변

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 년에 한번의 배수가 될 것 같군요.

+0

'open (typeof open ==='undefined ') {open = Date.now();}'가 열린 때마다 재설정되는 것을 방지하는'open' 변수의 인스턴스에서'if (typeof open ==='undefined ') 코드 반복 – Anconia