504 字
3 分钟
通过Ubuntu服务器部署Mqtt服务的记录

通过Ubuntu服务器部署Mqtt服务的记录#

1.设备信息#

  1. 物联网设备:ML307R,度云DTU固件
  2. 服务器:阿里云轻应用服务器
  3. linux版本:Ubuntu 24.02

2.物联网设备部署#

1.部署方式#

使用物联网设备提供的网站进行设置修改

2.参数记录#

网络通道参数#

通道类型使用MQTT,域名使用服务器公网ip,端口号选择1883

订阅自定义为:test/topic/down,发布消息自定义为:test/topic/up

QOS等级为1,publish参数retain为0

基本参数#

心跳包开启,自定义字符串为hello,心跳间隔为600000ms

3.服务器端部署(代码问AI)#

1.EMQX#

防火墙#

设置阿里云服务器防火墙白名单,放行端口请求

图形化界面#

访问 公网ip:18083 进入图形化界面配置

调试#

通过WebSocket 客户端,调试订阅和发送

2.数据库部署#

数据库使用MySQL,读取逻辑为截取所有向服务器发送的MQTT数据,进行存储

数据处理脚本名:mqtt_to_mysql.py

自动运行脚本名:mqtt-saver.service

虚拟环境开启指令:source ~/mqtt_venv/bin/activate

数据查看:

##查看指令
mysql -u emqx_user -p123456 -D emqx_data -e "
SELECT '--- 当前总记录数 ---' AS '';
SELECT count(*) AS total_rows FROM mqtt_msg;
SELECT '--- 最近20条数据 (精简模式) ---' AS '';
SELECT id, device_id, tds, cod, ph, temp, hum, created_at FROM mqtt_msg ORDER BY id DESC LIMIT 20;"
##监控器指令
# 每 1 秒刷新一次
watch -n 1 'mysql -u emqx_user -p123456 -D emqx_data -e "SELECT count(*) AS Total FROM mqtt_msg; SELECT id, device_id, tds, cod, ph, temp, hum, created_at FROM mqtt_msg ORDER BY id DESC LIMIT 40;"'
##重启指令
# 1. 重新加载系统服务配置
sudo systemctl daemon-reload
# 2. 重启你的脚本服务
sudo systemctl restart mqtt-saver.service
# 3. 再次查看日志
sudo journalctl -u mqtt-saver -f

数据库结构:

CREATE TABLE IF NOT EXISTS mqtt_msg (
id INT AUTO_INCREMENT PRIMARY KEY,
device_id VARCHAR(50), -- 对应 JSON 中的 id
tds FLOAT,
cod FLOAT,
toc FLOAT,
uv254 FLOAT,
ph FLOAT,
temp FLOAT,
hum FLOAT,
zhexian1 FLOAT,
zhexian2 FLOAT,
raw_data TEXT, -- 保留一份原始数据备份
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
通过Ubuntu服务器部署Mqtt服务的记录
https://fuwari.vercel.app/posts/通过ubuntu服务器部署mqtt服务的记录/
作者
南星
发布于
2026-01-10
许可协议
CC BY-NC-SA 4.0