作者:阿裡雲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