• 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() //结束连接
            })
        }
    })
  • 相关阅读:
    操作系统设计与实现 读笔(2)
    操作系统设计与实现 读笔(1)
    C++历史及优点
    套接字Socket——TCP、UDP通信
    Unix环境_进程管理
    Unix环境_信号处理机制
    排序算法汇总
    TCP/IP体系结构
    数据库模式——三级模式两级映像
    杨辉三角形的递归实现
  • 原文地址:https://www.cnblogs.com/xuejiangjun/p/8250020.html
Copyright © 2020-2023  润新知