目录
EMQ X安装
EMQ X R3.0 消息服务器默认占用的 TCP 端口包括:
1883 MQTT 协议端口
8883 MQTT/SSL 端口
8083 MQTT/WebSocket 端口
8080 HTTP API 端口
18083 Dashboard 管理控制台端口
Shell 脚本一键安装 (Linux)
curl https://repos.emqx.io/install_emqx.sh | bash
后台启动 EMQ X
emqx start
控制台 URL: http://pi.fogbow.cn:18083/ ,默认登录用户名: admin, 密码: public
EMQ X MQTT 服务器启用 SSL/TLS 安全连接
参考文档:EMQ X MQTT 服务器启用 SSL/TLS 安全连接 | EMQ
用的自签名认证方式
laravel集成
.env
#MQTT
MQTT_HOST=62.234.157.185
MQTT_PORT=1883
MQTT_ADMIN=publisher
MQTT_PASSWORD=publisher123456
composer require bluerhinos/phpmqtt
use Bluerhinos\phpMQTT;
/**
* Desc: 向EMQX发送MQTT消息
* User: dl
* Time: 2020/8/25
* @param $topic
* @param $msg
* @return array
*/
function sendEmqxMsg($topic, $msg)
{
//发送mqtt消息
$server = env('MQTT_HOST','62.234.157.185');
$port = env('MQTT_PORT','1883');
$username = env('MQTT_ADMIN','publisher');
$password = env('MQTT_PASSWORD','');
$client_id = uniqid('mqtt_');
$mqtt = new phpMQTT($server, $port, $client_id);
//如果创建链接成功
if ($mqtt->connect(true, NULL, $username, $password)) {
$res = $mqtt->publish($topic, $msg, 0);
$mqtt->close(); //发送后关闭链接
} else {
Log::debug(json_encode($mqtt,'320'));
}
}
// 发送
sendEmqxMsg("robotMsg/Yunji/$m_id", json_encode($msg_info, 320));
MQTT Topic定义规范
主题
MQTT是通过主题对消息进行分类的,本质上就是一个UTF-8的字符串,不过可以通过反斜杠表示多个层级关系。主题并不需要创建,直接使用就是了。
主题还可以通过通配符进行过滤。其中,+可以过滤一个层级,而#只能出现在主题最后表示过滤任意级别的层级。
举个例子:
building-b/floor-5:代表B楼5层
+/floor-5:代表任何一个楼的5层
building-b/#:代表B楼所有数据
注意,MQTT允许使用通配符订阅主题,但是并不允许使用通配符广播。
客户端常用订阅场景示例
robotMsg/Yunji/{m_id} //机器人消息
deviceData/{h_id}/# //订阅某个酒店的所有设备数据
deviceData/{h_id}/kg //订阅某个酒店下所有开关设备的数据
deviceData/+/kg //订阅所有酒店下所有开关设备的数据
原则
- 从大方向往小方向
- 严格区分大小写
基本方针 遵循 `场景/位置/分类`, 如:
deviceData/{m_id}/kg
deviceStatus/{m_id}/cube
如果需要下发到具体设备则需要在商户id后加入sn 如:
deviceData/{m_id}/{sn}/kg