当前位置: 首页 > news >正文

php 对接mqtt 完整版本,订阅消息,发送消息

首先打开链接如何在 PHP 项目中使用 MQTT

根据文章让所用依赖安装一下: composer require php-mqtt/client

安装之后弄一个部署
在这里插入图片描述
之后在工具里边可以相应链接上
在这里插入图片描述
接下来是代码:

 /**** 订阅消息* @return void* @throws \PhpMqtt\Client\Exceptions\ConfigurationInvalidException* @throws \PhpMqtt\Client\Exceptions\ConnectingToBrokerFailedException* @throws \PhpMqtt\Client\Exceptions\DataTransferException* @throws \PhpMqtt\Client\Exceptions\InvalidMessageException* @throws \PhpMqtt\Client\Exceptions\MqttClientException* @throws \PhpMqtt\Client\Exceptions\ProtocolNotSupportedException* @throws \PhpMqtt\Client\Exceptions\ProtocolViolationException* @throws \PhpMqtt\Client\Exceptions\RepositoryException*/public function dingyue(){$server = '*********.aliyun.emqxcloud.cn';//连接地址$port = 1883;$clientId = rand(5, 15);$username = '用户名';$password = '密码';$clean_session = false;$mqtt_version = MqttClient::MQTT_3_1_1;$connectionSettings = (new ConnectionSettings)->setUsername($username)->setPassword($password)->setKeepAliveInterval(60)->setLastWillTopic('emqx/test/last-will')->setLastWillMessage('client disconnect')->setLastWillQualityOfService(1);$mqtt = new MqttClient($server, $port, $clientId, $mqtt_version);$mqtt->connect($connectionSettings, $clean_session);//订阅消息//      下边是轮询订阅,订阅多个设备//        查数据库中设备列表$list = DeviceBall::where(['topic'=>['<>','']])->field('topic')->select();
//        获取topic$list = array_column($list, 'topic');//去重$list = array_unique($list);
//        dump($list);exit;foreach ($list as $i) {$mqtt->subscribe('CIOT/2000/DEVICE/' . $i, function ($topic,$message) use ($mqtt, $i) {printf("Received message on topic [%s]: %s\n", $topic, $message);$message = json_decode($message, true);if (isset($message['Body']['Info']['Msg']['Pass'])) {if ($message['Body']['Info']['Msg']['Pass'] == 1) {
//                        关闭订单$ball_id = DeviceBall::where(['topic' => $i])->find();$order_no = BallOrder::where(['ball_id' => $ball_id['id']])->order('id DESC')->where('status', 1)->value('order_no');$this->confirmorder($order_no);//语音指令,提前关闭,电源关闭$payload = array('Header' => ["Code" => '1004',"Time" => time() . '000',"Sign" => "lvzaina"],'Body' => ["MsgId" => time(),'Cmd' => "Voice",'Index' => 41]);$mqtt->publish(// topic'CIOT/2000/HOST/' . $i,// payloadjson_encode($payload),// qos0,// retaintrue);//可以关闭锁球器//发送关闭指令$payload = array('Header' => ["Code" => '1004',"Time" => time() . '000',"Sign" => "lvzaina"],'Body' => ["Mode" => "0","MsgId" => time(),'Cmd' => "Order",'ID' => 1,'Delay' => 0,'Type' => 0,"DCL" => 0,]);$mqtt->publish(// topic'CIOT/2000/HOST/' . $i,// payloadjson_encode($payload),// qos0,// retaintrue);} else {//异常,播报语音,不关闭锁球器,关锁失败请检车$payload = array('Header' => ["Code" => '1004',"Time" => time() . '000',"Sign" => "lvzaina"],'Body' => ["MsgId" => time(),'Cmd' => "Voice",'Index' => 45]);$mqtt->publish(// topic'CIOT/2000/HOST/' . $i,// payloadjson_encode($payload),// qos0,// retaintrue);}}}, 0);}$mqtt->loop(true);}

发送指令

static function publish(){$server = '********ted.aliyun.emqxcloud.cn';$port = 1883;$clientId = rand(5, 15);$username = '用户名';$password = '密码';$clean_session = false;$mqtt_version = MqttClient::MQTT_3_1_1;$connectionSettings = (new ConnectionSettings)->setUsername($username)->setPassword($password)->setKeepAliveInterval(60)->setLastWillTopic('emqx/test/last-will')->setLastWillMessage('client disconnect')->setLastWillQualityOfService(1);$mqtt = new MqttClient($server, $port, $clientId, $mqtt_version);$mqtt->connect($connectionSettings, $clean_session);$payload = array('Header' => ["Code" => '1004',"Time" => time() . '000',"Sign" => "lvzaina"],'Body' => ["Mode" => "0","MsgId" => time(),'Cmd' => "Check",]);$mqtt->publish(// topic'CIOT/2000/HOST/RE2BBEEC78',//推送的地址// payloadjson_encode($payload),// qos0,// retaintrue);}

上边是代码,下边事最重要的

1首先如果在本地测试的话,新建一个.bat文件,放在根目录
在这里插入图片描述
.bat文件内容,然后双击文件执行,这里执行的是上边订阅消息的方法,执行之后,可以在小黑窗里边看到打印的信息

chcp 65001
@echo off
:loop
E:\phpstudy_pro\Extensions\php\php7.4.3nts\php.exe public/index.php api/Billiards/dingyue
ping -n 3 127.1 >nul
goto loop
pause

2,如果是在linux中执行

新建一个.sh文件
在这里插入图片描述
.sh文件内容

#!/bin/bash
while true
do# 这里是要执行的代码/www/server/php/72/bin/php public/index.php api/Billiards/dingyue# 这里是要执行的代码endDate=`date +"%Y-%m-%d %H:%M:%S"`echo "At [$endDate] Successful"echo "----------------------------------------------------------------------------"sleep 3
done

在这里插入图片描述

开启列队:运行队列的代码

nohup bash run-api.sh >> run-api.out &
然后敲回车敲两下
查看执行文件返回内容
tail -f run-api.out
在这里插入图片描述
执行前,要看下是否已经在运行:
ps aux | grep bash
在这里插入图片描述
如果已经在执行
结束命令:
kill -9 进程号(256300)

然后再执行ps aux | grep bash 看是否已经停止,重新启动即可。

这样一个.sh文件就启动了

相关文章:

php 对接mqtt 完整版本,订阅消息,发送消息

首先打开链接如何在 PHP 项目中使用 MQTT 根据文章让所用依赖安装一下&#xff1a; composer require php-mqtt/client 安装之后弄一个部署 之后在工具里边可以相应链接上 接下来是代码&#xff1a; /**** 订阅消息* return void* throws \PhpMqtt\Client\Exceptions\Confi…...

谈谈 ES 6.8 到 7.10 的功能变迁(6)- 其他

这是 ES 7.10 相较于 ES 6.8 新增内容的最后一篇&#xff0c;主要涉及算分方法和同义词加载的部分。 自定义算分&#xff1a;script_score 2.0 Elasticsearch 7.0 引入了新一代的函数分数功能&#xff0c;称为 script_score 查询。这一新功能提供了一种更简单、更灵活的方式来…...

【苍穹外卖】问题笔记

【DAY1 】 1.VCS找不到 好吧&#xff0c;发现没安git 接着发现安全模式有问题&#xff0c;点开代码信任此项目 2.导入初始文件&#xff0c;全员爆红 好像没maven&#xff0c;配一个 并在设置里设置好maven 3.启用注解&#xff0c;见新手苍穹 pom.xml改lombok版本为1.1…...

脑机接口SSVEP 信号特征提取技术术语

目录 背景简介 1. 最小能量组合&#xff08;MEC&#xff09;和最大对比组合&#xff08;MCC&#xff09; 2. 典型相关分析&#xff08;CCA&#xff09; 3. 滤波器组CCA&#xff08;FBCCA&#xff09; 4. 二进制子带CCA&#xff08;BsCCA&#xff09; 5. 融合CCA&#xff…...

【Veristand】Veristand 预编写教程目录

很久没有更新&#xff0c;最近打算出一期Veristand教程&#xff0c;暂时目录列成下面这个表格&#xff0c;如果各位有关心的遗漏的点&#xff0c;可以在评论区提问&#xff0c;我后期可以考虑添加进去&#xff0c;但是提前声明&#xff0c;太过小众的点我不会&#xff0c;欢迎各…...

C#光速入门的指南

以下是一份C#快速入门的指南&#xff0c;涵盖了基础语法、面向对象编程、输入输出、异常处理等方面&#xff0c;帮助你快速上手C#。 1. 开发环境搭建 要开始使用C#进行编程&#xff0c;你需要安装开发环境。最常用的是Visual Studio&#xff0c;它提供了丰富的工具和功能&…...

深入探索 STM32 微控制器:从基础到实践

一、引言 在当今的嵌入式系统领域&#xff0c;STM32 系列微控制器凭借其高性能、低功耗、丰富的外设以及广泛的应用场景&#xff0c;成为了众多开发者的首选。无论是在工业控制、智能家居、医疗设备&#xff0c;还是在消费电子等领域&#xff0c;STM32 都展现出了强大的生命力…...

Oracle性能调优(一):时间模型统计

Oracle性能调优(一):时间模型统计 时间模型统计视图时间模型统计指标时间模型统计视图 📖 DB Time的含义: DB Time表示前台会话在数据库调用中所花费的总时间,它是衡量数据库实例总负载的一个重要指标。DB Time是从实例启动时开始累计测量的,其计算方法是将所有前台会话…...

前端Npm面试题及参考答案

目录 npm 是什么?它的主要作用是什么? npm 包管理工具与 Yarn 有何不同? npm 的 package.json 文件有哪些重要字段? 什么是 npm 依赖?如何在项目中安装、更新和移除依赖? npm 的 node_modules 目录是什么?它的作用是什么? 什么是 npm 脚本?如何在 package.json 中…...

记一次线上Tomcat服务内存溢出的问题处理

背景&#xff1a;JavaWeb项目部署在Tomcat服务器上&#xff0c;服务器用的Windows。 问题表现&#xff1a;系统出现偶发性无法访问&#xff08;隔几天就会在早上无法访问&#xff09; Tomcat的日志catalina中&#xff0c;有如下报错信息。 java.lang.OutOfMemoryError: GC ov…...

nist关于rsa中p,q的要求

NIST.FIPS.186-4 美国国家标准与技术研究院&#xff08;National Institute of Standards and Technology&#xff0c;NIST&#xff09; FIPS,美国联邦信息处理标准&#xff08;Federal Information Processing Standard&#xff09; Criteria for IFC Key Pairs B.3.1 Crite…...

Vue3项目如何使用TailWind CSS保姆级教程

‌一、简单介绍一下TailWind CSS TailWind CSS是一个实用工具优先的 CSS 框架&#xff0c;它通过提供大量的原子化 CSS 类&#xff0c;允许开发者通过组合这些类来快速构建界面&#xff0c;而无需编写额外的 CSS 文件。这种设计理念使得开发过程更加直观和高效&#xff…...

NO.22十六届蓝桥杯备战|一维数组|七道练习|冒泡排序(C++)

B2093 查找特定的值 - 洛谷 题⽬要求下标是从0开始的&#xff0c;和数组的下标是吻合的&#xff0c;存放数据应该从下标0开始n的取值范围是1~10000数组中存放的值的绝对值不超10000&#xff0c;说明int类型就⾜够了找到了输出下标&#xff0c;找不到要输出-1&#xff0c;这⼀点…...

Mysql的索引失效

MySQL 的索引失效指的是&#xff1a;尽管在表上建立了索引&#xff0c;但在某些查询场景下&#xff0c;MySQL 优化器却没有利用这些索引&#xff0c;从而导致查询走了全表扫描&#xff0c;性能大大降低。下面详细说明几种常见的导致索引失效的情况及其原因&#xff1a; 1. 对索…...

现代前端框架渲染机制深度解析:虚拟DOM到编译时优化

引言&#xff1a;前端框架的性能进化论 TikTok Web将React 18迁移至Vue 3后&#xff0c;点击响应延迟降低42%&#xff0c;内存占用减少35%。Shopify采用Svelte重构核心交互模块&#xff0c;首帧渲染速度提升580%。Discord在Next.js 14中启用React Server Components后&#xf…...

set 和 map 的左右护卫 【刷题反思】

1. 相近的营业额 1.1 题目 题目描述&#xff1a;我们定义&#xff0c;一天营业额的最小波动 min { | 该天以前某一天的营业额 - 该天营业额 | } 特别的&#xff0c;第一天的营业额最小波动为第一天的营业额 输入描述&#xff1a;第一行 n &#xff08;n < 32767&#xf…...

【Linux高级IO】多路转接(poll epoll)

目录 1. poll 2. epoll 2.1 epoll_ctl 2.2 epoll_wait 2.3 epoll原理 2.4 epoll的工作模式 2.5 epoll的惊群效应 使用建议 总结 1. poll poll也是实现 I/O 多路复用的系统调用&#xff0c;可以解决select等待fd上限的问题&#xff0c;将输入输出参数分离&#xff0c;不需要…...

Linux上用C++和GCC开发程序实现两个不同PostgreSQL实例下单个数据库中多个Schema稳定高效的数据迁移到其它PostgreSQL实例

设计一个在Linux上运行的GCC C程序&#xff0c;同时连接三个不同的PostgreSQL实例&#xff0c;其中两个实例中分别有两个数据库中多个Schema的表结构分别与第三实例中两个数据库中多个Schema个结构完全相同&#xff0c;同时复制两个实例中两个数据库中多个Schema里的所有表的数…...

Linux下的网络通信编程

在不同主机之间&#xff0c;进行进程间的通信。 1解决主机之间硬件的互通 2.解决主机之间软件的互通. 3.IP地址&#xff1a;来区分不同的主机&#xff08;软件地址&#xff09; 4.MAC地址&#xff1a;硬件地址 5.端口号&#xff1a;区分同一主机上的不同应用进程 网络协议…...

Windows在多网络下指定上网接口

Windows在多网络下指定上网接口 一、说明 设备情况&#xff1a;win11&#xff0c;同时连接了有线网和WLAN&#xff0c;有线网连接着NAS必须保持连接。需求&#xff1a;有些情况时&#xff0c;有线网无网络而WLAN有网&#xff0c;但系统仍走着有线导致无法上网。 二、方法 过…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...