【问题标题】:How to temporary disconnect from MQTT topics如何暂时断开与 MQTT 主题的连接
【发布时间】:2021-11-23 14:42:58
【问题描述】:

我实现了与代理的连接,例如:
应用程序.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()

但它再也不会订阅了。知道为什么吗?

【问题讨论】:

  • 首先应该把你的代码整理好。 (在定义它之后使用 MyClient ;缩进)

标签: python python-3.x mqtt paho


【解决方案1】:

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

您应该将您的订阅移动到 on_connect callback 然后它总是会在客户端(重新)连接后重新订阅

至于您最初的问题,最好只设置一个布尔标志并使用它来控制消息处理,而不是在您想忽略消息时取消订阅/订阅。

【讨论】:

    猜你喜欢
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    相关资源
    最近更新 更多