2017-10-19 100 views
0

我從線程「Python MQTT連接只有有限的時間」下面的python腳本。Python MQTT收到消息後重置計時器

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

def on_message(client, userdata, msg): 
     if msg.topic == "foo/bar": 
       print ("test successful! Message = ", str(msg.payload.decode("utf-8"))) 
       startTime = time.time() 


def on_connect(client, userdata, flags, rc): 
     client.subscribe("foo/bar") 
     print("Client connected") 

client = mqtt.Client("Python1", clean_session=True) 
try: 
     client.connect("localhost") 
except: 
     print ("ERROR: Could not connect to MQTT") 

client.on_connect = on_connect 
client.on_message = on_message 
startTime = time.time() 
waitTime = 10 

while True: 
     client.loop() 
     elapsedTime = time.time() - startTime 
     print("Elapsed time: ", elapsedTime) 

     if elapsedTime > waitTime: 
       client.disconnect() 
       break 

客戶端將等待10秒,如果它在10秒內沒有收到任何消息,則客戶端將斷開連接。

我現在要做的是每當客戶端收到消息時,我想將startTime重置回當前時間,以便客戶端保持連接狀態,10秒後不會終止,我不知道應該在哪裏修改編碼來實現它。

回答

1

代碼幾乎是正確的,你只需要在on_message回調中將startTime標記爲全局,這樣python就不會創建一個新的局部變量。

def on_message(client, userdata, msg): 
     if msg.topic == "foo/bar": 
       print ("test successful! Message = ", str(msg.payload.decode("utf-8"))) 
       global startTime 
       startTime = time.time() 
+0

非常感謝,它工作完美! – Rexksvii