设备使用 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
阿里云物联网平台客户交流群
划线
评论
复制
发布于: 刚刚阅读数: 4
阿里云AIoT
关注
物联网内容搬运者 2022-04-22 加入
还未添加个人简介










评论