天天看點

手把手學IOT服務端API程式設計[16、查詢裝置影子]|MVP講堂

作者:阿裡雲MVP洵雲

10節回顧:

手把手學IOT服務端API程式設計[10、儲存裝置屬性]|MVP講堂 11節回顧: 手把手學IOT服務端API程式設計[11、查詢裝置屬性清單] 12節回顧: 手把手學IOT服務端API程式設計[12、删除裝置屬性] 13節回顧: 手把手學IOT服務端API程式設計[13、釋出消息到Topic] 14節回顧: 手把手學IOT服務端API程式設計[14、發消息給裝置并同步傳回響應] 15節回顧: 手把手學IOT服務端API程式設計[15、釋出廣播消息]

上節介紹從服務端給裝置發送廣播消息後,實際使用過程中,往往存在網絡信号不好,品質不穩定的狀況,這時就需要服務端儲存一份裝置端最後一次狀态的資訊,用來做後續的相關分析,這份資訊又被稱為裝置影子,服務端的API接口也提供了相應的功能,

這一節就來介紹一下如何使用裝置影子這個功能,這個接口需要提供兩個參數,一個是産品的key值,一個是裝置名稱;

接下來我們看一下具體實作;

1、腳本實作:

我們按照接口的要求,在架構頁面上,提供産品的key值和裝置名稱,這兩個輸入參數框給使用者輸入,

産品KEY:        <input type="text" name="pkey16">

裝置名稱:        <input type="text" name="devname16">

而在實際的實作代碼中,我們隻需要使用get函數提取這個變量就可以了:

$pkey = $_GET["pkey16"];

$devname = $_GET["devname16"];

接着引用查詢裝置清單的接口:

$request = new Iot\GetDeviceShadowRequest();

通過檢視GetDeviceShadowRequest檔案,可以知道我們需要調用setProductKey和setDeviceName 兩個函數,來從服務端傳送查詢裝置影子的資訊;這兩個參數的意思分别是配置産品key,配置裝置名稱.

$request->setProductKey($pkey); 

$request->setDeviceName($devname); 

調用通用的網絡查詢操作後,将操作的傳回結果和影子資訊顯示在網頁上:

echo 'ShadowMessage :'.$response->ShadowMessage.'<br>';

echo 'RequestId :'.$response->RequestId.'<br>';

echo 'Success :'.$response->Success.'<hr>';

2、裝置端模拟:

預設裝置初始狀态是不存在裝置影子的,由于隻有裝置有上線記錄後,這一節也需要裝置的模拟,下載下傳開發包的指令和上節類似,這裡隻介紹發送裝置消息例子的部分:

2.1 修改shadow-example.c檔案,改為我們自己的裝置名稱:

vi iotkit-embedded-master/iotkit-embedded-master/sample/device-shadow/shadow-example.c

2.2 修改後,儲存退出,重新編譯源碼;

cd iotkit-embedded-master/iotkit-embedded-master/

make clean

sudo make all

2.3 編譯結束後,運作編譯後的例子檔案:

output/release/bin/shadow-example

3、實際測試:

先運作模拟裝置,然後打開浏覽器,轉到我們架構腳本頁面,這裡輸入我們從控制台得到的産品key值和裝置名稱,運作送出按鈕後,可以得到要查詢的裝置影子資訊:

具體向關截圖如下:

timelapse:

http://www.xunyun17.xyz/ioto/step16-GetDeviceShadowRequest.mp4

繼續閱讀