接收来自mqtt的消息,同时使用计时器



项目需要开灯,并在最后一个"ON";由运动传感器给出的信号。我的主要问题是在循环中重新启动计时器时接收开启消息的逻辑,这对python来说有点陌生,所以到目前为止我得到的是:

import paho.mqtt.client as mqtt
import time
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(13,GPIO.OUT)
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("Garage/Outside/+/PIR")
def on_message(client, userdata, msg):
if msg.payload.decode() == "ON":
GPIO.output(13,GPIO.HIGH)
print("Light is on")
startTime = time.perf_counter()
endTime = startTime
while True:
print(endTime, startTime)
endTime += 1
time.sleep(1)
if endTime - startTime >= 60:
GPIO.output(13,GPIO.LOW)
print("Light is off")
client = mqtt.Client()
client.connect("192.168.0.160",1883,60)
client.on_connect = on_connect
client.on_message = on_message

client.loop_forever()

您不能在on_message回调中进行阻塞调用,此函数需要尽快返回,以允许MQTT客户端继续接收消息并处理与代理的ping。

如果您想根据收到的消息执行长时间运行的任务,则需要在单独的线程上运行该任务。

所以你需要移动while True:循环。

最新更新