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() //結束連接 }) } })
浙公網安備 33010602011771號