Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 304|回复: 0

4.13-物联网篇(阿里云物联网平台)-阿里云物联网平台加入规...

[复制链接]

56

主题

56

帖子

224

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
224
发表于 2020-10-27 23:16:20 | 显示全部楼层 |阅读模式



说明
这节说明一下如何让设备之间实现通信

再增加一个设备
819239-20200912030925935-599007906.png




819239-20200912031007417-1070682866.png



用户根据前面说的手动计算下密码
819239-20200912031101726-11036012.png



819239-20200912031114731-833150047.png


819239-20201014112223629-1696035626.png



我这台设备
最终:
IP地址:     a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com
端口号:    1883
Client ID: 1234567890|securemode=3,signmethod=hmacsha1|
用户名:    APPMqtt&a1m7er1nJbQ
密码:       671A24242E2882751F684D83B04BB9BBAAFB9162


然后测试
819239-20200416001106899-515289019.png




819239-20200416001255568-714625162.png


现在让两个设备实现通信
1.我现在要做的是让Mqtt这台设备发送的消息
转发到APPMqtt上

819239-20200418235930120-159547913.png
2.规则引擎 ,云产品流转

819239-20200912031959374-192547514.png





819239-20200912032048645-1357863927.png




3.选择编写 SQL
819239-20200912032137188-125057073.png




819239-20200912032152982-779574822.png


这是我上面的配置,现在解释一下
首先说整体是什么意思:
监控产品TestMqtt中名字为Mqtt这台设备的发布的主题
/a1m7er1nJbQ/Mqtt/user/update
然后把里面发布的消息全部提取出来.
① *代表提取所有消息
② 选择自定义的主题
③ 选择TestMqtt产品中设备
④ 选择名字为Mqtt的这台设备
⑤ 选择这台设备发布的主题(/a1m7er1nJbQ/Mqtt/user/update)
大白话:
监控名字为Mqtt的设备发布的主题 /a1m7er1nJbQ/Mqtt/user/update
假设设备发布的消息是:{"test":"1111"}
执行上面的配置就把这个{"test":"1111"}提取了出来
现在提取出来了,咱需要让服务器再转发到另一个设备
我想让服务器转发给下面这个设备
819239-20200912032333274-1428633044.png



APPMqtt设备其中一个订阅的主题: /a1m7er1nJbQ/APPMqtt/user/get
我现在想把上面说的{"test":"1111"}这个消息转发给主题 /a1m7er1nJbQ/APPMqtt/user/get
4.在转发数据那里添加个操作
819239-20200912032513415-354942640.png




819239-20200912032522607-2142573181.png






整体说下:
就是把上面配置SQL以后提取的数据{"test":"1111"}
转发到   /a1m7er1nJbQ/APPMqtt/user/get 这个主题上
① 把上面SQL语句提取的数据转发到另一个主题上
② 选择自定义
③ 选择自己创建的一个产品
④ 选择名字为APPMqtt的这台设备
⑤ 选择要转发到这台设备订阅的某个主题
5.启动规则
819239-20200912032556475-1821907560.png




6.测试
819239-20200912032621615-2016613311.png





同理让APPMqtt的消息转发给Mqtt
1.上面已经实现了名字为Mqtt的设备如果发布的主题是
/a1m7er1nJbQ/Mqtt/user/update
服务器就会把里面的消息提取出来,然后转发给
APPMqtt这个设备订阅的主题  /a1m7er1nJbQ/APPMqtt/user/get 上
名字为APPMqtt这个设备就收到了名字为Mqtt这台设备的消息
现在让名字为APPMqtt的这台设备的数据发送名字为Mqtt的设备
再创建个规则
819239-20200912032744733-1548439650.png




819239-20200912032752264-72597751.png




2.编写SQL语句
现在是监控APPMqtt这台设备的主题 /a1m7er1nJbQ/APPMqtt/user/update
819239-20200912032810367-1161576937.png



3.把数据转发给名字为Mqtt的设备
819239-20200912032830566-160212361.png




4.启动
819239-20200912032850722-601848492.png




5.测试
819239-20200912032905401-473261611.png




如何把一台设备的上报的物理模型数据传递给另一个设备
1.上报这些用的是: /sys/a1m7er1nJbQ/Mqtt/thing/event/property/post
消息格式是
{"method":"thing.event.property.post","id":"1111","params":{"temp":26,"humi":50},"version":"1.0.0"}

819239-20200912033027377-1503297037.png




2.再添加一个规则
819239-20200419091957616-1583683942.png





3.让后台监控Mqtt这台设备的  /sys/a1m7er1nJbQ/Mqtt/thing/event/property/post  这个主题
然后提取里面的所有数据
819239-20200419092041201-1172843054.png




4.把数据转发给APPMqtt这台设备
转发的主题:/a1m7er1nJbQ/APPMqtt/user/get
819239-20200419092125605-591426487.png




5.启动
819239-20200419092351562-766335607.png
6.测试

819239-20200419093444680-533204395.png

7.不过大家会发现,我发送的数据和接收的数据不一样
这是因为阿里云内部先对数据做了处理,然后再传递给云平台提取展示/转发给咱
发送的数据
{"method":"thing.event.property.post","id":"1111","params":{"temp":26,"humi":50},"version":"1.0.0"}

接收的数据
{"deviceType":"Lighting","iotId":"GaB2xAbUo7i36ag59HnN000100","requestId":"1111","productKey":"a1m7er1nJbQ","gmtCreate":1587260050305,"deviceName":"Mqtt","items":{"temp":{"time":1587260050309,"value":26},"humi":{"time":1587260050309,"value":50}}}


8.有人会问,数据这么多,我只想要温湿度数据怎么办
咱一步一步说
现在呢咱先看看怎么提取 items里面的内容
"items":{"temp":{"time":1587260050309,"value":26},"humi":{"time":1587260050309,"value":50}}
修改SQL下面的字段为 items
819239-20200912033319839-971986226.png



9.按照上面的修改以后,服务器就是从 JSON数据中提取字段为 items的内容,然后转发
819239-20200912033341007-1821927646.png




10.咱呢再进一步 提取 temp这个字段 和 humi这个字段
items.temp,items.humi
819239-20200419094647929-2031330878.png



items.temp  中间是个点
然后是, 逗号分开
然后是
items.humi
11.测试
819239-20200419094949526-815786218.png



12.如果大家还想往里面提取就是 items.temp.value
具体可以参考
819239-20200419095353405-1292997186.png


重要的地方
1.首先大家注意一下,同一个产品下阿里提供的订阅的发布的主题
发布: /a1m7er1nJbQ/XXXXXX/user/update
订阅: /a1m7er1nJbQ/XXXXXX/user/get
前后是不变的,变的是中间那个 DeviceName
2.设置规则引擎 SQL语句为
819239-20200912033604485-1531867253.png



按照上面的设置以后
服务器会提取发布的主题为 : /a1m7er1nJbQ/+/user/update   (+代表任意)
的消息
就是说 /a1m7er1nJbQ/XXXXXX/user/update   (XXXXXX无论是什么都可以)
都会去提取里面的数据
3.转发数据这样写
819239-20200912033639340-1036185711.png



${TargetDevice}
解释一下
假设有个这样的数据
{"TargetDevice":"Mqtt","ttt":123}
那么按照上面的配置以后其实是这个样子
提取发布的主题: /a1m7er1nJbQ/+/user/update 里面的整个消息
{"TargetDevice":"Mqtt","ttt":123}
然后把里面的字段为TargetDevice的字段值 Mqtt 提取出来

/a1m7er1nJbQ/${TargetDevice}/user/get
替换掉上面的 ${TargetDevice}
所以最终消息会被转发到
主题:/a1m7er1nJbQ/Mqtt/user/get
再更近一步,
我设备如何返回给APP呢??这样两者就实现双向通信了
APP发布的消息携带上自己的  DeviceName
其实最终APP发送的消息就变为了
{"TargetDevice":"Mqtt","DeviceName","APPMqtt","ttt":123}
设备端接收到消息以后,提取字段DeviceName里面的APPMqtt
然后发送的消息为
{"TargetDevice":"APPMqtt","aaaa":666666}
这条消息发出去以后
经过规则引擎
提取发布的主题: /a1m7er1nJbQ/+/user/update 里面的整个消息
{"TargetDevice":"APPMqtt","aaaa":666666}
然后把里面的字段为TargetDevice的字段值 APPMqtt 提取出来
/a1m7er1nJbQ/${TargetDevice}/user/get
替换掉上面的 ${TargetDevice}
所以最终消息会被转发到
主题:/a1m7er1nJbQ/APPMqtt/user/get
也就发给了APP
好了.大家现在可以把以前所有的规则都删除掉
只保留上面刚刚说的就可以
4.测试
819239-20200912034024218-1365300811.png


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2020-11-24 09:17 , Processed in 0.091486 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表