开发者社区> 问答> 正文

手把手学IOT服务端API编程[14、发消息给设备并同步返回响应]


上节介绍从服务端给设备发送消息后,实际使用过程中,服务端通常希望发送消息的设备能给服务端一个反馈,以便确认设备确实收到了服务端的命令或数据,这种逻辑机制在阿里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

展开
收起
洵云 2018-06-24 22:35:24 3343 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
CUDA MATH API 立即下载
API PLAYBOOK 立即下载
传统企业的“+互联网”-API服务在京东方的实践 立即下载