2017-10-19 6 views
0

Ich habe die folgenden Python-Skript aus dem Thread "Python MQTT Connect nur für eine begrenzte Zeit".Python MQTT Reset-Timer nach Erhalt einer Nachricht

#!/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 

wird der Kunde für 10 Sekunden warten, wenn es keine Nachricht innerhalb von 10 Sekunden, dann wird der Kunde seinen disconnect empfangen hat.

Was ich jetzt versuche, ist immer, wenn der Client eine Nachricht erhalten hat, ich möchte die StartTime zurück auf die aktuelle Zeit zurücksetzen, so dass der Client verbunden bleiben wird und nicht nach 10 Sekunden beendet wird. Ich bin mir nicht sicher, wo sollte ich die Codierung ändern, um es zu erreichen.

Antwort

1

Der Code ist fast richtig, Sie müssen nur die startTime in der on_message Callback als global markieren, so Python erstellt nicht nur eine neue lokale Variable.

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

Vielen Dank, es hat perfekt funktioniert! – Rexksvii

Verwandte Themen