我有一个 python 脚本,我正在尝试使用它来处理 paho mqtt 和时间延迟。我研究了类似的问题,这些问题讨论了 paho mqtt,例如Controlling Program with MQTT and Python。我的python脚本如下:
这是我的脚本:
import paho.mqtt.client as mqttClient
import time
import subprocess
import os
global lastprocessed, Connected
lastprocessed = None
Connected = False #global variable for the state of the connection
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to broker")
global Connected
Connected = True #Signal connection
else:
print("Connection failed")
def on_message(client, userdata, message):
global lastprocessed
if message.payload.decode() == "hello":
lastprocessed = time.time()
if lastprocessed and time.time() - lastprocessed < 20:
print("good")
broker_address= "192.168.1.111" #Broker address
port = 1883 #Broker port
user = "abcde" #Connection username
password = "12345" #Connection password
client = mqttClient.Client("Python") #create new instance
client.username_pw_set(user, password=password) #set username and password
client.on_connect= on_connect #attach function to callback
client.on_message= on_message #attach function to callback
client.connect(broker_address,port,60) #connect
client.subscribe("home/OpenMQTTGateway/433toMQTT") #subscribe
client.loop_forever() #then keep listening forever
我上面的代码发生的事情是,只要在有效负载中收到“hello”,它就会打印“good”,但如果在有效负载中收到任何其他内容,包括“hello”,它会继续打印“good”。它没有考虑 20 秒的时间。我不确定为什么?
我想要实现的目标如下:
当开始执行 python 脚本时,脚本应该打印“bad”。
这应该停止,直到在有效负载中收到“hello”。
一旦收到“hello”,“good”应该打印 20 秒,在这 20 秒内,主题中收到的任何其他消息都应该被忽略,包括“hello”。
20 秒后,脚本应该继续打印“坏”,但只打印一次,循环继续。
开满天机
相关分类