RPC通訊可以從設備向服務器端上報消息,也可以通過服務器下發命令給設備,這種通訊又叫RRPC,這次我們來介紹和實踐一下RRPC的命令通訊;
通過服務端下發命令模擬設備指示燈的開關,來測試RRPC通信。
1.由於使用阿里雲的PHP的SDK,首先下載PHP的sdk:
git clone https://github.com/aliyun/aliyun-openapi-php-sdk.git
2.編寫用戶界面的PHP文件,一個用來提供用戶選擇開燈還是關燈;
<html><meta charset='UTF-8'><title>小白學習IOT</title><p><center><head>RRPC命令下發</head><body bgcolor='gray'><hr>
<?php
echo "</p><br><p>指示燈控制:<br>";
$str = $_SERVER["QUERY_STRING"];
echo "<form action=\"led.php\">
選擇類型:<br/>
<input type='radio' name='led' value='ON' ><img src='./ledon.jpg'/>
<input type='radio' name='led' value='OFF' checked><img src='./ledoff.jpg'/><br>
<input type='submit' value='運行'/>
</form>";
echo "</p></center>";
?>
</body></head></center></p></html>
3.再編寫一個控制開燈和關燈的PHP文件,這里用到了PHP的SDK中的core和iot兩個目錄,文件代碼如下,具體的意思為接收界面來的指示燈控制信息,然后配置好AK,SK,產品KEY,設備名稱,把控制信息通過BASE64編碼后發送給設備,最后收到設備的反饋信息,並顯示在網頁上。:
<html><meta charset='UTF-8'><title>小白學習IOT</title><p><center><head>RRPC命令下發</head><body bgcolor='gray'><hr>
<?php
echo "</p><br><p>指示燈控制:<br>";
$str = $_SERVER["QUERY_STRING"];
if($str =="led=ON"){
echo "<img src='./ledon.jpg'/><br>";
$led = "ON";
}
if($str =="led=OFF"){
echo "<img src='./ledoff.jpg'/><br>";
$led = "OFF";
}
include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/Config.php';
include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/AcsRequest.php';
include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/AcsResponse.php';
include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/RpcAcsRequest.php';
include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/IAcsClient.php';
include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/DefaultAcsClient.php';
include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-core/Autoloader/Autoloader.php';
include_once 'aliyun-openapi-php-sdk/aliyun-php-sdk-iot /Request/V20160104/RevertRpcRequest.php';
$iClientProfile = DefaultProfile::getProfile("cn-shenzhen",
"你自己的AK", "你自己的SK");
$client = new DefaultAcsClient($iClientProfile);
$request = new Iot\Request\V20160530\RevertRpcRequest();
$request->setProductKey(產品KEY);
$request->setDeviceName("設備名稱");//設備名稱
$request->setTimeOut(5000); //超時時間,單位毫秒.如果超過這個時間設備沒反應則返回"TIMEOUT"
$request->setRpcContent(base64_encode($led));
//推送給設備的數據.數據要求二進制數據做一次BASE64編碼.(示例里面是"helloworld"編碼后的值)
$response = $client->getAcsResponse($request);
//print_r("\r\n");
//print_r($response->RpcCode);
if(isset($response->RpcCode)){
if($response->RpcCode=='SUCCESS'){
echo '操作成功.';
}else{
echo '操作失敗:'.$response->RpcCode;
}
}
echo "</p></center>";
?>
</body></head></center></p></html>
4.最后,還需要在模擬設備端運行示例程序才可以正常運行:
這是查看設備端,可以看到已經接收到ON的信息了;
附件為相關編碼文件: lesson2-web.rar (7 K) 下載次數:0
timelapse 地址:
http://www.xunyun17.xyz/aliiot/lesson2/IOT-RRPC.mp4