【问题标题】:Python MQTT Connect only for a limited timePython MQTT 仅在有限的时间内连接
【发布时间】:2017-05-10 09:31:29
【问题描述】:

我有一个 Python 脚本,其中我连接到 MQTT 服务器。我希望通过我订阅的主题收到消息,但如果我没有收到消息,我想完全终止脚本。

我正在使用的脚本如下所示:

#!/usr/bin/python
import sys
import json
import paho.mqtt.client as mqtt

def on_message(client, userdata, msg):
        if msg.topic == "discovery":
                data = json.loads(msg.payload)
                serial = data['serial']
                print "test successful!"
                sys.exit(0)

def on_connect(client, userdata, flags, rc):
        client.subscribe([("discovery", 2)])

client = mqtt.Client()
try:
        client.connect('localhost', 4444)
except:
        print "ERROR: Could not connect to MQTT
client.on_connect = on_connect
client.on_message = on_message
client.loop_forever()

我尝试使用 while True 语句循环并计算在启动脚本和获取消息之间经过的时间,但它似乎(显然)没有逃脱循环,即使它通过了消息。

有没有一种方法可以告诉我它连接了多长时间,当它超过这个时间时,完全终止脚本?

或者,有没有办法(就像我之前尝试过的那样)进行循环,但也要考虑在循环中传递的消息?

感谢您的建议!

【问题讨论】:

    标签: python mqtt terminate paho


    【解决方案1】:

    试试这样的

    它应该等待大约 5 秒钟的传入消息然后退出。您可以通过在 while 循环之前更改值 waitTime 来调整等待时间

    我使用了mqtt网络循环函数的版本,它只运行了很短的时间,并把它放在了一个while循环中。该循环还检查经过的时间并在退出循环之前干净地断开客户端。我还为收到消息添加了一个干净的客户端出口。

    #!/usr/bin/python
    import sys
    import json
    import paho.mqtt.client as mqtt
    import time
    
    def on_message(client, userdata, msg):
            if msg.topic == "discovery":
                    data = json.loads(msg.payload)
                    serial = data['serial']
                    print "test successful!"
                    client.disconnect()
                    sys.exit(0)
    
    def on_connect(client, userdata, flags, rc):
            client.subscribe([("discovery", 2)])
    
    client = mqtt.Client()
    try:
            client.connect('localhost', 4444)
    except:
            print "ERROR: Could not connect to MQTT"
    
    client.on_connect = on_connect
    client.on_message = on_message
    startTime = time.time()
    waitTime = 5
    while True:
            client.loop()
            elapsedTime = time.time() - startTime
            if elapsedTime > waitTime:
                    client.disconnect()
                    break
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 2015-04-10
      • 2021-12-25
      • 2014-05-17
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      相关资源
      最近更新 更多