nodejs连接阿里云物联网套件(mqtt)
连接方法:先HTTPS认证再连接
/* *阿里云物联网套件nodejs连接示例 *Created by 薛将军 on 2018/1/8. */ var mqtt = require('mqtt'); //mqtt var request = require('request'); //request用于https认证 var crypto = require('crypto'); //加密模块 var productKey = '物联网套件key'; //产品key var deviceName = '物联网套件设备名称'; //设备名称 var clientId = Math.random().toString(16).substr(2, 8); //自id var deviceSecret = '物联网套件设备密码'; //设备密码 var host = `mqtt://${productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883`; //阿里mqtt host var content = { productKey: productKey, deviceName: deviceName, clientId: clientId } //字典排序 function sign_hmac(ct) { var secretString = ''; for (let key of Object.keys(ct).sort()) { secretString += key + content[key]; } return secretString; } //加密 crypto.createHmac('sha1', deviceSecret).update('待加密字串').digest('hex'); var sign = crypto.createHmac('sha1', deviceSecret).update(sign_hmac(content)).digest('hex'); var url = 'https://iot-auth.cn-shanghai.aliyuncs.com/auth/devicename' var requestForm = { productKey: productKey, deviceName: deviceName, sign: sign, clientId: clientId, signmethod: 'hmacsha1' } var params = { url: url, form: requestForm } //HTTPS认证 request.post(params, function(error, response, body) { if (error) { console.log(error) } if (!error && response.statusCode == 200) { var res = JSON.parse(body) var options = { clientId: clientId, username: res.data.iotId, password: res.data.iotToken, } var client = mqtt.connect(host, options); client.on('connect', function() { console.log('MQTT服务器链接成功!') client.subscribe(`/${productKey}/${deviceName}/send_push`) }) client.on('error', function(err) { console.log(err) }) //topic client.on('message', function(topic, message) { // message is Buffer console.log('收到:' + topic + '消息:' + message.toString()) client.end() //结束连接 }) } })