如何暂时断开与 MQTT 主题的连接

How to temporary disconnect from MQTT topics

我实现了与代理的连接,例如:
app.py

import paho.mqtt.client as mqtt
client = mqtt.Client(client_id='my_client', clean_session=False)
my_client = MyClient(client)
try:
    my_client.start()
    while True:
        try:
            client.loop()
        except Exception as e:
            my_client.start()
except Exception as e:
    client.loop_stop()
    exit(1)

MyClient.py

class MyClient:
    def __init__(self, mqtt=None):
         self.mqtt = mqtt

    def start(self):
        self.mqtt.subscribe('some/topic')

我有部分代码要暂停收听主题:

self.mqtt.unsubscribe('some/topic')

稍后我想重新订阅它 我想再次致电 start(),例如:self.start()

但它再也没有订阅过。知道为什么吗?

在抛出异常后调用 start() 将不起作用,因为此时客户端很可能未连接。

您应该将您的订阅移至 on_connect callback,然后它将始终在客户端(重新)连接后重新订阅

至于你原来的问题,可能最好只设置一个布尔标志并用它来控制消息的处理,而不是 unsubscribing/subscribing 当你想忽略消息时。