开发者社区> 问答> 正文

小白学习IOT 第六课 华东2节点mqtt上报

这节课我们介绍通过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



展开
收起
洵云 2017-07-29 05:46:07 4498 0
3 条回答
写回答
取消 提交回答
  • Re小白学习IOT 第六课 华东2节点mqtt上报
    看了楼主所有的文章,非常的精彩。但是有些还不是很懂,视频文件地址全部无法打开了,楼主可否将视频文件发送给我,我邮箱地址: 3451598@qq.com 万分感谢
    2017-11-26 21:29:12
    赞同 展开评论 打赏
  • 官方暂时没有,不过应该可以做的。

    -------------------------

    谢谢你的关注;


    很抱歉,网站前段时间重新搭建,新的地址列表如下,一共10节课和相关视频:
    http://www.xunyun17.xyz/aliiot.php

    第六课的视频链接:
    http://www.xunyun17.xyz/iottimelapse/lesson6.mp4


    由于近期在忙着学习其他知识,计划明年再出一些教程和视频.

    -------------------------

    Re:Re小白学习IOT 第六课 华东2节点mqtt上报
    引用第1楼mysky12349于2017-08-28 16:32发表的 Re小白学习IOT 第六课 华东2节点mqtt上报 :
    设备上传的数据,有没有一个网页页面可以显示出来。我们现在做设备接入。那些PHP不会搞。

    关于IOT设备上报数据如何在网页显示,有写个脚本在网站上,也有发了个帖子连接如下,希望对你有所帮助:
    https://bbs.aliyun.com/read/573814.html?spm=5176.bbsl395.0.0.7Ip8qt
    2017-08-29 04:36:46
    赞同 展开评论 打赏
  • Re小白学习IOT 第六课 华东2节点mqtt上报
    设备上传的数据,有没有一个网页页面可以显示出来。我们现在做设备接入。那些PHP不会搞。
    2017-08-28 16:32:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
RocketMQ Client-GO 介绍 立即下载
RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载