写点什么

设备使用 HTTPS 协议接入 IoT 物联网平台——设备接入类

作者:阿里云AIoT
  • 2023-03-14
    浙江
  • 本文字数:2086 字

    阅读完需:约 7 分钟

设备基于 HTTPS 协议接入 IoT 平台

设备基于 HTTPS 协议接入 IoT 平台仅华东 2 支持官网文档 https://help.aliyun.com/document_detail/58034.html


1.设备身份认证:通过三元组获取 token

HTTPS 服务器地址为 https://iot-as-http.cn-shanghai.aliyuncs.com/>

image.png


image.png


认证请求示例:

POST /auth HTTP/1.1Host: iot-as-http.cn-shanghai.aliyuncs.comContent-Type: application/jsonbody: {    "version": "default",    "clientId": "mylight1000002",    "signmethod": "hmacsha1",    "sign": "4870141D4067227128CBB4377906C3731CAC221C",    "productKey": "ZG1EvTEa7NN",    "deviceName": "NlwaSPXsCpTQuh8FxBGH",    "timestamp": "1501668289957"}
复制代码

返回示例:

{  "code": 0,//业务状态码  "message": "success",//业务信息  "info": {    "token":  "6944e5bfb92e4d4ea3918d1eda3942f6"  }}
复制代码


2.设备数据上报

HTTPS 服务器地址为 https://iot-as-http.cn-shanghai.aliyuncs.com/topic/${topic}


image.png


请求示例:

POST /topic/a1GFjLP3xxC/device123/pubHost: iot-as-http.cn-shanghai.aliyuncs.compassword:${token}Content-Type: application/octet-streambody: ${your_data}
复制代码

返回示例

{  "code": 0,//业务状态码  "message": "success",//业务信息  "info": {    "messageId": 892687627916247040  }}
复制代码


3.实战案例 Nodejs 版

3.1 创建高级版产品


image.png


3.2 功能定义

添加产品属性定义


image.png


3.3 设备管理>注册设备,获得身份三元组


image.png


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.获取身份tokenrp(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 IoTfunction 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 signfunction 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 运行效果

image.png


物联网平台产品介绍详情:https://www.aliyun.com/product/iot/iot_instc_public_cn


阿里云物联网平台客户交流群

用户头像

阿里云AIoT

关注

物联网内容搬运者 2022-04-22 加入

还未添加个人简介

评论

发布
暂无评论
设备使用HTTPS协议接入IoT物联网平台——设备接入类_阿里云AIoT_InfoQ写作社区