Я новичок в 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)