当前位置: 代码网 > it编程>编程语言>C/C++ > 阿里云物联网对接指导文档

阿里云物联网对接指导文档

2024年08月02日 C/C++ 我要评论
阿里云物联网平台是一个集成了设备管理、数据安全通信和消息订阅等能力的一体化平台。向下支持连接海量设备,采集设备数据上云;向上提供云端API,服务端可通过调用云端API将指令下发至设备端,实现远程控制。物联网平台与设备、服务端、客户端的消息通信流程如下。上行通信设备通过MQTT协议与物联网平台建立连接,上报数据到平台;平台通过AMQP将数据流转到客户的服务器。下行通信:通过业务应用下发指令,使业务服务器调用基于HTTPS协议的API接口Pub,给Topic发送指令,将数据发送到物联网平台;

1.平台介绍

阿里云物联网平台是一个集成了设备管理、数据安全通信和消息订阅等能力的一体化平台。向下支持连接海量设备,采集设备数据上云;向上提供云端api,服务端可通过调用云端api将指令下发至设备端,实现远程控制。

物联网平台与设备、服务端、客户端的消息通信流程如下。

数据通信说明:

上行通信设备通过mqtt协议与物联网平台建立连接,上报数据到平台;平台通过amqp将数据流转到客户的服务器。

下行通信:通过业务应用下发指令,使业务服务器调用基于https协议的api接口pub,给topic发送指令,将数据发送到物联网平台;平台通过mqtt协议,推送数据到设备端。

2.基本概念介绍

实例、产品和设备类型、认证方式、物模型相关概念详见阿里云官方文档。

阿里云物联网平台的基本概念_物联网平台(iot)-阿里云帮助中心

阿里云物联网平台常见的认证方式分为一机一密一型一密,具体可参考下图。

图1 一机一密

图2 一型一密

3.对接阿里云物联网流程

本章主要介绍物联网平台的基础能力,包括设备上云、设备上报消息、云端订阅设备消息、云端下发指令到设备等。主要分为以下几个步骤:

  • 创建产品与设备
  • 为产品定义物模型
  • 接入云平台
  • 创建产品与设备

创建产品和设备的前提是创建实例,目前个人账户可以免费创建一个公共实例,创建后界面如下。

点击进入公共实例,左侧的设备管理中可以看到产品和设备两个条目,在左侧导航栏选择设备管理 > 产品,单击创建产品

产品具体的参数选择和范围设置详情可参见阿里云官方文档

如何在物联网平台创建产品_物联网平台(iot)-阿里云帮助中心

创建产品后在左侧导航栏,选择设备管理 > 产品,在产品列表中,单击产品对应的查看,进入产品详情页。单击相应页签,查看产品信息、topic类列表,设置自定义topic、功能定义(物模型)、数据解析脚本、服务端订阅等。

产品是设备的集合,通常指一组具有相同功能的设备。创建产品完成后,需在产品下添加设备,获取设备证书。创建产品同样在左侧导航栏,选择设备管理 > 设备。在设备页面,单击添加设备。在添加设备对话框中,输入设备信息,单击确认。

  • 为产品定义物模型

物模型是阿里云物联网平台为产品定义的数据模型,用于描述产品的功能。主要分为属性(property,一般用于描述设备运行时的状态)、服务(service,设备可被外部调用的能力或方法)、事件(event,设备运行时的事件)三种类型。物模型是产品的概念,定义后该产品下所有设备共享物模型的定义内容,在产品详情页—功能定义—编辑草稿,可以自定义物模型属性也可选择现有模型,配置完成后选择发布生效。

接入云平台

接入云平台的方式可以用模组现有的功能模块连接,也可以通过集成阿里云官方提供的sdk来对接云平台,两种方式均支持mqtt与http协议连接。

  • 利用模组现有功能接入云平台

    • mqtt接入

首先介绍如何利用现有模组的mqtt功能连接阿里云平台,连接mqtt服务器至少需要五个参数,分别是客户端id、用户名、密码、服务器地址与端口号。如果使用一机一密的方式连接,则上述五个参数可以直接在对应设备详情页查看;若使用一型一密的方式连接(前提是在产品详情页开启动态注册功能),服务器地址与端口号不变,前三个参数需要构造,具体构造方法如下图。

图3 动态注册获取mqtt连接参数

由图可知,连接流程主要分为两个步骤,第一步建立动态注册连接获取到devicesecret相关参数,第二步是通过获取到的devicesecret相关参数构造mqtt连接参数接入云平台。

获取devicesecret

第一步的连接参数构造如下:

mqttclientid: clientid+"|securemode=-2,authtype=xxxx,random=xxxx,signmethod=xxxx,instanceid=xxxx|"

mqttusername: devicename+"&"+productkey

mqttpassword: sign_hmac(productsecret,content) 

对于mqttclientid,其中clientid为自定义字符串,控制在64个字符以内;securemode为一型一密的安全模式,预注册取值为2,免预注册取-2;authtype为一型一密认证方式,register:一型一密预注册认证方式,返回devicesecret,regnwl:一型一密免预注册认证方式,返回devicetoken、clientid;random为自定义随机数;signmethod签名算法,目前支持hmacmd5、hmacsha1、hmacsha256;instanceid实例id,请登录物联网平台控制台,在实例概览页面查看。

示例:

mqttclientid:ailink|securemode=2,authtype=register,random=789,signmethod=hmacsha1,instanceid=

iot-06z00ez08936hvm|

对于mqttusername,devicename和productkey均可从设备详情页获取。

示例:mqttusername: hello&ggryceboq8u

对于mqttpassword,productsecret可在产品详情页获取,而content的值是提交给服务器的必需参数和值(devicename、productkey、random)按照字母顺序排序、拼接(无拼接符号)的字符串,其中random与mqttclient中配置保持一致。然后,将content的值通过mqttclientid中的signmethod指定的算法,进行签名计算,可利用在线校验计算出mqttpassword。在线计算工具链接https://1024tools.com/hmac

示例:hmac_sha1(rhkkj6k6bhlhyuw7, devicenamedevice1productkeyxxxrandom789)

根据上述可计算出mqttpassword,并配置ca证书,下载路径见

使用tls加密设备和物联网平台的mqtt通信_物联网平台(iot)-阿里云帮助中心,配置完成后利用模组现有的at^aimqttcfg命令分别配置clientid、username和password,再利用at^aimqttopen连接云平台,连接成功后云平台会向topic为/ext/register主动推送如下格式的数据

{

  "productkey" : "xxx",

  "devicename" : "xxx",

  "devicesecret" : "xxxxxx"

}

获取mqtt连接云平台的必要参数

记录第一步获取到的devicesecret,来进行第二步的mqtt连接参数的构造,格式如下:

mqttclientid: clientid+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|"

mqttusername: devicename+"&"+productkey

mqttpassword: sign_hmac(devicesecret,content)

对于mqttclientid,其中clientid为自定义字符串,控制在64个字符以内;securemode表示目前安全模式,可选值有2(tls直连模式)和3(tcp直连模式),目前阿里云已不支持非加密,所以此项只能取2;signmethod签名算法,目前支持hmacmd5、hmacsha1、hmacsha256;timestamp为时间戳,可以省略。

示例:mqttclientid:ailink|securemode=2,signmethod=hmacsha1|

对于mqttusername,同第一步。

示例:mqttusername: device1&ggryrtlgswt

对于mqttpassword,devicesecret即第一步连接获取值,而content的值是提交给服务器的必需参数和值(clientid,devicename、productkey)按照字母顺序排序、拼接(无拼接符号)的字符串,其中clientid与mattclientid中配置保持一致。然后,将content的值通过mqttclientid中的signmethod指定的算法,进行签名计算,可利用在线校验计算出mqttpassword。

示例:hmac_sha1("devicesecret", clientidailinkdevicenamedevice1productkeyxxx)

利用上述操作可获取到mqttpassword,至此,我们已经获取到mqtt连接云平台需要的所有必须参数,利用现有的at命令即可完成配置、连接、订阅、发布等操作。

  • http接入

http接入与mqtt类似也分为两步,第一步获取token,第二步利用获取到的token连接云平台通信。获取token的前提是获取到设备的devicesecret。同理若通过一机一密方式则在设备详情页可以直接查看,若通过一型一密方式则需先获取设备devicesecret。

http获取devicesecret,构造请求格式如下:

post /auth/register/device  http/1.1

host: iot-auth.cn-shanghai.aliyuncs.com

content-type: application/x-www-form-urlencoded

content-length: 123

productkey=xxx&devicename=xxx&random=xxx&sign=xxx&signmethod=hmacmd5

其中productkey和devicename可通过设备详情页获取;random为自定义随机数;signmethod为签名方法,目前支持hmacmd5、hmacsha1、hmacsha256;sign类似上文中mqttpassword的构造,通过signmethod中指定的方法利用productsecret和content(包括productkey、devicename、random,构造格式同mqtt配置)计算。请求成功收到如下格式数据:

{

  "code": 200,

  "data": {

    "productkey": "xxx",

    "devicename": "xxx",

    "devicesecret": "xxxxxx"

  },

  "message": "success"

}

获取token

记录下上文获取到的devicesecret为获取token,构造post请求数据格式如下:

post /auth http/1.1

host: ${yourendpoint}

content-type: application/json

content-length: 192

body: {"version":"default","clientid":"xxx","signmethod":"hmacsha1","sign":"xxxxxxx","productkey":"zg1evte****","devicename":"device1","timestamp":"1501668289957"}

host可在实例详情页面右上角查看开发配置获取,body构造,clientid同mqtt配置,signmethod算法类型,支持hmacmd5和hmacsha1,若不传入默认为hmacmd5;sign类似上文中mqttpassword的构造,通过signmethod中指定的方法利用devicesecret和content(包括productkey、devicename、clientid,构造格式同mqtt)计算;productkey和devicename在设备详情页获取;timestamp为时间戳,可不传入。若认证成功可获取到如下格式返回数据

{

          "code": 0,

          "message": "success",

          "info": {

          "token":  "6944e5bfb92e4d4ea3918d1eda39****"

          }

}

上报数据

上报数据格式如下:

post /topic/${topic} http/1.1

host: ${yourendpoint}

password:${token}

content-type: application/octet-stream

content-length: 53

body: ${mqtmqttt物联网your_data}

topic为/${yourproductkey}/${yourdevicename}/pub,假设当前设备名称为device1,产品的productkey为xxx,那么您可以调用

https://iot-as-http.cn-shanghai.aliyuncs.com/topic/xxx/device1/pub地址来上报数据

  • 集成sdk接入云平台

详见阿里云官方文档中mqtt与http接入示例

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com