|
监控一些智能家具需要使用物联网协议:MQTT,可以使用MQTT协议监控家具的各种消息
安装依赖:npm install mqtt --save
简单Demo如下,客户端连接并订阅消息 作为手机端去订阅智能家具的主题
const mqtt = require('mqtt')
const self = this
function subDevices() {
}
//静态方法
subDevices.playDevices = function(controller, author, devices) {
self.mqttClient = mqtt.connect(mqttStr, {
'rejectUnauthorized': false,
'username': author.userId,
'password': author.token,
'clientId': `${author.userId}@ecouser/${author.resource}`,
'keepalive': 120
})
self.mqttClient.on('error', function mqttErrFunc(err) {
console.log('subscriber on error: ' + err)
})
self.mqttClient.on('reconnect', function() {
console.log('subscriber on reconnect')
})
self.mqttClient.on('connect', function connectFunc() {
console.log('subscriber on connect')
for (i = 0; i < devices.length; i++) {
self.mqttClient.subscribe(`iot/atr/+/${devices[i].aa}/${devices[i].bb}/${devices[i].cc}/+`, function(err, granted) {
if (err) console.log('subscriber subscribe fail: ' + err)
else console.log('subscriber subscribe success: ' + JSON.stringify(granted))
})
}
})
self.mqttClient.on('close', function mqttCloseFunc() {
console.log('subscriber on close')
})
self.mqttClient.on('offline', function() {
console.log('subscriber on offline')
})
self.mqttClient.on('message', function(topic, message) {
console.log(Date.now()+':'+'[recv]: ' + topic + ' [' + message + ']')
const topicAry = topic.split('/')
console.log('message____'+message)
//string转json
var Jmessage=JSON.parse(message)
console.log('message____'+Jmessage.body.data.code[0])
//过滤topic
if (topicAry[2].indexOf(controller) >= 0) {
//发送邮件,数据入库等操作
}
})
}
//断开连接
subDevices.closeDevices = function() {
self.mqttClient.end()
self.mqttClient = null
}
module.exports = subDevices
订阅成功:

当家具变动时,收到消息如下:
1569480857934:
[recv]: iot/atr/onState/6c8d0554-4567-4fe4-8c18-beb9da33403e/xtortc/K0zR/j
[{"header":{"pri":1,"tzm":480,"ts":"1569480857620"},"body":{"data":{"mode":"lift","isHasMap":1}}}]
|