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() //结束连接 }) } })