临沂建设网站,如何做淘宝直播教学视频网站,建网站费用记账,淮南市住房与城乡建设部网站0. 背景
阿里云网关子设备上平台的资料很少。有些厂家直接配置每个子设备的DeviceSecret到网关里#xff0c;显然太麻烦了#xff01;我经过阅读阿里文档#xff0c;发现有些简化的方法#xff0c;更便于客户使用#xff0c;因此分享给大家。
1. 主要信息片段
子设备 $…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存起来。也就是如果存过这个密钥说明执行过一次注册流程。 还有一点补充一下如果阿里平台手动操作加的父子拓扑并且网关设备里存的子设备密钥有效则网关里认为的子设备类型与平台认为的子设备类型可能不一致造成传输错误。有一个解决方案就是网关下的子设备透传自己定义的数据传到平台后用平台的”消息解析“功能做物模型翻译。反正路子非常多体现了阿里云设计的精妙之处。