Я пытаюсь прервать таймлапс (записанный как цикл функции) на моем RPI, начатом с сообщения «Начать сканирование», получив сообщение «Выход».
Извините за мои познания в программировании, но я действительно застрял на этом последнем шаге!
Здесь блок кода подписчика (который представляет собой RPI и его PiCamera)
Код: Выделить всё
import time
import paho.mqtt.client as mqtt
from time import sleep
from datetime import datetime, timedelta
from picamera import PiCamera
import subprocess
import pathlib
import socket
camera = PiCamera()
Broker = "192.168.1.100"
Port = 1883
# topics
pub_topic = "DIC/scanning"
sub_topic = "DIC/keyboard"
# on connect
def on_connect(mqttc, obj, flags, reason_code):
print(f"rc :" + str(reason_code))
mqttc.subscribe(sub_topic)
# on message
def on_message(mqttc, obj, msg):
print(str(msg.topic) + " " + str(msg.qos) + " " + str(msg.payload))
if if msg.payload.decode() == "StartScanning":
while True:
timelapse()
elif msg.payload.decode() == "Quit" :
timelapse.hasbeencalled=False
#fonction scanning avec timelapse
def timelapse():
hostName = socket.gethostname()
pathlib.Path('/home/pi/Desktop/DIC_' + hostName).mkdir(parents=True,exist_ok=True)
fileName= datetime.now().strftime("%Y%m%d_%H-%M-%S-%f")+".jpg"
camera.resolution = (2592, 1944) #picture resolution
camera.capture('/home/pi/Desktop/DIC_' + hostName + '/' + fileName)
#camera.capture('/home/pi/Desktop/DIC_RPI1/RPI1_' + fileName)
sleep(1)
#on subscribe
def on_subscribe(mqttc, obj, mid, reason_code_list):
print("Subscribed: " + str(mid) + " " + str(reason_code_list))
#on log
def on_log(mqttc, obj, level, string):
print(string)
# on publish
def on_publish(mqttc, obj, mid):
print(f"risposta inviata con message id:" + str(mid))
# connect MQTT client
mqttc = mqtt.Client() #(mqtt.CallbackAPIVersion.VERSION1)
mqttc.on_subscribe = on_subscribe
mqttc.on_connect = on_connect
mqttc.on_message = on_message
mqttc.on_publish = on_publish
mqttc.connect("192.168.1.100", 1883, 60)
#mqttc.subscribe(sub_topic)
mqttc.loop_forever()
Я также пытался опубликовать два сообщения «Начать сканирование» и «Выход» в двух темах и подписаться на них, но поскольку работает функция цикла, я не могу получать другие сообщения от издателя.
Подробнее здесь: https://stackoverflow.com/questions/785 ... e-from-a-p