Использование Flask с основными приложениями, написанными на Python - PullRequest
0 голосов
/ 12 мая 2018

Я новичок в Flask и пытаюсь думать, как я хочу подойти к идее.

Я строю контроллер аквариума на Raspberry Pi, используя Python.Я уже построил тот, который хорошо работает на Arduino, но хотел бы перейти на Raspberry Pi и добавить веб-интерфейс.

Мой подход заключался в том, чтобы исправить код Python вместе с Flask в том же приложении.Но когда я запускал код, мне нужно было открыть браузер для веб-сервера, прежде чем приложение действительно запустится.

Мне нужен базовый код для запуска независимо от того, что происходит на веб-сервере.

Поскольку я контролирую такие вещи, как насосы верхнего насоса, главные насосы и нагреватель, мне нужно, чтобы приложение работало непрерывно, независимо от веб-сервера.

Мой вопрос: можно ли настроить Flask для работы в качестве пассивногофункция, позволяющая критической части кода работать без веб-сервера?

Я также подумал, что мог бы экспортировать данные веб-сервера в файл, а затем написать отдельное приложение для веб-сервера.Здесь есть ограничение: я хотел бы иметь возможность взаимодействовать с основным приложением из браузера (то есть включать / выключать насосы из браузера).

from flask import Flask, render_template
import datetime
import RPi.GPIO as GPIO

#use Channel numbering for rpi pins
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

#import time

import Adafruit_GPIO.SPI as SPI
import Adafruit_MCP3008

# Software SPI configuration:
CLK  = 18   # physical pin 12
MISO = 23   # physical pin 16
MOSI = 24   # physical pin 18
CS   = 25   # physical pin 25
mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)

# Setup Relays
Relay_Ch1 = 26   # physical pin 37
Relay_Ch2 = 20   # physical pin 38
Relay_Ch3 = 21   # physical pin 40

GPIO.setup(Relay_Ch1,GPIO.OUT)
GPIO.setup(Relay_Ch2,GPIO.OUT)
GPIO.setup(Relay_Ch3,GPIO.OUT)

#Initialize Relays to OPEN

GPIO.output(Relay_Ch1,GPIO.HIGH)
GPIO.output(Relay_Ch2,GPIO.HIGH)
GPIO.output(Relay_Ch3,GPIO.HIGH)

#Optical Switch Setup
OptSw1 = 17   # physical pin 11
OptSw2 = 27   # physical pin 13
GPIO.setup(OptSw1, GPIO.IN)
GPIO.setup(OptSw2, GPIO.IN)

def RSVR():
        values = float(mcp.read_adc(0))
    global levels
        levels = int(values/1023*100)

def TOPOFF():
    global Status1, Status2
    OptSwSts1=GPIO.input(OptSw1)
    if OptSwSts1 == True:
        Status1 = "Close"
    else:
        Status1 = "Open"

    OptSwSts2=GPIO.input(OptSw2)
        if OptSwSts2 == True:
                Status2 = "Close"
        else:
                Status2 = "Open"

    if now.hour % 4 == 0:
        if now.minute == 59:
            if now.second <= 15:
                if OptSwSts1 == False and OptSwSts2 == False:
                    GPIO.output(Relay_Ch1,GPIO.LOW)
                    print "Topoff Relay_Ch1 engaged", now
                else:
                    GPIO.output(Relay_Ch1,GPIO.HIGH)
            else:
                GPIO.output(Relay_Ch1,GPIO.HIGH)

def RELAYS():
    global Relay1, Relay2, Relay3
        Relay1_Sts=GPIO.input(Relay_Ch1)
        if Relay1_Sts == True:
                Relay1 = "Open"
        else:
                Relay1 = "Closed"

        Relay2_Sts=GPIO.input(Relay_Ch2)
        if Relay2_Sts == True:
                Relay2 = "Open"
        else:
                Relay2 = "Closed"

        Relay3_Sts=GPIO.input(Relay_Ch3)
        if Relay3_Sts == True:
                Relay3 = "Open"
        else:
                Relay3 = "Closed"

app = Flask(__name__)
@app.route("/")

def web():
    global now
    now = datetime.datetime.now()
    timeString = now.strftime("%Y-%m-%d %H:%M:%S")

    RSVR()

    TOPOFF()

    RELAYS()


    templateData = {
        'title' : 'AquaCR',
        'time' : timeString,
        'levels' : levels,
        'OptSw1' : Status1,
        'OptSw2' : Status2,
        'Relay1' : Relay1,
        'Relay2' : Relay2,
        'Relay3' : Relay3
        }
    return render_template('main.html', **templateData)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80, debug=True)
...