【阿里云生活物联网架构师专题 ⑨】基于TP6 基于AMPQ协议接收阿里云物联网设备的各种状态数据,实现m2m流转;
- 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。
1、esp32接入阿里云物联网平台,实现天猫精灵语音控制;
2、esp8266直连接入阿里云物联网平台,实现天猫精灵找队友零配网功能和语音控制;
3、esp32 sdk 直连接入天猫精灵IOT开放平台,实现天猫精灵找队友零配网功能和语音控制;
4、如何在天猫精灵IOT开放平台二次开发智能设备的 H5控制面板;
5、分享可商用的ESP8266 SDK连接阿里云物联网生活平台的在线远程升级OTA笔记。
6、ESP8266接入阿里生活飞燕平台国际版,实现亚马逊Alexa Echo音响语音控制。
7、阿里云物联网平台的网关-子设备理论协议说明,支持Zigbee/ble等没上云能力的设备;;
8、基于在 SpringBoot Java 私有云上接收阿里云物联网平台设备的各种状态数据,实现m2m流转;
9、基于TP6 基于AMPQ协议接收阿里云物联网设备的各种状态数据,实现m2m流转;;
文章目录
- 寄言
- 一、前言
- 什么是服务器订阅?
- 适用场景
- 二、集成步骤
- 三、常见问题
- 另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!
寄言
我写过很多物联网控制的博文系列,包括微信公众号、微信小程序控制硬件,私有云对接天猫精灵服务器,抑或是硬件端 esp8266/esp32
等系列博文,这是一个一个专题是写下我们如何在阿里云物联网上全栈开发我们的应用专题,让我们无须企业账号也可以体验设备-云端-App” 的过程;让我们变得更强,一个人担任一个公司的全部职责,全栈开发物联网攻城狮前进;
我会带领大家轻轻松松地把自己的设备接入天猫精灵,告别 “单机时代”,走进语音控制物联网时代。 有疑问请留言区留言,或者加群大伙们讨论;写总结,写博文不容易,望大家多多体谅!
- 自带资料:
- git 分布式管理软件的基本使用;
- 硬件开发:乐鑫 esp8266、esp32模块一个;具备 c 语言基础 ,不需要很熟练;
- 移动端开发:android 端具备
java
、vue.js
开发语言,AndroidStudio
环境; - 服务器端开发:php 开发,熟悉 服务器运行、部署等原理操作;
一、前言
去年介绍了如何在 SpringBoot 框架上面实现流转阿里云物联网设备信息到私有服务器。今天给大家带来在 TP6 PHP上实现此功能。
什么是服务器订阅?
私有云可以直接订阅产品下多种类型的消息:设备上报消息、设备状态变化通知、设备生命周期变更、网关发现子设备上报、设备拓扑关系变更等。配置服务端订阅后,物联网平台会将产品下所有设备的已订阅类型的消息转发至您的服务器。
适用场景
- 1、服务端订阅适用于单纯的接收设备数据的场景,并且适用于高并发场景。
- 2、服务端接收产品下全部设备的订阅数据。
- 3、如果您有多个服务器消费同一个产品的订阅消息,消息会随机转发至某个服务器。
- 4、服务端订阅与规则引擎数据流转的使用场景和能力对比,请参见数据流转方案对比。
今天使用的是 TP6 架构语言,这个也是我擅长开发的架构,所以这篇我给大家介绍下如何集成AMQP高级消息队列协议,配置AMQP服务端订阅后,物联网平台会将产品下所有已订阅类型的消息,通过AMQP通道推送至私有云。
AMQP服务端订阅消息流转流程图:
二、集成步骤
①、首先安装 TP6 , 这里使用 git 克隆最新 TP6 源码;
// 克隆
git clone https://gitee.com/top-think/think
// 安装依赖
cd think && composer install
②、安装阿里云AMPQ的运行环境依赖
// 安装 stomp
composer require stomp-php/stomp-php
②、在 TP6 上实现自定义命令。
php think make:command Aliyun_stomp
这时候会自动生成 app\command\Aliyun_stomp.php
文件,在其修改内容后如下:
<?php
declare (strict_types=1);
namespace app\command;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use think\facade\Config;
use Stomp\Client;
use Stomp\Network\Observer\Exception\HeartbeatException;
use Stomp\Network\Observer\ServerAliveObserver;
use Stomp\StatefulStomp;class Aliyun_stomp extends Command
{protected function configure(){// 指令配置$this->setName('app\command\aliyun_stomp')->setDescription('阿里云物联网AMPQ订阅');}protected function execute(Input $input, Output $output){// 指令输出$output->writeln('start');//参数说明,请参见AMQP客户端接入说明文档。$accessKey = Config::get('app.config.accessKey');$accessSecret = Config::get('app.config.accessSecret');$consumerGroupId = "DEFAULT_GROUP";//iotInstanceId:实例ID。$iotInstanceId = Config::get('app.config.iotInstanceId');//随意填写$clientId = "12346989";$timeStamp = round(microtime(true) * 1000);//签名方法:支持hmacmd5,hmacsha1和hmacsha256。$signMethod = "hmacsha1";//userName组装方法,请参见AMQP客户端接入说明文档。//若使用二进制传输,则userName需要添加encode=base64参数,服务端会将消息体base64编码后再推送。具体添加方法请参见下一章节“二进制消息体说明”。$userName = $clientId . "|authMode=aksign". ",signMethod=" . $signMethod. ",timestamp=" . $timeStamp. ",authId=" . $accessKey. ",iotInstanceId=" . $iotInstanceId. ",consumerGroupId=" . $consumerGroupId. "|";$signContent = "authId=" . $accessKey . "×tamp=" . $timeStamp;//计算签名,password组装方法,请参见AMQP客户端接入说明文档。$password = base64_encode(hash_hmac("sha1", $signContent, $accessSecret, $raw_output = TRUE));//接入域名,请参见AMQP客户端接入说明文档。下方 123456 替换为你的阿里云账号id, cn-shanghai 替换为你的地区代码 若是PHP开发,端口号是 61614$client = new Client('ssl://'.Config::get('app.config.accountId').'.iot-amqp.cn-shanghai.aliyuncs.com:61614');$sslContext = ['ssl' => ['verify_peer' => true, 'verify_peer_name' => false],];$client->getConnection()->setContext($sslContext);//服务端心跳监听。$observer = new ServerAliveObserver();$client->getConnection()->getObservers()->addObserver($observer);//心跳设置,需要云端每50s发送一次心跳包。$client->setHeartbeat(0, 5000);$client->setLogin($userName, $password);try {$client->connect();} catch (StompException $e) {echo "failed to connect to server, msg:" . $e->getMessage(), PHP_EOL;}//无异常时继续执行。$stomp = new StatefulStomp($client);$stomp->subscribe('/topic/#');$output->writeln('connect success .');while (true) {try {// 检查连接状态if (!$client->isConnected()) {echo "connection not exists, will reconnect after 10s.", PHP_EOL;sleep(10);$client->connect();$stomp->subscribe('/topic/#');echo "connect success.", PHP_EOL;}$msg = $stomp->read();if (($msg) != "") {// 处理消息业务逻辑。$output->writeln("Read Topic:" . $msg->getHeaders()["topic"]);$output->writeln("Read PayLoad:" . $msg->getBody());}} catch (HeartbeatException $e) {echo 'The server failed to send us heartbeats within the defined interval.', PHP_EOL;$stomp->getClient()->disconnect();} catch (Exception $e) {echo 'process message occurs error: ' . $e->getMessage(), PHP_EOL;$stomp->getClient()->disconnect();}}}
}
其次,在app\config\console
修改指令定义,指向具体的文件:
<?php
return [// 指令定义'commands' => ['start_ampq' => 'app\command\Aliyun_stomp',],
];
其次,代码部分结束, 切换到命令行工具,定位到我们的项目根目录(think文件所在的目录),执行:
php think start_ampq
如设备端上报信息,控制台就会打印出来了。
三、常见问题
- Q1:为什么无法执行自定义指令?
答:首先要保证你在
app\config\console
修改指令定义,指向具体的文件是正确的。可以通过php think list
获取支持指令列表。
- Q2:配置参数从哪里获取?
答:参考 https://help.aliyun.com/document_detail/30594.html
- Q3:如何守护进程执行此自定义命令,永久执行?
答:使用
nohup php think start_ampq &
若要停止,先查到其进程ps -ef | grep php
这时候,开始抹杀掉kill -9 5088
即可。
另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!
- 玩转无线物联网带你飞、免费加千人群讨论,群里众多国内ESP开发者,找到你一份归属,免费白嫖。
- QQ讨论一群,点击加群:434878850
- QQ讨论二群,点击加群:623325168
- 个人微信公众号:徐宏blog , 不定时推送干货文章,不推送任何广告。
- 个人邮箱:xuhongv@yeah.net 24小时在线,有发必回复!
- esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
- esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
- 关注下面微信公众号二维码,干货多多,第一时间推送!
【阿里云生活物联网架构师专题 ⑨】基于TP6 基于AMPQ协议接收阿里云物联网设备的各种状态数据,实现m2m流转;相关推荐
- 【阿里云生活物联网架构师专题 ①】esp32 sdk 直连接入阿里云物联网平台,实现天猫精灵语音控制;
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.esp32接入阿里云物联网平台,实现天猫精灵语音控制: 2.es ...
- 【阿里云生活物联网架构师专题 ②】esp8266 sdk 直连接入阿里云物联网平台,实现天猫精灵找队友零配网功能和语音控制;
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.esp32接入阿里云物联网平台,实现天猫精灵语音控制: 2.es ...
- 【阿里云生活物联网架构师专题 ⑧】基于在 SpringBoot Java私有云上接收阿里云物联网设备的各种状态数据,实现m2m流转;
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.esp32接入阿里云物联网平台,实现天猫精灵语音控制: 2.es ...
- springboot 物联网_【阿里云生活物联网架构师专题】基于在 SpringBoot Java私有云上对接阿里云物联网,实现M2M设备数据流转。...
- 近处是人生,远处是风景 - 今天与老同学小聚一餐,君子之交淡如水,忆当年青春岁月.年龄越大,志同道合的朋友越来越少了,一声朋友,足以抵过无限岁月! 在儿时,总喜欢做一些天马行空的美梦,想象着可以仗 ...
- 【阿里云生活物联网架构师专题 ④】分享可商用的ESP8266 SDK连接阿里云物联网生活平台的在线远程升级OTA笔记。
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.esp32接入阿里云物联网平台,实现天猫精灵语音控制: 2.es ...
- 阿里安全首席架构师钱磊:安全基建将成数字经济标配
"新基建"带来了新的发展机遇,也对网络空间安全带来了全新的挑战.两个多月新冠疫情磨砺,让加快发展数字化成为社会共识,以5G.数据中心等为代表的新型基础设施建设,也成为经济复苏的新路 ...
- 阿里钉钉架构师,20页ppt讲透2亿用户的钉钉系统架构实践
点击"技术领导力"关注∆ 每天早上8:30推送 来源| 云栖社区 作者| 钉速 阿里钉钉架构师--钉速,在2019年的技术大会上分享了<钉钉--基于IM技术的新一代企业 ...
- 阿里P8高级架构师:面试没你想象中的难,拿Offer也可以很轻松
阿里P8高级架构师:面试没你想象中的难,拿Offer也可以很轻松 一.概述 面试,难还是不难?取决于面试者的底蕴(技能).心态和认知及沟通技巧.面试其实可以理解为一场聊天和谈判,在这过程中有心理.思想 ...
- 阿里资深系统架构师九峰谈云计算
为什么80%的码农都做不了架构师?>>> 阿里资深系统架构师九峰谈云计算 被誉为改写IT面貌的"第三次IT革命"的主角云计算,已经从最初的"萌动& ...
最新文章
- PHP jquery瀑布流特效源码
- 开关电源异址替换实战割接
- [MATLAB粒子模拟笔记]归一化输入系数
- c现代方法 13章程序设计题 自己编写答案
- Scrapy:Python的爬虫框架----原理介绍
- Solr空间搜索原理分析与实践
- Ehcache、memcache、redis三大缓存区别
- 爬取了 B 站上的 17398 条评论,分析这部二次元番剧为何受到技术宅的追捧?
- Java关键字transient
- php smarty 手册下载,smarty教程
- 给机器学习面试者的十项建议 | 面试官角度
- 1.Hölder不等式的推广以及简单应用
- Java将汉字数字日期转换为数字日期(例如: 二〇二〇年十一月二十一日 → 2020年11月21日)
- HTML经典绝对定位图片
- 2020 年互联网大厂薪资出炉!你酸了吗
- 互联网时代个人信息安全的重要性
- 神经网络量化----吐血总结
- Hazel引擎学习(五)
- 基于SSM框架的生活论坛系统的设计与实现(附源码、论文)
- opboot怎么刷入固件_华硕RT-AC58U免拆机刷OpBoot教程-免变砖
热门文章
- 也谈谈初创公司的技术团队建设
- 机器人佐德_恐龙战队:忍者超级佐德,战斗机甲设定图太帅
- latex调行距_Overleaf 版本LaTeX初级(修改布局和行距)
- Matlab读写TIFF格式文件
- Error in if (pvalue > 0.05) { : missing value where TRUE/FALSE needed
- 如何加密Android apk
- 修改服务器监听端口,Ubuntu tacacs+ 服务器修改监听端口
- linux配置docker源,国内加速镜像(注册阿里云镜像)
- pymysql.err.InternalError: (1054, Unknown column '一组' in 'fie
- 基于java springboot物品租赁小程序源码