上节介绍从服务端给设备发送消息后,实际使用过程中,服务端通常希望发送消息的设备能给服务端一个反馈,以便确认设备确实收到了服务端的命令或数据,这种逻辑机制在阿里IOT的套件中叫做RRPC,服务端的API接口也提供了相应的功能,
这一节就来介绍一下如何使用RRPC的功能,这个接口同样需要提供三个参数,一个是产品的key值,一个是设备名称以及消息内容;
接下来我们看一下具体实现;
1、脚本实现:
我们按照接口的要求,在框架页面上,提供产品的key值和设备名称以及消息内容,这三个输入参数框给用户输入,
产品KEY: <input type="text" name="pkey14">
设备名称: <input type="text" name="devname14">
消息内容: <input type="text" name="msgcontent14">
而在实际的实现代码中,我们只需要使用get函数提取这个变量就可以了:
$pkey = $_GET["pkey14"];
$devname = $_GET["devname14"];
$msgcontent = $_GET["msgcontent14"];
接着引用查询设备列表的接口:
$request = new Iot\RRpcRequest();
通过查看RRpcRequest.php文件,可以知道我们需要调用setProductKey和setDeviceName以及setRequestBase64Byte,setTimeout四个函数,来给服务端传送RRPC的信息;这四个参数里,前两个是配置产品key和设备名称,第三个参数是配置base64格式的消息内容,第四个参数是配置服务端接受到设备发来信息的超时时间,意思是在多久时间之内,如果服务端收不到设备的反馈确认,则认为超时,单位为毫秒.这里配置为3000及3秒钟.
$request->setProductKey($pkey);
// /8HDXYtlB7aw/hello1/get
$request->setDeviceName($devname);
$request->setRequestBase64Byte(base64_encode($msgcontent));
$request->setTimeout(3000);
调用通用的网络查询操作后,最后对返回信息进行分析;返回的信息中,和以前不同,新增加了三个名称分别为:
MessageId PayloadBase64Byte RrpcCode
这里依次介绍:
MessageId : 发送消息的id,全网唯一,18位数字,用于后续消息管理.
PayloadBase64Byte : 设备端的状态字符串,通常为 : "rrpc client has received message!",意思为设备端已经正常接收到服务端发送的字符串;
RrpcCode : 这个RRPC过程的结果状态,一般为'success',表示发送成功;
最后将这个五个信息依次显示在网页上:
echo 'MessageId :'.$response->MessageId.'<br>';
echo 'PayloadBase64Byte :'.base64_decode($response->PayloadBase64Byte).'<br>';
echo 'RrpcCode :'.$response->RrpcCode.'<br>';
echo 'RequestId :'.$response->RequestId.'<br>';
echo 'Success :'.$response->Success.'<hr>';
2、设备端模拟:
和上一节给设备发送信息类似,这一节也需要设备的模拟,下载开发包的命令和上节类似,这里只介绍修改RRPC例子的部分:
2.1 修改mqtt_rrpc-example.c文件,改为自己产品和设备信息:
vi iotkit-embedded-master/iotkit-embedded-master/sample/mqtt/mqtt_rrpc-example.c
2.2 修改后,保存退出,重新编译源码;
cd iotkit-embedded-master/iotkit-embedded-master/
make clean
sudo make all
2.3 编译结束后,运行编译后的例子文件:
output/release/bin/mqtt_rrpc-example
3、实际测试:
先运行模拟设备,然后打开浏览器,转到我们框架脚本页面,这里输入我们从控制台得到的产品key值和要发送的消息名称以及消息内容,运行提交按钮后,可以得到是否发送成功的信息,然后到设备模拟终端,查看状态,可以看到已经接受到服务端发来的信息:
具体向关截图如下:
http://www.xunyun17.xyz/ioto/step14-RRpcRequest.mp4
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。