Nodejs——mqtt协议的使用

论坛 期权论坛 脚本     
匿名技术用户   2021-1-2 11:32   69   0

监控一些智能家具需要使用物联网协议: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}}}]

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP