优秀不够,你是否无可替代

知识从未如此性感。 烂程序员关心的是代码,好程序员关心的是数据结构和它们之间的关系 --QQ群: 607064330 --本人QQ:946029359 --淘宝 https://shop411638453.taobao.com/

导航

统计

ESP8266 SDK开发: 物联网篇-阿里云物联网平台加入规则引擎(云产品流转),让MQTT设备之间实现通信

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/Learn8266ForSDK" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

 

 

说明

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

 

再增加一个设备

 

 

 

 

 

 

 

 

 

用户根据前面说的手动计算下密码

 

 

 

 

 

 

 

 

我这台设备

最终:

IP地址:     a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com

端口号:    1883

Client ID: 1234567890|securemode=3,signmethod=hmacsha1|

用户名:    APPMqtt&a1m7er1nJbQ

密码:       671A24242E2882751F684D83B04BB9BBAAFB9162

 

 

然后测试

 

 

 

  

 

 

现在让两个设备实现通信

1.我现在要做的是让Mqtt这台设备发送的消息

转发到APPMqtt上

 

2.规则引擎 ,云产品流转

 

 

 

 

 

 

 

 

 

 

3.选择编写 SQL

 

 

 

 

 

 

这是我上面的配置,现在解释一下

首先说整体是什么意思:

监控产品TestMqtt中名字为Mqtt这台设备的发布的主题

/a1m7er1nJbQ/Mqtt/user/update

然后把里面发布的消息全部提取出来.

 

① *代表提取所有消息

② 选择自定义的主题

③ 选择TestMqtt产品中设备

④ 选择名字为Mqtt的这台设备

⑤ 选择这台设备发布的主题(/a1m7er1nJbQ/Mqtt/user/update)

大白话:

监控名字为Mqtt的设备发布的主题 /a1m7er1nJbQ/Mqtt/user/update

假设设备发布的消息是:{"test":"1111"}

执行上面的配置就把这个{"test":"1111"}提取了出来

 

现在提取出来了,咱需要让服务器再转发到另一个设备

我想让服务器转发给下面这个设备

 

 

 

APPMqtt设备其中一个订阅的主题: /a1m7er1nJbQ/APPMqtt/user/get

我现在想把上面说的{"test":"1111"}这个消息转发给主题 /a1m7er1nJbQ/APPMqtt/user/get

 

 

4.在转发数据那里添加个操作

 

 

 

 

 

 

 

 

 

 

整体说下:

 

就是把上面配置SQL以后提取的数据{"test":"1111"}

转发到   /a1m7er1nJbQ/APPMqtt/user/get 这个主题上

 

① 把上面SQL语句提取的数据转发到另一个主题上

② 选择自定义

③ 选择自己创建的一个产品

④ 选择名字为APPMqtt的这台设备

⑤ 选择要转发到这台设备订阅的某个主题 

 

 

5.启动规则

 

 

 

 

6.测试

 

 

 

 

 

同理让APPMqtt的消息转发给Mqtt

1.上面已经实现了名字为Mqtt的设备如果发布的主题是

/a1m7er1nJbQ/Mqtt/user/update

服务器就会把里面的消息提取出来,然后转发给

APPMqtt这个设备订阅的主题  /a1m7er1nJbQ/APPMqtt/user/get 上

名字为APPMqtt这个设备就收到了名字为Mqtt这台设备的消息

 

现在让名字为APPMqtt的这台设备的数据发送名字为Mqtt的设备

再创建个规则

 

 

 

 

 

 

 

 

2.编写SQL语句

现在是监控APPMqtt这台设备的主题 /a1m7er1nJbQ/APPMqtt/user/update

 

 

 

3.把数据转发给名字为Mqtt的设备

 

 

 

 

4.启动

 

 

 

 

5.测试

 

 

 

 

如何把一台设备的上报的物理模型数据传递给另一个设备

1.上报这些用的是: /sys/a1m7er1nJbQ/Mqtt/thing/event/property/post

消息格式是

{"method":"thing.event.property.post","id":"1111","params":{"temp":26,"humi":50},"version":"1.0.0"}

 

 

 

 

 

2.再添加一个规则

 

 

 

 

 

3.让后台监控Mqtt这台设备的  /sys/a1m7er1nJbQ/Mqtt/thing/event/property/post  这个主题

然后提取里面的所有数据

 

 

 

 

4.把数据转发给APPMqtt这台设备

转发的主题:/a1m7er1nJbQ/APPMqtt/user/get

 

 

 

 

5.启动

6.测试

 

 

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

 

 

 

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

 

 

 

 

10.咱呢再进一步 提取 temp这个字段 和 humi这个字段

items.temp,items.humi

 

 

 

items.temp  中间是个点

然后是, 逗号分开

然后是

items.humi

 

11.测试

 

 

 

12.如果大家还想往里面提取就是 items.temp.value

具体可以参考

 

 

重要的地方

1.首先大家注意一下,同一个产品下阿里提供的订阅的发布的主题

发布: /a1m7er1nJbQ/XXXXXX/user/update 

 

订阅: /a1m7er1nJbQ/XXXXXX/user/get

前后是不变的,变的是中间那个 DeviceName

 

2.设置规则引擎 SQL语句为

 

 

 

按照上面的设置以后

服务器会提取发布的主题为 : /a1m7er1nJbQ/+/user/update   (+代表任意)

的消息

 

就是说 /a1m7er1nJbQ/XXXXXX/user/update   (XXXXXX无论是什么都可以)

都会去提取里面的数据

 

 

3.转发数据这样写

 

 

 

${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.测试

 

posted on 2020-10-14 11:28  杨奉武  阅读(225)  评论(0编辑  收藏

淘宝 QQ群