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() //結束連接
        })
    }
})

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM