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

news2024/11/28 2:30:01

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.coloradmin.cn/o/1256959.html

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

相关文章

Java之API(上):Boolean

一、前言: 上次我们将到了 java.lang.* 下的包装类:Integer。这次我讲一下基本数据类型中的:布尔型(boolean)对应的包装类(Boolean)。注意:还有对包装类:Integer进行一些…

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

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

kubernetes架构及核心组件简单介绍

目录 整体架构控制面kube-apiserver访问控制通知 kube-scheduler概述默认调度策略 kube-controller-manageretcd架构Raft协议日志复制 数据面kubeletkube-proxy 整体架构 集群架构图 控制面 控制面是kubernetes的核心组件,负责管理和控制集群的整体行为&#xf…

java: nio之DirectByteBuffer

package nio;import java.nio.ByteBuffer; import java.nio.IntBuffer;public class DirectTest {public static void main(String[] args) {ByteBuffer byteBuffer ByteBuffer.allocateDirect(1024);} }

【计算机视觉】【图像处理综合应用】路沿检测

实验内容:针对给定的视频,利用图像处理基本方法实现道路路沿的检测; 提示:可利用Hough变换进行线检测,融合路沿的结构信息实现路沿边界定位(图中红色的点位置)。 处理视频文件 处理视频文件的主…

[原创](免改BIOS)使用Clover升级旧电脑-(骨灰级)修改Clover的config.plist文件

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

AIGC ChatGPT 4 快速整理不规则数据

从业务系统中采集到的数据如下: 序号 省份 英文 2022年销售额 2021年销售额 增量 1 广东guangDOng129068.58 124319.67 4748.91 2 江苏 JiangSu 122825.6 116314.2 6511.4 3 山东ShAnDong 87385 83045.9 4339.1 4 浙江…

云匣子 FastJson反序列化RCE漏洞复现

0x01 产品简介 云匣子是租户连接云资源的安全管理工具,帮助云租户更加安全、精细的管理云上的虚拟机、数据库等资源。 云安宝结合多年的运维和安全实践,将云上的运维和安全有机结合,实现对运维过程的事前规划、事中控制和 事后审计。在此之上…

部署Jenkins

一、介绍 Jenkins 、Jenkins概念 Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允…

大语言模型损失函数详解

我们可以把语言模型分为两类: 自动回归式语言模型:自动回归式语言模型在本质上是单向的,也就是说,它只沿着一个方向阅读句子。正向(从左到右)预测;反向(从右到左)预测。…

Qt4利用MVC开发曲线数据编辑器

目录 1 需求 2 开发流程 1 搭建框架 2 构造函数 3 打开工程 4 实现应用程序参数加载 5 QCustomPlot和TableView的联动 6 数据的可视化修改 7 列表点击事件事先键盘控制 8 表格实现复制,粘贴,删除等一系列功能 9 曲线实现自适应范围和统一范围…

【Web】攻防世界Web_php_wrong_nginx_config

这题考察了绕过登录、目录浏览、后门利用 进来先是一个登录框,随便怎么输前端都直接弹窗 禁用js后再输入后登录 查看源码,好家伙,不管输什么都进不去 直接扫目录 访问/robots.txt 访问/hint.php 访问/Hack.php 抓包看一下 cookie里isLogin0…

【JAVA学习笔记】71 - JDBC入门

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter25/src/com/yinhai/dao_ 一、JDBC概述 1.基本介绍 1. JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。 2. Java程序员使用JDBC,可以连接任何提供了JDBC驱动…

菜单的hover不同动画背景

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

虚拟化逻辑架构: LBR 网桥基础管理

目录 一、理论 1.Linux Bridge 二、实验 1.LBR 网桥管理 三、问题 1.Linux虚拟交换机如何增删 一、理论 1.Linux Bridge Linux Bridge(网桥)是用纯软件实现的虚拟交换机,有着和物理交换机相同的功能,例如二层交换&#…

IT问题解答类型网站源码

问答网是一款为IT工程师提供的问答平台,旨在帮助用户在线获取专业知识和相关问题的答案。在问答网,用户可以轻松找到其他人的问答问题,并在这里寻求解答。如果您有任何想要解决的问题,都可以在此发布问题并得到其他同行的解答。 …

YARN工作流程详解

图1 图2 图1 -作业提交阶段: 1、client 提交job,向 ResourceManager【RM】 申请job_id; 2、RM 返回 job_id 及资源提交路径 给 client 3、client 把job所需的资源提交 到 3中指定的路径中 4、client 上传完成资源后,向RM 发送执行作业请求,RM…

React中通过children prop或者React.memo来优化子组件渲染【react性能优化】

文章目录 前言未优化之前的代码问题解决方案一,通过children prop解决方案二,通过React.memo后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:react.js 🐱‍👓博主在前端领域还有很多知识和…

1.9 字符数组

1.9 字符数组 一、字符数组概述二、练习 一、字符数组概述 所谓字符数组&#xff0c;就是char类型的数组&#xff0c;比如 char a[]&#xff0c;是C语言中最常用的数组类型&#xff0c;先看一个程序 #include <stdio.h> #define MAXLINE 1000 //最大行长度限制 int get…

Telesquare TLR-2005Ksh 路由器 RCE漏洞复现

0x01 产品简介 Telesquare Tlr-2005Ksh是韩国Telesquare公司的一款 Sk 电讯 Lte 路由器。 0x02 漏洞概述 Telesquare TLR-2005Ksh存在安全漏洞&#xff0c;未经授权的攻击者可通过setSyncTimeHost执行任意命令获取服务器权限。 0x03 复现环境 FOFA&#xff1a;app"TELE…