zoukankan      html  css  js  c++  java
  • 300-STM32+BC26丨260Y基本控制篇(阿里云物联网平台)-阿里云物联网平台-规则引擎(云产品流转),让MQTT设备之间实现通信

    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLBC26AA/aly.html" 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.启动

    6.测试

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

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

  • 相关阅读:
    ACM ICPC 2008–2009 NEERC MSC A, B, C, G, L
    POJ 1088 滑雪 DP
    UVA 11584 最短回文串划分 DP
    POJ 2531 Network Saboteur DFS+剪枝
    UVa 10739 String to Palindrome 字符串dp
    UVa 11151 Longest Palindrome 字符串dp
    UVa 10154 Weights and Measures dp 降维
    UVa 10271 Chopsticks dp
    UVa 10617 Again Palindrome 字符串dp
    UVa 10651 Pebble Solitaire 状态压缩 dp
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/14651110.html
Copyright © 2011-2022 走看看