天天看點

裝置使用HTTPS協定接入IoT物聯網平台裝置基于HTTPS協定接入IoT平台

裝置基于HTTPS協定接入IoT平台

裝置基于HTTPS協定接入IoT平台僅華東2支援

官網文檔 

https://help.aliyun.com/document_detail/58034.html

1.裝置身份認證:通過三元組擷取token

HTTPS伺服器位址為

https://iot-as-http.cn-shanghai.aliyuncs.com

/>

裝置使用HTTPS協定接入IoT物聯網平台裝置基于HTTPS協定接入IoT平台
裝置使用HTTPS協定接入IoT物聯網平台裝置基于HTTPS協定接入IoT平台

認證請求示例:

POST /auth HTTP/1.1
Host: iot-as-http.cn-shanghai.aliyuncs.com
Content-Type: application/json
body: {
    "version": "default",
    "clientId": "mylight1000002",
    "signmethod": "hmacsha1",
    "sign": "4870141D4067227128CBB4377906C3731CAC221C",
    "productKey": "ZG1EvTEa7NN",
    "deviceName": "NlwaSPXsCpTQuh8FxBGH",
    "timestamp": "1501668289957"
}           

傳回示例:

{
  "code": 0,//業務狀态碼
  "message": "success",//業務資訊
  "info": {
    "token":  "6944e5bfb92e4d4ea3918d1eda3942f6"
  }
}           

2.裝置資料上報

https://iot-as-http.cn-shanghai.aliyuncs.com/topic/

${topic}

裝置使用HTTPS協定接入IoT物聯網平台裝置基于HTTPS協定接入IoT平台

請求示例:

POST /topic/a1GFjLP3xxC/device123/pub
Host: iot-as-http.cn-shanghai.aliyuncs.com
password:${token}
Content-Type: application/octet-stream
body: ${your_data}           

傳回示例

{
  "code": 0,//業務狀态碼
  "message": "success",//業務資訊
  "info": {
    "messageId": 892687627916247040
  }
}           

3.實戰案例Nodejs版

3.1 建立進階版産品

裝置使用HTTPS協定接入IoT物聯網平台裝置基于HTTPS協定接入IoT平台

3.2 功能定義

添加産品屬性定義

屬性名 辨別符 資料類型 範圍
溫度 temperature float -50~100
濕度 humidity 0~100
裝置使用HTTPS協定接入IoT物聯網平台裝置基于HTTPS協定接入IoT平台

3.3 裝置管理>注冊裝置,獲得身份三元組

裝置使用HTTPS協定接入IoT物聯網平台裝置基于HTTPS協定接入IoT平台

3.4 裝置模拟代碼

var rp = require('request-promise');
const crypto = require('crypto');

const deviceConfig = {
    productKey: "替換productKey",
    deviceName: "替換deviceName",
    deviceSecret: "替換deviceSecret"
}

const topic = `/sys/${deviceConfig.productKey}/${deviceConfig.deviceName}/thing/event/property/post`;

//1.擷取身份token
rp(getAuthOptions(deviceConfig))
    .then(function(parsedBody) {
        console.log('Auth Info :'+JSON.stringify(parsedBody))
        //2.釋出物模型資料
        pubData(topic, parsedBody.info.token, getPostData())
    })
    .catch(function(err) {
        console.log('Auth err :'+JSON.stringify(err))
    });

//生成Auth認證的參數
function getAuthOptions(deviceConfig) {

    const params = {
        productKey: deviceConfig.productKey,
        deviceName: deviceConfig.deviceName,
        timestamp: Date.now(),
        clientId: Math.random().toString(36).substr(2),
    }

    //1.生成clientId,username,password
    var password = signHmacSha1(params, deviceConfig.deviceSecret);

    var options = {
        method: 'POST',
        uri: 'https://iot-as-http.cn-shanghai.aliyuncs.com/auth',
        body: {
            "version": "default",
            "clientId": params.clientId,
            "signmethod": "hmacsha1",
            "sign": password,
            "productKey": deviceConfig.productKey,
            "deviceName": deviceConfig.deviceName,
            "timestamp": params.timestamp
        },
        json: true
    };

    return options;
}

//publish Data to IoT
function pubData(topic, token, data) {

    const options = {
        method: 'POST',
        uri: 'https://iot-as-http.cn-shanghai.aliyuncs.com/topic' + topic,
        body: data,
        headers: {
            password: token,
            'Content-Type': 'application/octet-stream'
        }
    }

    rp(options)
        .then(function(parsedBody) {
            console.log('publish success :' + parsedBody)
        })
        .catch(function(err) {
            console.log('publish err ' + JSON.stringify(err))
        });

}
//模拟物模型資料
function getPostData() {
    var payloadJson = {
        id: Date.now(),
        params: {
            humidity: Math.floor((Math.random() * 20) + 60),
            temperature: Math.floor((Math.random() * 20) + 10)
        },
        method: "thing.event.property.post"
    }

    console.log("===postData\n topic=" + topic)
    console.log(payloadJson)

    return JSON.stringify(payloadJson);
}
//HmacSha1 sign
function signHmacSha1(params, deviceSecret) {

    let keys = Object.keys(params).sort();
    // 按字典序排序
    keys = keys.sort();
    const list = [];
    keys.map((key) => {
        list.push(`${key}${params[key]}`);
    });
    const contentStr = list.join('');
    return crypto.createHmac('sha1', deviceSecret).update(contentStr).digest('hex');
}           

3.5 運作效果

裝置使用HTTPS協定接入IoT物聯網平台裝置基于HTTPS協定接入IoT平台

IoT物聯網技術

裝置使用HTTPS協定接入IoT物聯網平台裝置基于HTTPS協定接入IoT平台

繼續閱讀