006-STM32+ESP8266+AIR202/302基本控制方案(阿里雲物聯網平台)-阿里雲物聯網平台加入規則引擎(雲產品流轉),讓兩個MQTT設備之間實現通信


<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_A/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.啟動

 

 

 

 

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.測試

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 ESP8266 SDK開發: 物聯網篇-阿里雲物聯網平台加入規則引擎(雲產品流轉),讓MQTT設備之間實現通信 ESA2GJK1DH1K基礎篇: 阿里雲物聯網平台: 阿里雲物聯網平台加入規則引擎(雲產品流轉),讓兩個MQTT設備之間實現通信 006-STM32+ESP8266+AIR202/302基本控制篇(阿里雲物聯網平台)-在阿里雲物聯網平台上動態注冊設備(基於STM32+ESP8266) 008-STM32+ESP8266+AIR202/302基本控制方案(阿里雲物聯網平台)-在阿里雲物聯網平台上一型一密動態注冊設備(基於Android) 003-STM32+ESP8266+AIR202/302基本控制方案(阿里雲物聯網平台)-設備連接阿里雲物聯網平台使用物理模型Topic實現網頁端溫濕度數據展示 002-STM32+ESP8266+AIR202/302基本控制方案(阿里雲物聯網平台)-設備連接阿里雲物聯網平台使用自定義Topic實現數據上報和數據下發 009-STM32+ESP8266+AIR202/302基本控制方案(阿里雲物聯網平台)-在阿里雲物聯網平台上一型一密動態注冊設備(基於微信小程序) 001-STM32+ESP8266+AIR202/302基本控制方案(阿里雲物聯網平台)-測試STM32+ESP8266,GPRS,NB-IOT,Android,微信小程序等連接阿里雲物聯網平台 002-STM32+ESP8266+AIR202基本控制方案-關於阿里雲物聯網平台上的自定義,物模型,基礎通信Topic使用說明 005-STM32+ESP8266+AIR202/302基本控制篇--Android和ESP8266連接阿里雲物聯網平台,並通過雲平台實現遠程溫濕度采集和繼電器控制(預注冊方式)
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM