天天看點

有一種糖叫文法糖【8】IOT實踐之物聯源于topic

這一次,介紹一下阿裡雲iot的一類比較重要API接口操作:topic管理,說到topic,這個概念其實應該是起源于mqtt協定的,

mqtt協定作為目前物聯網的主要通信協定,最開始,大概上個世紀90年代,是由IBM為了M2M[machine to machine]場景[比如傳感器和衛星連結]而定義,開發和使用的;後來随着物聯網的興起,逐漸成為物聯網通信的主流協定,也被OASIS标準組織官方所采納,目前在mqtt的官方網站

http://mqtt.org/

,最新的版本是今年3月份釋出的5.0版本;mqtt主要有三個比較重要的概念,sub,pub和topic,由于mqtt使用戶端加伺服器的結構,是以當一個裝置向另一個裝置發送消息時,接收消息的裝置首先要訂閱這個裝置發送的這類消息;這個過程為sub[subscribe],而發送消息的裝置實際上是發給伺服器,然後轉到接收消息的裝置,是以發送消息的過程被稱作pub[public],而不同類别的消息通常是發到不同的裝置上;是以消息的類别名稱可以了解為topic,或者叫主題;關于topic更詳細的定義資訊,讀者感興趣可以參考mqtt官方網站上的

5.0版本的文檔說明,比如topic标準定義為$開頭,中間用/斜線作為等級劃分的字元串;

介紹完topic相關的一些基本資訊後,下面就開始介紹阿裡雲IOT雲端如何使用api接口,對topic進行管理的了;

本次用來實驗和驗證的軟體連結如下:

http://xysuger.xunyun17.xyz/v0.0.8.rar

讀者如果感興趣的話,可以自行下載下傳運作驗證;

關于topic的api接口,一共有8個,可以分為兩類,分别是topic的基本操作和topic路由表的操作;下面先來看一下topic的基本操作,由于topic通常都是和産品關聯的,是以基本操作的四個api接口指令裡,都帶有product字元串,這四個接口分别是建立,查詢,更新和删除産品相關的topic,下面先來看一下如何建立産品的topic,建立的指令為CreateProductTopic,這個指令帶有三個參數,第一個為産品的關鍵字辨別符,這裡為a141rgUXgFl,第二個參數為topic的名稱,這裡

為XYsuger,第三個為這個topic的操作權限,這裡有三種取值:SUB,PUB,ALL分别對應訂閱,釋出和訂閱+釋出;這裡為PUB表示釋出;最後的指令字元串為:

XYsayFrO.IoT.Srv.CreateProductTopic.a141rgUXgFl.XYsuger.PUB.

運作後,得到如下圖所示,

有一種糖叫文法糖【8】IOT實踐之物聯源于topic

這裡可以看到,除了通常的requestid,success傳回值,還多了一個topicid,這個表示成功建立topic後,這個topic所對應的唯一的一個id号碼,後續操作需要用到這個值來作為參數;

成功建立好topic後,我們可以使用QueryProductTopic指令,來查詢已經存在topic,這條指令隻需帶入一個參數,也就是産品的關鍵識别符,即可列出這個産品下的所有topic,最後的完整指令如下:

XYsayFrO.IoT.Srv.QueryProductTopic.a141rgUXgFl.

有一種糖叫文法糖【8】IOT實踐之物聯源于topic

從指令的傳回結果,可以看到産品的topic清單裡,第一個就是我們剛才建立的topic:XYsuger,而且id号就是topicid和剛才建立時傳回的是一樣的;另外,這裡的operation後面的數字,代表我們剛才傳入的sub,pub,all的操作權限,具體的對應關系為0-PUB,1-SUB,2-ALL.

成功查詢産品的TOPIC清單後,我們就可以通過UpdateProductTopic指令,來修改相應topic的操作權限,比如我們這裡作為一個示範的例子,把剛才建立topic的操作權限由PUB改為ALL,那麼完整的指令如下,這裡有三個參數,一個是TOPIC的ID,第二個為操作權限,第三個為TOPIC的名稱:

XYsayFrO.IoT.Srv.UpdateProductTopic.5768271.ALL.XYsuger.

修改好後,我們再用剛才的查詢指令确認一下,傳回結果資訊如圖:

有一種糖叫文法糖【8】IOT實踐之物聯源于topic

這裡可以看到operation的值已經由0改為2,證明我們剛才的操作運作成功;

最後一個基本操作是删除topic,操作指令為DeleteProductTopic,帶有一個參數表示要删除的topicid,這裡為 5768271,完整指令如下:

XYsayFrO.IoT.Srv.DeleteProductTopic.5768271.

删除後,我們同樣運作上面查詢的指令,運作結果如下圖所示:

有一種糖叫文法糖【8】IOT實踐之物聯源于topic

這裡從查詢的資訊,可以看到我們剛才建立名字為XYsuger的topic,已經不再查詢結果清單中了,證明删除操作生效了;

下面來介紹和示範topic路由表相關的操作,topic路由表的具體含義,顧名思義,就是将一個裝置的topic轉到本裝置内部另外一個topic,或者另外一個裝置的topic上,實作真正意義上的裝置内部邏輯轉換或裝置和裝置通信,下面來看topic路由表的第一個操作,建立topic路由表,操作指令名稱:CreateTopicRouteTable,帶有兩個參數,原topic和要轉接到topic,這裡作為示範的例子,将剛才建立的XYsuger這個topic,轉換到這個裝置的update更新的topic上,完整指令格式如下:

XYsayFrO.IoT.Srv.CreateTopicRouteTable./a141rgUXgFl/lamp3_dev/XYsuger./a141rgUXgFl/lamp3_dev/update.

運作後,會傳回下面的資訊;

有一種糖叫文法糖【8】IOT實踐之物聯源于topic

這裡看到success為true,就表示建立成功;

然後使用QueryTopicRouteTable指令,查詢建立好的topic路由,這裡隻要傳入要查詢的源topic作為參數即可;指令如下:

XYsayFrO.IoT.Srv.QueryTopicRouteTable./a141rgUXgFl/lamp3_dev/XYsuger.

運作結果如下:

有一種糖叫文法糖【8】IOT實踐之物聯源于topic

可以看到,topic後面的傳回資訊,正是我們剛才建立路由的目标topic的資訊。

除了正向查找路由,還可以反向查找路由,也就是說通過目标topic的資訊,查找路由表裡原topic的資訊;指令名稱為QueryTopicReverseRouteTable,這裡帶入目标的topic作為參數,完整格式如下:

XYsayFrO.IoT.Srv.QueryTopicReverseRouteTable./a141rgUXgFl/lamp3_dev/update.

有一種糖叫文法糖【8】IOT實踐之物聯源于topic

這裡可以看到,查找到的原topic資訊為XYsuger,表示查找正确;

最後一個關于topic路由表的操作,為删除topic路由表,指令名稱為DeleteTopicRouteTable,帶入的兩個參數分别為這條路由的原topic和目标topic,這裡我們删除剛才建立的topic路由,完整的指令格式如下:

XYsayFrO.IoT.Srv.DeleteTopicRouteTable./a141rgUXgFl/lamp3_dev/XYsuger./a141rgUXgFl/lamp3_dev/update.

有一種糖叫文法糖【8】IOT實踐之物聯源于topic

這裡的傳回資訊,success的值為true,表示删除成功;

到這裡,topic管理方面的相關api操作,就已經介紹完了,謝謝收看;

繼續閱讀