2017-10-19 3 views
0

私は以下のpythonスクリプトをスレッド "Python MQTT Connect only time only"から持っています。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というコールバックにグローバルとしてマークするだけで、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

関連する問題