CoAP连接通信

更新时间:2020-08-27 17:20:05

编辑我的收藏

本页目录

  • 基础流程
  • 使用对称加密自主接入
  • 使用DTLS自主接入

物联网平台支持CoAP协议连接通信。CoAP协议适用在资源受限的低功耗设备上,尤其是NB-IoT的设备使用。本文介绍基于CoAP协议进行设备接入的流程,及使用DTLS和对称加密两种认证方式下的自主接入流程。

基础流程

基于CoAP协议将NB-IoT设备接入物联网平台的流程如下图所示。

基础流程说明如下:

  1. 在设备端NB-IoT模块中,集成阿里云物联网平台SDK。厂商在物联网平台的控制台申请设备证书(ProductKey、DeviceName和DeviceSecret)并烧录到设备中。
  2. NB-IoT设备通过运营商的蜂窝网络进行入网。需要联系当地运营商,确保设备所属地区已经覆盖NB网络,并已具备NB-IoT入网能力。
  3. 设备入网成功后,NB设备产生的流量数据及产生的费用数据,将由运营商的M2M平台管理。此部分平台能力由运营商提供。
  4. 设备开发者可通过CoAP/UDP协议,将设备采集的实时数据上报到阿里云物联网平台,借助物联网平台,实现海量亿级设备的安全连接和数据管理能力。并且,可通过规则引擎,将数据转发至阿里云的大数据产品、云数据库、表格存储等服务中进行处理。
  5. 物联网平台提供相关的数据开放接口和消息推送服务,可将数据转发到业务服务器中,实现设备资产与实际应用的快速集成。

使用对称加密自主接入

  1. 连接CoAP服务器。Endpoint地址:

    • 华东2(上海)地域,公共实例的Endpoint地址为${YourProductKey}.coap.cn-shanghai.link.aliyuncs.com:${port}

      • ${YourProductKey}:请替换为设备所属产品的的ProductKey。可从物联网平台控制台设备详情页获取。
      • ${port}:端口。使用对称加密时端口为5682。
    • 您可以在华东2(上海)、华北2(北京)、华南1(深圳)地域购买实例。购买的实例的Endpoint地址,请在物联网平台控制台实例管理页面,单击实例对应的查看,进入实例详情页查看。
  2. 设备认证。

    设备认证请求:

    POST /auth
    Host: ${YourEndpoint}
    Port: 5682
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: {"productKey":"a1NUjcV****","deviceName":"ff1a11e7c08d4b3db2b1500d8e0e55","clientId":"a1NUjcV****&ff1a11e7c08d4b3db2b1500d8e0e55","sign":"F9FD53EE0CD010FCA40D14A9FE******", "seq":"10"}
    表 1. 设备认证参数说明
    参数 说明
    Method 请求方法,只支持POST方法。
    URL URL地址,取值:/auth。
    Host Endpoint地址。
    Port 端口,取值:5682。
    Accept 设备接收的数据编码方式。目前,支持两种方式:application/json和application/cbor。
    Content-Format 设备发送给物联网平台的上行数据的编码格式,目前,支持两种方式: application/json和application/cbor。
    payload 设备认证信息内容,JSON数据格式。具体参数,请参见下表Payload说明。
    表 2. Payload 说明
    字段名称 是否必需 说明
    productKey 设备证书信息中ProductKey的值,是物联网平台为产品颁发的全局唯一标识。可从物联网平台控制台设备详情页获取。
    deviceName 设备证书信息中DeviceName的值,在注册设备时自定义的或自动生成的设备名称。可从物联网平台控制台设备详情页获取。
    ackMode 通信模式。取值:

    • 0:request/response 是携带模式,即客户端发送请求到服务端后,服务端处理完业务,回复业务数据和ACK。
    • 1:request/response 是分离模式,即客户端发送请求到服务端后,服务端先回复一个确认ACK,然后再处理业务后,回复业务数据。

    若不传入此参数,则默认为携带模式。

    sign 签名。

    您需根据签名计算方法:signmethod(DeviceSecret,content),计算出的值作为sign的值。支持hmacmd5和hmacsha1方法。

    签名计算所需参数:

    • signmethod:签名方法,需与您的传入signmethod取值一致。
    • DeviceSecret:设备的DeviceSecret。可在物联网平台控制台,设备的设备详情页查看。
    • content:是将所有提交给服务器的参数(除version、sign、resources和signmethod外),按照英文字母升序,依次拼接排序(无拼接符号)。

      说明 用于签名计算的参数值需与设备认证请求中提交的参数值一致。

    签名计算示例:

    hmac_md5(mRPVdzSMu2nVBxzK77ERPIMxSYIv****, clientIda1NUjcV****&ff1a11e7c08d4b3db2b1500d8e0e55deviceNameff1a11e7c08d4b3db2b1500d8e0e55productKeya1NUjcV****seq10timestamp1524448722000)
    signmethod 算法类型,支持hmacmd5和hmacsha1。默认是hmacmd5。
    clientId 客户端ID,长度需在64字符内。建议使用设备的的MAC地址或SN码作为clientId的值。
    timestamp 时间戳。目前,时间戳不做时间窗口校验。

    返回结果示例:

    {"random":"ad2b3a5eb51d6****","seqOffset":1,"token":"MZ8m37hp01w1SSqoDFzo001050****.ad2b"}
    表 3. 返回参数说明
    字段名称 说明
    random 用于后续上、下行加密,组成加密Key。
    seqOffset 认证seq偏移初始值。
    token 设备认证成功后,返回的Token值。
  3. 上报数据。

    上报数据请求:

    POST /topic/${topic}
    Host: ${YourEndpoint}
    Port: 5682
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: ${your_data}
    CustomOptions: number:2088(标识token), 2089(seq)
    表 4. 上报数据参数说明
    字段名称 是否必需 说明
    Method 请求方法,只支持POST方法。
    URL 传入格式:/topic/${topic}。其中,变量${topic}需替换为设备数据上行Topic。
    Host Endpoint地址。
    Port 端口,取值:5682。
    Accept 设备接收的数据编码方式。目前,支持两种方式:application/json和application/cbor。
    Content-Format 上行数据的编码格式,服务端对此不做校验。目前,支持两种方式:application/json和application/cbor。
    payload 待上传的数据经高级加密标准(AES)加密后的数据。

    说明 AES加密时,Transform为 AES/CBC/PKCS5Padding, 初始向量IV为 543yhjy97ae7fyfg,Key由sha256算法生成。

    Key生成示例:

    假设 deviceSecret=zPwChiLh0EaifR809D5Rc6LDIC6A****,设备认证返回 random=8fe3c8d50e10****

    1. 将deviceSecret和random按照${deviceSecret},${random}格式组成以下字符串。

      zPwChiLh0EaifR809D5Rc6LDIC6A****,8fe3c8d50e10****
    2. 使用sha256对以上字符串的UTF-8编码结果进行加密,并转换为16进制字符串。
      59ea5ac1cb092e5910c405821119959e5297516d185b71e344735cf3f268****
    3. 从上一步得到的字符串的第17位开始,截取长度为32位的字符串(subString(16,48)),得到密钥。
      10c405821119959e5297516d185b71e3
    CustomOptions option值有2088和2089两种类型,说明如下:

    • 2088:表示token,取值为设备认证后返回的token值。

      说明 每次上报数据都需要携带 token信息。如果 token失效,需要重新进行设备认证,获取 token。

    • 2089:表示seq,取值需比设备认证后返回的seqOffset值更大,且在认证生效周期内不重复的随机值。建议设置为根据每次请求数据包中的seq递增值,使用上一栏所介绍的方法进行AES加密填充。

    option返回示例:

    number:2090(云端消息ID)

    token和seq除了写在options中,还可以写在URI中,例如/topic/${topic}?token=xxxx&seq=xxxxx。如果同时存在于options和URI中,以options为准。

    消息上行成功后,返回成功状态码,同时返回物联网平台生成的消息ID。

使用DTLS自主接入

  1. 连接CoAP服务器。Endpoint地址:

    • 华东2(上海)地域,公共实例的Endpoint地址为${YourProductKey}.coap.cn-shanghai.link.aliyuncs.com:${port}

      • ${YourProductKey}:请替换为设备所属产品的ProductKey。可从物联网平台控制台设备详情页获取。
      • ${port}:端口。使用DTLS时,端口为5684。
    • 您可以在华东2(上海)、华北2(北京)、华南1(深圳)地域购买实例。购买的实例的Endpoint地址,请在物联网平台控制台实例管理页面,单击实例对应的查看,进入实例详情页查看。
  2. 如果您使用我们提供的设备端SDK,则DTLS安全通道默认使用PSK加密算法。如果您未使用我们提供的设备端SDK,则需要 下载DTLS安全通道根证书,自行使用DTLS库连接物联网平台,PSK对应的加密方式如下:
    psk_id: "${authType}" + "|" + "${signMethod}" + "|" + "${productKey}" + "&" + "${deviceName}" + "timestamp"
    psk: signMethod(DeviceSecret, "${productKey}" + "&" + "${deviceName}" + "${timestamp}")
    表 5. 字段说明
    字段 是否必需 说明
    authType 认证类型,这里设为固定值:devicename。
    signMethod 算法类型,支持hmacmd5、hmacsha1、hmacsha256。
    productKey 设备所属产品的ProductKey。
    deviceName 设备名称,DeviceName。
    DeviceSecret 设备的DeviceSecret
    timestamp 时间戳。
  3. 设备认证。使用auth接口认证设备,获取Token。上报数据时,需携带Token信息。

    设备认证请求:

    POST /auth
    Host: ${YourEndpoint}
    Port: 5684
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: {"productKey":"ZG1EvTE****","deviceName":"NlwaSPXsCpTQuh8FxBGH","clientId":"mylight1000002","sign":"bccb3d2618afe74b3eab12b94042****"}

    除 Port参数外,其他参数及Payload内容说明,可参见使用对称加密自主接入。

    返回结果示例:

    response:{"token":"f13102810756432e85dfd351eeb4****"}
    表 6. 返回码说明
    Code 描述 Payload 备注
    2.05 Content 认证通过:Token对象 正确请求。
    4.00 Bad Request no payload 请求发送的Payload非法。
    4.01 Unauthorized no payload 未授权的请求。
    4.03 Forbidden no payload 禁止的请求。
    4.04 Not Found no payload 请求的路径不存在。
    4.05 Method Not Allowed no payload 请求方法不是指定值。
    4.06 Not Acceptable no payload Accept不是指定的类型。
    4.15 Unsupported Content-Format no payload 请求的content不是指定类型。
    5.00 Internal Server Error no payload auth服务器超时或错误。
  4. 上行数据。

    设备发送数据到某个Topic。

    自定义Topic,在物联网平台的控制台,设备所属产品的产品详情页的Topic类列表栏中进行创建。

    目前,只支持发布权限的Topic用于数据上报,如/${YourProductKey}/${YourDeviceName}/pub。假设当前设备名称为device,所属产品的ProductKey为a1GFjLP****,那么您可以调用 a1GFjLP****.coap.cn-shanghai.link.aliyuncs.com:5684/topic/a1GFjLP****/device/pub 地址来上报数据。

    上报数据请求:

    POST /topic/${topic}
    Host: ${YourEndpoint}
    Port: 5684
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: ${your_data}
    CustomOptions: number:2088(标识token)
    表 7. 上报数据请求参数说明
    参数 是否必需 说明
    Method 请求方法。支持POST方法。
    URL /topic/${topic}。其中,变量${topic}需替换为当前设备对应的Topic。
    Host Endpoint地址。
    Port 端口,取值:5684。
    Accept 设备接收的数据编码方式。目前,支持两种方式:application/json和application/cbor。
    Content-Format 上行数据的编码格式,服务端对此不做校验。目前,支持两种方式:application/json和application/cbor。
    CustomOptions
    • number取值:2088。
    • token为设备认证(auth)返回的token值。

    说明 每次上报数据都需要携带 token信息。如果 token失效,需要重新进行设备认证,获取 token。

上一篇:CoAP协议规范

下一篇:HTTP协议规范

阿里云物联网平台 > 设备接入 > 使用开放协议自主接入 > CoAP协议接入 >相关推荐

  1. EMW3080 STC15轻松实现设备上云3(阿里云物联网平台、智能生活开放平台)

    警告:本系列教程针对ILOP.A221固件开发,如使用其他ILOP固件,请自行修改配网部分.数据上报部分及解析服务器下发信息部分! 从本节开始我们就开始写程序用STC15单片机了实现设备上云啦!在此之 ...

  2. java实现mqtt服务端_基于Swoole使用MQTT协议连接阿里云物联网平台设备实现消息订阅

    阿里云物联网平台为设备提供安全可靠的连接通信能力,支撑设备数据采集上云,我们这里认为阿里云物联网平台是 MQTT 服务端,那么我们自己的设备作为客户端,应该如何实现消息订阅? 阿里云没有提供 PHP ...

  3. 爬取阿里云物联网平台设备的物模型数据

    背景说明 按项目经理的要求,需要导出阿里云物联网平台上所有设备的物模型数据到Excel上,方便后台导入.给客户演示和备份.但是,阿里云物联网平台没有这个功能,手动一个个处理不现实,因此只能写一个爬虫爬 ...

  4. 阿里云物联网平台设备之间通讯、数据转发

    阿里云物联网平台设备之间通讯.数据转发 阿里云物联网平台设备之间通讯.数据转发 准备工作 创建云产品流转规则 调试 阿里云物联网平台设备之间通讯.数据转发 本文演示使用阿里云物联网平台两设备间的通讯. ...

  5. 阿里云物联网平台设备模拟器

    在使用阿里云物联网平台过程中,如果开始调试没有实际的物理设备,可以考虑在阿里云物联网平台使用官方自带的模拟器进行调试.不过也可以通过叶帆科技开发的阿里云物联网平台设备模拟器AliIoTSimulato ...

  6. EMW3080+STC15轻松实现设备上云1(阿里云物联网平台、智能生活开放平台)

    警告:本系列教程针对ILOP.A221固件开发,如使用其他ILOP固件,请自行修改配网部分.数据上报部分及解析服务器下发信息部分! 本系列教程接入  阿里云物联网平台 / 智能生活开放平台 / 阿里智 ...

  7. 实现阿里云物联网平台设备信息到微信小程序分享过程

    简要说明: 实现微信小程序连接阿里云物联网平台并且显示阿里云设备信息等,设备端采用模拟设备进行数据上传,并且利用规则引擎和自定义的Topic进行信息的接受和发送. 目前效果图 步骤: 1.注册阿里云物 ...

  8. ESP8266 基于AT指令集连接阿里云物联网平台设备

    总结一下之前学习的内容.想通过ESP8266连接上阿里云物联网平台上创建的设备. 用ESP8266连接阿里云,本质上就是开启ESP8266的透传模式,发送MQTT报文.所谓MQTT报文,就是符合MQT ...

  9. EMW3080+STC15轻松实现设备上云2(阿里云物联网平台、智能生活开放平台)

    警告:本系列教程针对ILOP.A221固件开发,如使用其他ILOP固件,请自行修改配网部分.数据上报部分及解析服务器下发信息部分! 1.登录智能生活开放平台 2.创建项目 3.新建产品 4.点击刚刚创 ...

  10. 树莓派连接阿里云物联网平台设备

    文章知识大多来源于总结https://www.bilibili.com/video/BV1W7411t7Tv?t=19视频内容,非作者自创 ESP8266坏了,手上有个同学的树莓派,也想上个云.折腾一 ...

最新文章

  1. 运筹学两阶段法编程c语言,运筹学上机实验 - 单纯形方法的两阶段法
  2. 【华为】华为模拟器模拟静态、动态NAT、PAT技术
  3. 微信电脑客户端登陆_电脑端的微信只能开一个?简单操作就能随意开
  4. JS生成动态表格并为每个单元格添加单击事件的方法
  5. InfluxDB的HTTP API写入操作
  6. 前端学习(1168):构造函数方法(转换为真正数组)
  7. Android ANR 实例分析
  8. 转同事博客一则,随感
  9. springboot- jsp访问404的问题解决
  10. Java基础学习总结(21)——常用正则表达式列表
  11. Exchange 2010安装必要条件
  12. libsvm 实现多分类原理
  13. 常见c语言语法错误,C语言常见语法错误.doc
  14. vue项目中我的收货地址功能做法(添加地址、编辑地址、删除地址、默认地址、省市区三级联动)
  15. Markdown中在线编辑公式LaTex
  16. 什么是java线程?java线程模型的组成
  17. 虚拟机解压.rar文件
  18. DB2 SQL语句归纳整理(一)
  19. 旷视 CEO 印奇:靠“刷脸”折腾出 120 亿的大生意
  20. 一、获取时间所在周的周一、周五

热门文章

  1. 模拟退火算法_Matlab 二维模拟退火算法最优路径(主程序)
  2. enablefeignclients 注解_Spring Boot 中 @EnableXXX 注解的驱动逻辑
  3. 有关计算机程序的论文,有关计算机程序的论文范文.doc
  4. java爬虫技术的作用_Java网络爬虫怎么实现?
  5. php判断微信版本,判断是否是微信访问并获取版本号
  6. 单片机shell命令_nr_micro_shell
  7. python密码传参有特殊字符如何解决_无法在python selenium scrip中使用带有特殊字符“$”的密码...
  8. wincc怎么做一个弹出画面_wincc怎样弹出确认窗口?
  9. python课程ppt_Python电子教学课件12程序设计基本方法.ppt
  10. 高校计算机实验室管理制度,高校计算机实验室管理论文