阿里云MQTT: 子设备上线流程

0. 背景

阿里云网关子设备上平台的资料很少。有些厂家直接配置每个子设备的DeviceSecret到网关里,显然太麻烦了!我经过阅读阿里文档,发现有些简化的方法,更便于客户使用,因此分享给大家。

1. 主要信息片段

子设备 ${SubProductKey} ${SubProductName}  ${SubDeviceSecret}
父网关 ${DadProductKey} ${DadProductName} ${DadDeviceSecret}

Product就是所有相同属性和操作的设备的集合或者类。Key就是一串唯一标识了。
Device就是具体一个产品的实例或对象了。
Name就是设备的唯一标识,阿里要求在自己的Product内唯一即可。这就是为什么我起个dev01的名字,系统不提示重名的原因。产品名字空间不同而已。
Secret就是一个密钥,加密用到。到底是公钥还是私钥没深入研究。

2. 阿里平台准备。

父网关必须已具备上线能力。子设备是依赖父网关的MQTT通道上线的。子设备至少已经在平台添加好产品和具体设备。剩下的工作就由父网关设备内部的软件,自动让设备注册,建立拓扑,上线

3.网关内部Alink流程

3.1 动态注册

名字起的不知所云,经过试验,说白了就是查询子设备的${SubDeviceSecret}

父网关发布主题:/sys/${DadProductKey}/${DadProductName}/thing/sub/register
父网关订阅主题:/sys/${DadProductKey}/${DadProductName}/thing/sub/register_reply

{
  "id": "123",
  "version": "1.0",
  "sys":{
      "ack":1
  },
  "params": [
    {  
      "deviceName": ${SubProductKey}, 
      "productKey": ${SubProductName}
    }
  ],
  "method": "thing.sub.register"
}

如果返回200,${SubDeviceSecret}也就抓取到手。

3.2 建立拓扑
说白了,目的是建立子设备与网关的父子关系(如果原先已建立,也会返回成功)

父网关发布主题:/sys/${DadProductKey}/${DadDevicetName}/thing/topo/add
父网关订阅主题:/sys/${DadProductKey}/${DadDeviceName}/thing/topo/add_reply

{
  "id": "123",
  "version": "1.0",
  "sys":{
      "ack":1
  },
  "params": [
    {  
      "deviceName": ${SubDeviceName},
      "productKey": ${SubProductKey},
      "sign": "3908C94C2D9F33AC50A4CC9B1C4BCD45093E3EA4",
      "signmethod": "hmacSha1",
      "timestamp": "1701008186820",
      "clientId":  ${SubProductKey} & ${SubDeviceName}
    }
  ],
  "method": "thing.topo.add"
}

sign这个字段怎么填呢?

这里给个提示:
第一步把参数输入到设备信息框。
第二步点击generate。
第三步:password框里的内容就是sign。

如果返回200,就是建好了父子关系。这样多好,不用在平台上操作费劲了。

3.3 子设备上线

网关应该有感知子设备上线下线的能力。如果子设备上线,父网关应该把子设备上线的事告知平台

父网关发布主题:/ext/session/${DadProductKey}/${DadProductName}/combine/login

{
  "id": "123",
  "params": {
      "deviceName": ${SubDeviceName},
      "productKey": ${SubProductKey},
      "timestamp": "1701008186820",
      "clientId": ${SubProductKey}&${SubDeviceName},
      "cleanSession": "true",
      "signMethod": "hmacmd5",
      "sign": "729FB99CA14B62BAD356A22F3B58AC78"
  }
}

注意,自己计算签名sign字段时,不能把"cleanSession"算进去,具体参考Alink协议文档。

3.4 子设备业务数据传输到平台

这个就又多种方法了,有完全透传的,有半透传半翻译的,有完全Alink物模型方式的。
我搞了个物模型方式的。

网关发布主题: /sys/${SubProductKey}/${SubDeviceName}/thing/event/property/post

{
    "id": "123",
    "version": "1.0",
    "sys":{
        "ack":0
    },
    "params": {
        "temperature": 24
    },
    "method": "thing.event.property.post"
}
这里发布一个温度值24度,给平台。

3.5 其他问题
子设备下线,父子关系解除,应该举一反三,自己研究就会了吧?

3.6 异类子设备混编在一个网关下
网关应能识别子设备属于哪种产品。当子设备的产品变更后,网关应能重新处理。
例如modbus网关下,1号从机,原先是灯控开关产品,重新给1号设备分配到智能插座上。
首先在阿里平台上,删除1号(笔者写作时,平台禁止设备改产品),在添加一次1号。
然后,网关设备与1号设备重新配对一次,1号现在是智能插座了,网关因为知道智能插座的
ProducyKey,就会触发注册,拓扑这一套流程,执行后,要记住最重要的一点,把子设备的${SubDeviceSecret}写到E2ROM存起来。也就是如果存过这个密钥,说明执行过一次注册流程。
还有一点补充一下,如果阿里平台手动操作加的父子拓扑,并且网关设备里存的子设备密钥有效,则网关里认为的子设备类型,与平台认为的子设备类型可能不一致,造成传输错误。有一个解决方案,就是网关下的子设备透传自己定义的数据,传到平台后,用平台的”消息解析“功能做物模型翻译。反正路子非常多,体现了阿里云设计的精妙之处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/172806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

屏蔽WordPress评论中长URL地址方法

由于WordPress是比较常见的CMS程序之一,所以很多网络营销推广也会基于WP去群发外链和广告信息。这里,我们可以通过屏蔽特定关键字、屏蔽特定字符的方式,或者是屏蔽评论内容的长短来限制评论。还有一个我们可以通过评论内容的URL地址的长度来屏…

基于springboot+mysql实现的小区物业管理系统

基于springbootmysql实现的小区物业管理系统,演示地址:登录 演示账号:用户名:744621980qq.com 密码:123456,主要包含房屋管理(楼栋管理,单元管理,房屋管理),车位管理,缴费管理,社区服务( 公告管理&#xf…

Linux socket编程(6):IO复用之select原理及例子

文章目录 1 五种I/O模型1.1 阻塞I/O模型1.2 非阻塞I/O模型1.3 I/O复用模型1.4 信号驱动I/O模型1.5 异步I/O模型 2 select函数3 select实战:实现多个套接字监听3.1 客户端3.2 服务端3.3 实验结果3.4 完整代码 在之前的网络编程中,我们遇到了一个问题&…

CentOS7 安装配置SFTP服务器详解

1、SFTP简介 SSH文件传输协议(英语:SSH File Transfer Protocol,也称Secret File Transfer Protocol,中文:安全文件传送协议,英文:Secure FTP或字母缩写:SFTP)是一种数据流连接,提供文件访问、传输和管理功能的

Qt TCP网络上位机的设计(通过网络编程与下位机结合)

目录 TCP 协议基础 QTcpServer 和 QAbstractSocket 主要接口函数 TCP 应用程序 1.服务端 2.客户端 上位机通过网络编程与下位机实现通信 TCP 协议基础 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于…

mysql从库设置为只读

直奔主题,mysql设置为只读后,无法增删改。 设置命令: mysql> set global read_only1; #1是只读,0是读写 mysql> show global variables like %read_only%; 以下是相关说明: 1、对于数据库读写状态&#xf…

详解RT-DETR网络结构/数据集获取/环境搭建/训练/推理/验证/导出/部署

论文地址:RT-DETR论文地址 代码地址:RT-DETR官方下载地址 目录 一、本文介绍 二、RT-DETR的网络结构 2.1、模型概览 2.2、高效混合编码器 2.3、IoU感知查询选择 2.4、 可扩展的RT-DETR 三、RT-DERT的环境搭建 四、免费数据集获取 五、获取RT-D…

Linux基本命令一

Linux基本命令一 1、mkdir 命令 mkdir ​ **作用:**命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录 ​ **语法:**mkdir [选项] 目录 ​ **命令功能&am…

【Android知识笔记】性能优化专题(三)

App 布局优化 绘制原理 CPU 负责计算显示内容GPU 负责栅格化(UI元素绘制到屏幕上)每 16ms 发出 VSync 信号触发 UI 渲染,代码必须保证在16ms内绘制完毕大多数的Android设备屏幕刷新频率:60Hz(人眼分辨的极限)大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性…

爬楼梯(力扣LeetCode)动态规划

爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1 阶 1 阶2 阶 示…

使用python 实现华为设备的SFTP文件传输

实验目的: 公司有一台CE12800的设备,管理地址位172.16.1.2,现在需要编写自动化脚本,通过SFTP实现简单的上传下载操作。 实验拓扑: 实验步骤: 步骤1:将本地电脑和ensp的设备进行桥接&#xff…

菜单的hover不同动画背景

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS…

SWT/Jface(3): 表格中添加超链接

背景 实际业务中经常需要展示某个网站, 并且希望在展示的时候单击网站可直接访问, 本节演示在表格中如何添加超链接支持. 需求 假设我需要渲染一个Study类, 它只有三个属性id,name和website, 其中id只支持展示, name只支持编辑, 而website只支持单击时跳转到相应的网站, 效果…

Java面试准备

计算密集型:这一类主要是在线程中,按照数学公式,大量求和、求平均、求平方等等操作,这样的任务,大部分需要依赖CPU的计算能力来处理,我们设置线程数一般是:计算机核数n1。 IO密集型:…

Linux7设置ssh秘钥登录并关闭密码登录

说明:场景为windows使用WinScp远程登录linux服务 winscp安装教程:winscp安装及关联putty使用_putty.exe没有找到_cherishSpring的博客-CSDN博客 1.在window上生成公钥和秘钥,操作方式参考以下文章第3点: git关联云效使用教程_云…

【Excel导入】- EasyExcel读取Excel空数据行问题

EasyExcel读取Excel空数据行问题 原因解决写在最后 原因 项目Excel导入使用的EasyExcel工具,为什么会出现空白行的问题呢;在进行Excel导入时都会提前设定一个Excel模版,Excel导入时在Excel模版中设置了单元的样式,但没有给单元格…

Ps:使用钢笔工具绘制自由路径的技巧

只有熟练掌握使用钢笔工具绘制自由路径的技巧,才能快速完成复杂形状的创建以及精准抠图等工作。 钢笔工具是 Photoshop 中绘制路径的主要工具。无论是直线路径还是曲线路径,钢笔工具都能够提供高度的控制和精确度。 ◆ ◆ ◆ 绘制直线路径 绘制直线路径…

下载网页内容成HTML文件

今天遇到了一个非常好用的、开源的网页下载插件: SingleFile,它可以将当前网页里的文字、图片、超链接等,合并成单一的.html文件,便于保存和浏览查看。下面介绍SingleFile的安装和使用。 1、下载SingleFile插件 SingleFile官网地址&#xff…

高并发系统:它的通用设计方法是什么?

Java全能学习面试指南:https://javaxiaobear.cn 我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能…

Mybatis-Plus 租户使用

Mybatis-Plus 租户使用 文章目录 Mybatis-Plus 租户使用一. 前言1.1 租户存在的意义1.2 租户框架 二. Mybatis-plus 租户2.1 租户处理器2.2 前置准备1. 依赖2. 表及数据准备3. 代码生成器 2.3 使用 三. 深入使用3.1 前言3.2 租户主体设值,取值3.3 部分表全量db操作3…