2017-11-08 6 views
0

私はMQTTとMQTT.jsで遊んでいます。私はMQTTブローカーを実行していますが、今は複数のトピックを購読したいと思います。 1つのトピックは問題ありませんが、複数です。MQTT.js複数のサブスクリプション

私は、これら2つのトピックがあります。私は、このコードは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を得ました。

最後に、2つの変数(温度/湿度)を適切なデータで埋めたいと思います。後で2つの変数を連結し、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; 
    } 
}); 

あなたは1つのワイルドカードのサブスクリプションを使用して、それが少し簡単にすることができます。

sensor/esp8266-1/

EDITで始まるすべてのトピックにサブスクライブします

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

: は今、私たちは最終的に大敗していますあなたが聞きたいと思ったものを外してください(質問には明白ではない)

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

これは問題ではありませんが、今はRest APIの方法でこれを行います... – greenchapter

関連する問題