2017-11-08 3 views
0

MQTT 및 MQTT.js를 가지고 놀고 있습니다. MQTT 브로커를 실행 중이고 이제 여러 주제를 등록하려고합니다. 한 가지 주제는 문제가 아니지만 여러 가지입니다.MQTT.js 복수 구독

나는이 두 항목이 : 나는이 두 항목이 코드 CONSOLE.LOG와

var mqtt = require('mqtt'); 
var client = mqtt.connect('mqtt://10.0.0.18'); 


client.subscribe('sensor/esp8266-1/humidity'); 
client.subscribe('sensor/esp8266-1/temperature'); 

client.on('message', function(topic, message, packet) { 
    console.log(packet) 
}); 

에 가입이 코드 조각

'sensor/esp8266-1/humidity' 
'sensor/esp8266-1/temperature' 

나는 것은 나에게 다음과 같은

반환
Packet { 
    cmd: 'publish', 
    retain: false, 
    qos: 0, 
    dup: false, 
    length: 35, 
    topic: 'sensor/esp8266-1/temperature', 
    payload: <Buffer 32 31 2e 32 30> } 
Packet { 
    cmd: 'publish', 
    retain: false, 
    qos: 0, 
    dup: false, 
    length: 32, 
    topic: 'sensor/esp8266-1/humidity', 
    payload: <Buffer 34 31 2e 30 30> } 

처음에는 좋았지 만 온도/습도 데이터를 어떻게 얻을 수 있습니까?

나는이

console.log(packet.payload.toString()) 

와 그것을 시도하지만 지금은 내가 무엇을 의미하는지 번호를 알고있는없이 때마다 온도와 humidty을 얻었다.

끝 부분에서 올바른 변수 값 (온도/습도)을 입력하고 싶습니다. 나중에 두 변수를 연결하여 SQL 데이터베이스에 저장하려고합니다.

+0

"코드가 기능 할 수 없다"는 것은 무엇을 의미합니까? 이 코드는 2 개의 주제를 구독합니다. 정확히 묻는 바입니다. – hardillb

+0

도큐멘트를 읽었습니까? 여러 주제를 구독하는 방법에 대해 매우 분명하며 심지어 3 가지 방법으로 제공합니다. – hardillb

+0

예.하지만 찾을 수없는 부분이 있습니다. 어디에서 찾을 수 있습니까? – greenchapter

답변

1

이러한 2 가지 값을 어떻게 사용할지 말하지 않았지만 가장 간단한 시작 방법은 다음과 같습니다.

var mqtt = require('mqtt'); 
var client = mqtt.connect('mqtt://10.0.0.18'); 

var temperature; 
var humidity; 

client.subscribe('sensor/esp8266-1/humidity'); 
client.subscribe('sensor/esp8266-1/temperature'); 

client.on('message', function(topic, message, packet) { 
    if (topic === 'sensor/esp8266-1/temperature') { 
    temperature = message; 
    } 

    if (topic === 'sensor/esp8266-1/humidity') { 
    humidity = message; 
    } 
}); 

당신은 하나의 와일드 카드 가입 사용하여 좀 더 간단 할 수 있습니다 :

client.subscribe('sensor/esp8266-1/+'); 

sensor/esp8266-1/

EDIT로 시작하는 모든 주제에 가입됩니다 이제 우리는 마지막으로 대파 한을 질문하고 싶은 것을 밖으로 내십시오. (질문에서 명확하지 않음)

client.on('message', function(topic, message, packet) { 
    if (topic === 'sensor/esp8266-1/temperature') { 
    temperature = message; 
    } 

    if (topic === 'sensor/esp8266-1/humidity') { 
    humidity = message; 
    } 

    if (temperature && humidity) { 
    //do database update or print 
    console.log("----"); 
    console.log("temp: %s", temperature); 
    console.log("----"); 
    console.log("humidity: %s", humidity); 
    //reset to undefined for next time 
    temperature = undefined; 
    humidity = undefined; 
    } 
}); 
+0

이것들은 동일한 데이터를 가진 로그 아웃을 제공합니다! – greenchapter

+0

예, 각 메시지는 별도의 이벤트이므로 한 번에 모든 데이터를 가져올 방법이 없습니다. 그것은 MQTT가 작동하는 방식이 아닙니다. – hardillb

+0

이제는 문제가되지 않습니다. 이제는 나머지 API 방식에서이 작업을 수행 할 것입니다 ... – greenchapter