作者:阿里云MVP洵云
13节回顾:手把手学IOT服务端API编程[13、发布消息到Topic]
14节回顾:手把手学IOT服务端API编程[14、发消息给设备并同步返回响应]
15节回顾:手把手学IOT服务端API编程[15、发布广播消息]
16节回顾:手把手学IOT服务端API编程[16、查询设备影子]
上节介绍从服务端查询设备影子消息后,实际使用过程中,常常需要根据网络的状态情况,进行相应更新设备的影子,服务端的API接口也提供了相应的功能,
这一节就来介绍一下如何更新设备影子这个功能,这个接口需要提供两个参数,一个是产品的key值,一个是设备名称;
接下来我们看一下具体实现;
1、脚本实现:
我们按照接口的要求,在框架页面上,提*品的key值和设备名称和需要更新的设备影子,这三个输入参数框给用户输入,
产品KEY: <input type="text" name="pkey17">
设备名称: <input type="text" name="devname17">
影子信息: <input type="text" name="shadowmsg17">
而在实际的实现代码中,我们只需要使用get函数提取这个变量就可以了:
$pkey = $_GET["pkey17"];
$devname = $_GET["devname17"];
$shadowmsg = $_GET["shadowmsg17"];;
接着引用查询设备列表的接口:
$request = new Iot\UpdateDeviceShadowRequest();
通过查看UpdateDeviceShadowRequest文件,可以知道我们需要调用setProductKey和setDeviceName 及setShadowMessage 这三个函数,来从服务端传送更新设备影子的信息;这三个参数的意思分别是配置产品key,配置设备名称,配置需要更新的设备影子信息.
其中影子信息是一个json的格式字符串,其中method的值需要为update;
$request->setProductKey($pkey);
// {"method":"update","state":{"reported":{},"desired":{"window":"open"}},"metadata":{"reported":{}},"timestamp":1511860984,"version":9}
$request->setDeviceName($devname);
$request->setShadowMessage($shadowmsg);
调用通用的网络查询操作后,将操作是否成功的返回结果显示在网页上:
echo 'RequestId :'.$response->RequestId.'<br>';
echo 'Success :'.$response->Success.'<hr>';
2、实际测试:
打开浏览器,转到我们框架脚本页面,这里输入我们从控制台得到的产品key值和设备名称以及最新的设备影子信息,运行提交按钮后,然后转到控制台页面,查看相关的影子信息,可以看到已经被更新到最新的了:
具体向关截图如下:
timelapse:
http://www.xunyun17.xyz/ioto/step17-UpdateDeviceShadowRequest.mp4