阿里云
1024开发者盛宴之Java专家问答专场
发表主题 回复主题
  • 1740阅读
  • 5回复

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

级别: 论坛版主
发帖
1966
云币
4134
这节课我们介绍通过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
然后查看网页接收到的结果,如截图




附件:
attach.rar (4 K) 下载次数:53



timelapse:
http://xunyun17.xyz/iottimelapse/lesson6.mp4



[ 此帖被魔咒626在2018-06-10 10:50重新编辑 ]
级别: 新人
发帖
4
云币
6
只看该作者 沙发  发表于: 2017-08-28
Re小白学习IOT 第六课 华东2节点mqtt上报
设备上传的数据,有没有一个网页页面可以显示出来。我们现在做设备接入。那些PHP不会搞。
级别: 论坛版主
发帖
1966
云币
4134
只看该作者 板凳  发表于: 2017-08-29
官方暂时没有,不过应该可以做的。
级别: 新人
发帖
1
云币
1
只看该作者 地板  发表于: 2017-11-26
Re小白学习IOT 第六课 华东2节点mqtt上报
看了楼主所有的文章,非常的精彩。但是有些还不是很懂,视频文件地址全部无法打开了,楼主可否将视频文件发送给我,我邮箱地址:3451598@qq.com 万分感谢
级别: 论坛版主
发帖
1966
云币
4134
只看该作者 4楼 发表于: 2017-11-27
谢谢你的关注;


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

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


由于近期在忙着学习其他知识,计划明年再出一些教程和视频.
[ 此帖被魔咒626在2017-11-27 02:43重新编辑 ]
级别: 论坛版主
发帖
1966
云币
4134
只看该作者 5楼 发表于: 01-01
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
[ 此帖被魔咒626在2018-01-01 21:50重新编辑 ]
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
验证问题: ECS是阿里云提供的什么服务? 正确答案:云服务器
上一个 下一个