인프런 커뮤니티 질문&답변

이학준님의 프로필 이미지
이학준

작성한 질문수

MQTT 사물인터넷 통신 프로젝트 (Arduino, MQTT, Node.js, mongoDB, Android)

여러센서를 데이터 값을 받을때는 어떻게 하나요?

해결된 질문

작성

·

839

0

예를들어 온도센서를 여러군데 설치했습니다.  mosquitto에서 topic을 (tmp1, tmp2, tmp3, tmp4, tmp5 ....) 이런식으로 설정되어 있고 각각의 topic에 각각의 온도정보를 담고 있습니다.

그렇다면 Node js에서 다음 부분을 어떤식으로 수정을해서 mongodb에 저장을 해야하나요?

(예제부분을 가져온 것입니다.)

//MQTT서버 접속 및 DHT11 데이터 읽기.
var mqtt = require("mqtt");
var client =mqtt.connect("mqtt://192.168.0.10");

client.on("connect", function(){
 client.subscribe("dht11");
});

client.on("message", function(topic, message){
 var obj=JSON.parse(message);
 obj.created_at=new Date();
 console.log(obj);


 //mongodb에 DHT11 정보를 저장하는 부분.
 var dht11=dbobj.collection("dht11");
 dht11.save(obj, function(err,result){
   if(err) console.log(err);
   else console.log(JSON.stringify(result));
  });
});

답변 3

0

와 감사합니다~~~~~~~~~

이래저래 시도해보다가 혹시나 Q&A 찾아봤는데, 정확하게 해결 되었습니다.

 

센서 여러개 두고, 각 각 DB저장 및 표출이 잘 되네요 감사합니ㅏㄷ!

0

이학준님의 프로필 이미지
이학준
질문자

감사합니다. 내용을 응용해서 IOT 구축을 해보겠습니다. ^^

아! 그리고 한가지 더 궁금한 점이 있는데요. 구독자 수 만큼 모스키토를 실행해야하는데요. 자동으로 모스키토서버 및 구독자를 실행하는 방법이 없을까요? 만약 온도센서가 50개 가량 된다면 1개의 모스키토 서버 실행과 50개의 구독자를 만들어야하는데 명령프롬프트창에서 실행하는 것이 힘든 것 같아서요 ^^ 그리고 만약에 창이 실수로 꺼지게 된다면 또 50개의 구독자를 실행시켜야하는데 너무 번거로운 작업이 될 것 같습니다.

0

박매일님의 프로필 이미지
박매일
지식공유자

네 아래 처럼  topic을 (tmp1, tmp2, tmp3, tmp4, tmp5 ....) 수신자로 등록하시고...

client.on('connect', function () {
  client.subscribe('tmp1')
  client.subscribe('tmp2')
  client.subscribe('tmp3')
          ~
  ~
}) 

그리고 topic (tmp1, tmp2, tmp3, tmp4, tmp5) 이름으로 if else문을 만들어서 수신한 후
mongoDB에 각각 저장하시면 됩니다. mongoDB는 센서별로 만드셔도 될듯하고 하나의 collection에 센서 구분
필드를 만들어서 하나에 입력해도 될듯한데 그것은 알아서 하시면 되구요~~

client.on('message', function (topic, message) {
  if (topic == 'tmp1') {
  var tmp1Logs = dbObj.collection('tmp1');
  var json = JSON.parse(message.toString());
  json.device = 'arduino';
  json.sensor = 'tmp1';
  json.created_at = new Date();
  tmp1Logs.save(json, function(err, result) {});

  } else if (topic == 'tmp2') {
  var tmp2Logs = dbObj.collection('tmp2');
  var json = JSON.parse(message.toString());
  json.device = 'arduino';
  json.sensor = 'tmp2';
  json.created_at = new Date();
  tmp2Logs.save(json, function(err, result) {});
   } 계속 if else ~

 
})

원하시는 답변이 되셨으면 좋겠습니다. 그럼 성공을 기대합니다.^^

이학준님의 프로필 이미지
이학준

작성한 질문수

질문하기