Skip to content

Python 集成 MQTT

安装 MQTT 服务器

添加依赖并且更新

sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update

安装 mosquitto

sudo apt-get install mosquitto

mosquitto 拥有的操作指令

ubuntu@ubuntu:~$ sudo service mosquitto
 * Usage: /etc/init.d/mosquitto {start|stop|reload|force-reload|restart|try-restart|status}

查看是否启动

shell
ubuntu@ubuntu:~$ sudo service mosquitto status
 mosquitto.service - Mosquitto MQTT Broker
     Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2024-03-09 06:52:17 UTC; 14min ago
       Docs: man:mosquitto.conf(5)
             man:mosquitto(8)
    Process: 5284 ExecStartPre=/bin/mkdir -m 740 -p /var/log/mosquitto (code=exited, status=0/SUCCESS)
    Process: 5285 ExecStartPre=/bin/chown mosquitto:mosquitto /var/log/mosquitto (code=exited, status=0/SUCCESS)
    Process: 5286 ExecStartPre=/bin/mkdir -m 740 -p /run/mosquitto (code=exited, status=0/SUCCESS)
    Process: 5287 ExecStartPre=/bin/chown mosquitto:mosquitto /run/mosquitto (code=exited, status=0/SUCCESS)
   Main PID: 5288 (mosquitto)
      Tasks: 1 (limit: 4515)
     Memory: 1.8M
        CPU: 338ms
     CGroup: /system.slice/mosquitto.service
             └─5288 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

Mar 09 06:52:17 ubuntu systemd[1]: Starting Mosquitto MQTT Broker...
Mar 09 06:52:17 ubuntu systemd[1]: Started Mosquitto MQTT Broker.

看到第四行的 active(running) 说明已经启动了

在本地终端测试

TIP

需要先安装客户端

sudo apt  install mosquitto-clients

安装好客户端之后,就可以使用命令行进行测试了。

发布的命令

mosquitto_pub 命令参数说明
-d 打印debug信息
-f 将指定文件的内容作为发送消息的内容
-h 指定要连接的域名 默认为 localhost
-i 指定要给哪个 clientId 的用户发送消息
-I 指定给哪个 clientId 前缀的用户发送消息
-m 消息内容
-n 发送一个空(null)消息
-p 连接端口号
-q 指定 QoS 的值(0,1,2)
-t 指定 topic
-u 指定 broker 访问用户
-P 指定 broker 访问密码
-V 指定 MQTT 协议版本
–will-payload 指定一个消息,该消息当客户端与 broker 意外断开连接时发出。该参数需要与 –will-topic 一起使用
–will-qos Will 的 QoS 值。该参数需要与 –will-topic 一起使用
–will-retain 指定 Will 消息被当做一个 retain 消息(即消息被广播后,该消息被保留起来)。该参数需要与 –will-topic 一起使用
–will-topic 用户发送 Will 消息的 topic

订阅的命令

mosquitto_sub 命令参数说明
-c 设定 `clean session` 为无效状态,这样一直保持订阅状态,即便是已经失去连接,如果再次连接仍旧能够接收的断开期间发送的消息。
-d 打印 debug 信息
-h 指定要连接的域名 默认为 localhost
-i 指定 clientId
-I 指定 clientId 前缀
-k keepalive 每隔一段时间,发PING消息通知 broker,仍处于连接状态。 默认为60秒。
-q 指定希望接收到 QoS 为什么的消息 默认 QoS 为 0
-R 不显示陈旧的消息
-t 订阅 topic
-v 打印消息
–will-payload 指定一个消息,该消息当客户端与 broker 意外断开连接时发出。该参数需要与 –will-topic 一起使用
–will-qos Will 的 QoS 值。该参数需要与 –will-topic 一起使用
–will-retain 指定 Will 消息被当做一个 retain 消息(即消息被广播后,该消息被保留起来)。该参数需要与 –will-topic 一起使用
–will-topic 用户发送 Will 消息的 topic

然后开两个窗口,直接在 terminal 下面先订阅,然后再发布如果测试成功说明安装没有问题。

订阅一个话题

mosquitto_sub -t test

发布一个话题 test

mosquitto_pub -t test -m "测试"

发布话题之后,订阅里面有内容就说明测试成功了。

链接服务器

默认情况下,只能进行本地连接。 如果想远程连接,就需要对服务器进行配置。

先查看配置文件

shell
buntu@ubuntu:~$ cat /etc/mosquitto/mosquitto.conf
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log

include_dir /etc/mosquitto/conf.d

第二行说明配置文件全部放在第 12 行的目录里面。

新增配置文件,并添加端口号

shell
listener 1883 0.0.0.0

允许匿名访问

shell
allow_anonymous false

链接服务器,可以使用客户端,也可以使用代码。这里我就直接以代码为示例进行测试了。

参考

EMQX vs Mosquitto | 2023 MQTT Broker 对比:https://www.emqx.com/zh/blog/emqx-vs-mosquitto-2023-mqtt-broker-comparison

https://blog.csdn.net/qq_41930631/article/details/123915782

https://www.cnblogs.com/flzidea/p/17833655.html

https://www.arubacloud.com/tutorial/how-to-install-and-secure-mosquitto-on-ubuntu-20-04.aspx

https://www.emqx.io/zh/downloads?os=Ubuntu

https://blog.csdn.net/NRWHF/article/details/131359662