天天看點

有一種糖叫文法糖【7】IOT實踐之規則使萬物有序

在上次介紹完阿裡雲物聯網服務端關于分組api接口的相關操作和實踐後,這回介紹一下阿裡雲物聯網中另外一類比較重要的概念,它的名字就叫做規則。萬物互聯通常被認為是物聯網的終極目标,但是從另外的角度來思考這個問題,當一張網連接配接上萬物後,不應該隻是實體上的連接配接,需要邏輯層面的分析處理和不斷的資料流通,才會使得整個物聯網更具有實際意義和生機勃勃。而網絡中的資料如何流動,怎樣流動,遵循什麼樣的邏輯,則可以由物聯網的提供者或者組建者來根據要服務的客戶的具體需求,來專門定制和提供。而這個過程,就可以了解為制定實作規則的過程。從這裡,也就引出了規則的作用和重要性。

我們要學習或要了解一個新事物和新理論,通常用理論聯系實際的方式,可以達到更好的效果,和前幾篇介紹的文章一樣,本次用來實驗和驗證的軟體連結如下:

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

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

接下來,就結合實際操作,逐一介紹和規則相關的這些接口:

阿裡雲物聯網服務端關于規則,這個功能提供的api接口大體上分為兩類,一個是使用者層面的規則,比如規則的名稱啊,規則的類型啊,或是規則的一些篩選操作啊,這類接口我們可以簡稱規則接口;而另外一類接口則是阿裡雲内部相關的轉發接口,不如收到一個裝置的訊息是轉發給另外一個裝置呢,還是傳到消息隊列裡繼續處理呢,還是放到資料表格裡進行分析呢,這類接口也有個名字,阿裡雲物聯網定義為規則動作接口。兩類接口合為一體,總的統稱為規則引擎接口;先來介紹規則相關的操作,首先要做的當然是建立一個規則,每條規則都是和産品裝置相關聯的,是以建立規則時,需要提供所要關聯的産品關鍵字和裝置名稱為參數,這個操作有4各參數,另外兩個是規則自身相關的名稱和類型,其中名稱還好了解,類型是指要接受topic的類型,取值範圍有三種:0,1,2;0為系統topic,1為自定義topic,2為裝置狀态topic;這裡以裝置狀态消息的topic為例,建立一條名稱為MyRule的規則,産品裝置資訊還使用之前的例子裡的值;那麼具體建立指令如下:

XYsayFrO.IoT.Srv.CreateRule.MyRule.2.a141rgUXgFl.lamp3_dev1.

如果運作後,傳回結果和下面類似,success後面的值為true,那麼表示建立成功,

有一種糖叫文法糖【7】IOT實踐之規則使萬物有序

同時還會傳回這條規則的id号,這個id号很重要,後面的其他相關操作都需要它作為參數,是以需要記下來;

在建立好規則後,我們可以通過ListRule指令來查詢已經建立的規則;

XYsayFrO.IoT.Srv.ListRule.

這個指令使用比較友善,因為它不要參數;運作以後如下圖所示,會列出我們建立的所有規則;

有一種糖叫文法糖【7】IOT實踐之規則使萬物有序

這裡仔細觀察可以看到,我的賬号下一共有3條規則,其中最近一條,使我們剛才建立的叫做MyRule的規則,建立時間,産品關鍵字都清晰可見,而狀态顯示stop,表示這條規則的目前狀态是停止的;

當然,除了使用上面ListRule指令,還可以使用GetRule指令,來得到一條指定了規則id号的相關資訊,這在建立了大量規則後,查找其中某一條規則的情況下,尤其有用,這裡我們用GetRule指令,來得到我們最開始建立的規則:

XYsayFrO.IoT.Srv.GetRule.347577.

結果如下:

有一種糖叫文法糖【7】IOT實踐之規則使萬物有序

可以看到,相比ListRule傳回3條規則資訊,GetRule隻傳回了我們要查詢的這條規則的資訊;資訊的具體内容和ListRule的傳回基本一緻;

前面有提到除了規則,還有一類操作是規則動作相關的,這裡我們可以在建立規則的基礎上,來建立一條規則動作,規則動作的指令為CreateRuleAction,而通常需要3個參數,一個是規則的id号,第二個為規則動作類型,一共有六個選項,分别為DATAHUB,ONS,MNS,FC,OTS和REPUBLISH,這裡 DATAHUB指流式資料操作,ONS為消息分發,MNS為消息傳輸,FC是函數計算,OTS為表格存儲,REPUBLISH為topic轉發;

這裡以最友善容易操作的REPUBLISH為例子,建立一個規則動作,将我們裝置名稱為lamp3_dev1的裝置,收到的消息轉發到lamp3_dev的get上的topic。詳細指令格式定義如下:

XYsayFrO.IoT.Srv.CreateRuleAction.347577.REPUBLISH.{"topic":"/a141rgUXgFl/lamp3_dev/get","topicType":1}.

這裡再說解釋一下轉發配置裡的topictype類型的含義,0表示資料下行到系統topic,1表示資料轉給使用者自定義的topic。因為我們這裡是把一個裝置的消息轉給另外一個裝置,是以這裡用的topictype為1;

有一種糖叫文法糖【7】IOT實踐之規則使萬物有序

運作後如上圖所示,如果正确無誤,會在success後面傳回true,然後後面會傳回消息動作的actionid号碼;

和查詢規則清單的功能類似,這裡也提供了查詢規則動作清單的指令,指令名為ListRuleActions,因為這條指令是查詢某條規則下面的規則動作清單,是以這條指令需要把規則号作為參數傳入,這裡作為示例把之前建立的規則号傳入就好了,最後得到的詳細格式如下;

XYsayFrO.IoT.Srv.ListRuleActions.347577.

有一種糖叫文法糖【7】IOT實踐之規則使萬物有序

從上面的運作截圖,可以看出,傳回的資訊裡證明,這條規則目前隻包含一條規則動作,類型是republish,具體配置和我們建立的一樣,是轉發到另外一個裝置的get接口;

介紹完規則動作,我們在傳回規則的操作繼續介紹,規則建立後,可以使用UpdateRule來更新規則,提到規則更新,需要先對資料流轉介紹一下,通常在建立好産品裝置時,一些裝置本身的特有屬性也會被建立,例如裝置的溫度,濕度和壓力等。在裝置上報狀态資料時,會把這些特有屬性的資料也會被上報到上面提到的datahub,ons,mns或republish,這個過程通常被稱作資料流轉,而實際往往不需要同時所有特有屬性的資料作流轉,是以就在流轉前用sql語句過濾一下。

是以"通過SQL對Topic中的資料進行處理",也被明确定義在阿裡雲物聯網的資料流轉限制文檔中;說完資料流轉,再傳回來看我們建立的規則,預設是select *這個sql語句,是以沒有用到相關的sql參數,這句sql的意思,就是把所有裝置的資料上報。我們可以通過UpdateRule指令來修改我們sql語句,來達到篩選上報資料的目的,例如裝置的溫度,濕度和壓力的關鍵字名稱分别為a,b,c,那麼如果我們隻需要裝置上報這三種資料,則是用下面的指令格式:

XYsayFrO.IoT.Srv.UpdateRule.347577.a,b,c.

成功運作後,如下圖所示,會在success後面傳回true:

有一種糖叫文法糖【7】IOT實踐之規則使萬物有序

之前介紹的操作,建立的規則一直是處于停止狀态的,我們這裡使用StartRule指令,來開啟這條規則,這個指令後面需要一個參數,來表示要啟動的規則号。這裡我們用開啟我們文章最開始建立規則為例子,同時我們運作GetRule來查詢指令的狀态,最後詳細指令格式如下:

XYsayFrO.IoT.Srv.StartRule.347577.

有一種糖叫文法糖【7】IOT實踐之規則使萬物有序

從結果的截圖中,可以看到,我們建立的規則已經成功啟動了;

規則可以啟動,就應該也可以停止,接下來,就用StopRule來停止規則的運作,并進行查詢确認:

XYsayFrO.IoT.Srv.StopRule.347577.

有一種糖叫文法糖【7】IOT實踐之規則使萬物有序

通過傳回結果,可以确認規則已經被成功的停止執行了;

最後,如果建立好的規則長期不用,或者出現異常原因,需要廢除,可以使用DeleteRule指令來删除規則,i然後我們調用ListRule 來做确認,具體兩條指令格式如下:

XYsayFrO.IoT.Srv.DeleteRule.347577.

得到結果如下圖,可以看到,本次建立的規則已經被删除,目前賬号和以前一樣,隻有兩條規則了;

有一種糖叫文法糖【7】IOT實踐之規則使萬物有序

阿裡雲物聯網雲端規則引擎的相關介紹,到此結束,謝謝收看;