Не могу получить приложение Flask и другую функцию, чтобы работать вместе, используя Flask Script - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть Raspberry Pi, и мне удалось получить отдельные элементы, работающие независимо. Чтобы ощутить движение и сделать снимок, еще один для потоковой передачи камер через мою локальную сеть, используя Flask.

Однако я хочу, чтобы они запускались одновременно, я смотрел на модуль Flask Script и функциональность Manger. Я верю, что у меня все правильно настроено. Однако когда я запускаю команду runserver, на самом деле ничего не происходит.

Возможно ли то, что я хочу сделать, даже с помощью Flask Script? Если это мой подход правильный, или что будет лучшим решением.

Спасибо

Вот мой скрипт на python:

from importlib import import_module
import os
from flask_script import Server, Manager
from flask import Flask, render_template, Response
from camera import Camera
from gpiozero import MotionSensor
import time

# Code to take a snapshot when motion is detected
def senseMotion():
    pir = MotionSensor(4)

    while True:
        if pir.motion_detected:
            print('Motion detected')
            Camera.snapshot()
            time.sleep(60)

app = Flask(__name__)
manager = Manager(app)


# Flask app to view video stream in browser
@app.route('/')
def index():
    """Video streaming home page."""
    return render_template('index.html')


def gen(camera):
    """Video streaming generator function."""
    while True:
        frame = camera.get_frame()
        yield (b'--frame\r\n'
           b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')


@app.route('/video_feed')
def video_feed():
    """Video streaming route. Put this in the src attribute of an img tag."""
    return Response(gen(Camera()),
                mimetype='multipart/x-mixed-replace; boundary=frame')

@manager.command
def runserver():
    senseMotion()
    app.run(host='0.0.0.0', threaded=True)


if __name__ == "__main__":
    manager.run()

#if __name__ == '__main__':
    #app.run(host='0.0.0.0', threaded=True)

1 Ответ

0 голосов
/ 20 ноября 2018

gpiozero.MotionSensor имеет событие when_motion, которое запускает код в другом потоке.

, поэтому используйте pir = MotionSensor(4)

и

pir.when_motion = MakeSnapshot

Конечно, вам нужно определить функцию MakeSnapshot()

Подробнее об этом классе: https://gpiozero.readthedocs.io/en/stable/api_input.html#motion-sensor-d-sun-pir

...