Создание панели инструментов Flask в реальном времени - PullRequest
1 голос
/ 29 апреля 2019

Я работаю над погодным веб-приложением, которое будет использовать данные, собранные с датчика Raspberry Pi BME680, помещать их в базу данных и продвигать дальше к веб-панели.Вот вопросы, которые у меня есть: 1. Основываясь на приведенном ниже коде, разумнее ли одновременно передавать данные на приборную панель и в базу данных с датчика или получать данные в базу данных с датчика, а затем из базы данных далее ввеб-панель?2. Исходя из двух приведенных ниже кодов, возможно ли объединить их в одно приложение для колб?

До сих пор мне удалось создать код, который будет собирать данные с датчика и передавать их в базу данных.У меня также есть приложение фляги, которое будет извлекать данные из базы данных и выдвигать последнее значение на панель инструментов.Я пытаюсь объединить код сбора данных с приложением колбы и заставить его каждую секунду отправлять данные на веб-панель управления.

Вот код для сбора данных из датчика в базу данных

# Import Dependencies
import sqlite3
import time
import board
from busio import I2C
import adafruit_bme680
import datetime
# Create library object using our Bus I2C port
i2c = I2C(board.SCL, board.SDA)
bme680 = adafruit_bme680.Adafruit_BME680_I2C(i2c, debug=False)
# change this to match the location's pressure (hPa) at sea level
bme680.sea_level_pressure = 1013.25
# Define database name to which data will be stored
dbname = 'Sensors.db'
# Using while loop capture the data in variables and store it in database
while True:    
    # Create the now variable to capture the current moment
    now = datetime.datetime.now()
    TEMPERATURE = round(bme680.temperature,1)
    GAS = round(bme680.gas,1)
    HUMIDITY = round(bme680.humidity,1)
    PRESSURE = round(bme680.pressure,1)
    ALTITUDE = round(bme680.altitude,1)
    TIME_STAMP =(now)

    conn = sqlite3.connect(dbname)
    curs = conn.cursor()
    curs.execute("INSERT INTO BME_DATA (TIME_STAMP, TEMPERATURE, GAS, 
    HUMIDITY, PRESSURE, ALTITUDE) values(?,?,?,?,?,?)",(TIME_STAMP, 
    TEMPERATURE, GAS, HUMIDITY, PRESSURE, ALTITUDE))
    conn.commit()
    # Test by printing data from table BME_DATA
    #for row in curs.execute("SELECT * FROM BME_DATA"):   
        #print (row)
    conn.close()    
    time.sleep(1)

А вот код для приложения фляги, которое будет принимать данные из базы данных:

from flask import Flask, render_template, request
app = Flask(__name__)
import sqlite3
# Retrieve data from database
def getData():
    conn=sqlite3.connect('../Sensors.db')
    curs=conn.cursor()
    for row in curs.execute("SELECT * FROM BME_DATA ORDER BY TIME_STAMP 
     DESC LIMIT 1"):
        Time = str(row[1])
        Temperature = row[2]
        Gas = row[3]
        Humidity = row[4]
        Pressure = row[5]
        Altitude = row[6]

    conn.close()
    return Time, Temperature, Gas, Humidity, Pressure, Altitude
# main route 
@app.route("/")
def index():    
    Time, Temperature, Gas, Humidity, Pressure, Altitude = getData()
    templateData ={'Time': Time,
        'Temperature': Temperature,
        'Gas': Gas,
        'Humidity': Humidity,
        'Pressure': Pressure,
        'Altitude': Altitude}
    return render_template('index.html', **templateData)
if __name__ == "__main__":
   app.run(debug=False)

Итак, чтобы запустить это, мне нужно запустить оба кода одновременно, и то, что я получаю на странице, является последним чтением.значений датчиков на данный момент страница открыта.Чтобы получить обновление, мне нужно нажать кнопку и вызвать запрос в колбе.Итак, как мне объединить эти два, чтобы создать одно колб-приложение, которое будет собирать данные, а также непрерывно отправлять данные на панель инструментов?

Я исследовал это, и я думаю, что для этого должна использоваться библиотека socketio.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...