这节课我们介绍通过MQTT协议在华东2节点上,进行设备上报的操作。基于阿里云IOT统一架构,上报都要经过MNS消息服务,所以大体流程和第三课类似,这回我们计划做的效果为:设备的状态和温度上报,然后在网页上查看上报的结果。
1、上报信息,我们新建一个名字为WenDu的TOPIC,使得看起来设备更具个性化。在上一节课的基础上,我们在消息通信中通过定义TOPIC类实现,操作截图如下:
2、然后我们配置MNS,因为我们要得到设备的消息和状态,所以在网页的服务端订阅一栏中,我们选择设备上报消息和设备状态变化通知两个复选框。截图如
3、修改模拟设备端代码,在目录aliot_sdk_v1.0.1_release/sample/mqtt下,修改mqtt.c文件:
cd aliot_sdk_v1.0.1_release/sample/mqtt
vi mqtt.c
更新其中的PRODUCT_KEY,DEVICE_NAME和DEVICE_SECRET,修改TOPIC_DATA为我们定义的温度TOPIC:
#define TOPIC_DATA "/"PRODUCT_KEY"/"DEVICE_NAME"/WenDu"
因为我们只需设备上报的温度值即可,所以修改第199行代码为:
msg_len = snprintf(msg_pub, sizeof(msg_pub), "26.85");
例程代码为上报100条消息,我们由于要得到状态,所以只需上报一次消息即可,所以修改第222行代码为:
} while (cnt < 1);
然后,保存,退出,编译。
4、修改服务器端代码,这次我们在目录php_sdk/Samples/Queue/下,新建一个RecvMsg.php来测试:
cd php_sdk/Samples/Queue/
vi RecvMsg.php
参照CreateQueueAndSendMessage.php的例子,我们做两次接收操作,每次超时时间都为默认30秒,
第一次接收为得到设备状态,设备状态的结构为一个多层json包,我们先取得第一层的messagetype和topic,messagetype这个值应该为STATUS,topic的格式为/as/mqtt/status/队列名/32字节特定字符。
在第二层的payload中,用base64编码了诸多的设备状态相关信息,我们把payload用base64解码后,取出其中time和status这两个比较有用的信息并显示到网页上。最后相关的php代码如下:
$body = $res->getMessageBody();
$jd=json_decode($body);
$jd1=json_decode(base64_decode($jd->payload));
$time=$jd1->time;
$status=$jd1->status;
$type = "消息类型 : ".$jd->messagetype;
$topic = "接收到的主题名称 : ".$jd->topic;
$time="设备状态变化的时间 :".$jd1->time;
$status="设备状态".$jd1->status;
echo $type."<br>";
echo $topic."<br>";
echo $time."<br>";
echo $status."<br><hr>";
接下来,我们修改接收设备信息的代码,类似第三课,因为payload就是温度值,所以我们用base64解码payload后,直接显示在网页上,相关代码如下:
$body = $res->getMessageBody();
$jd=json_decode($body);
$type = "消息类型 : ".$jd->messagetype;
$topic = "接收到的主题名称 : ".$jd->topic;
$payload = "当前温度 : ".base64_decode($jd->payload)."摄氏度";
echo $type."<br>";
echo $topic."<br>";
echo $payload."<br>";
保存退出后,
最后验证下我们的修改结果,首先在浏览器执行我们的Php脚本,路径类似:
HTTP://www.xunyun17.xyz/aliiot/lesson6/php_sdk/Samples/Queue/RecvMsg.php,
然后在模拟设备端运行我们的程序:./mqtt
然后查看网页接收到的结果,如截图
附件:
timelapse:
http://xunyun17.xyz/iottimelapse/lesson6.mp4
-------------------------
谢谢你的关注;
很抱歉,网站前段时间重新搭建,新的地址列表如下,一共10节课和相关视频:
http://www.xunyun17.xyz/aliiot.php
第六课的视频链接:
http://www.xunyun17.xyz/iottimelapse/lesson6.mp4
由于近期在忙着学习其他知识,计划明年再出一些教程和视频.
-------------------------
引用第1楼mysky12349于2017-08-28 16:32发表的 Re小白学习IOT 第六课 华东2节点mqtt上报 :
设备上传的数据,有没有一个网页页面可以显示出来。我们现在做设备接入。那些PHP不会搞。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。