колба - я не могу показать вывод второго app.route - PullRequest
0 голосов
/ 05 октября 2018

У меня есть этот код Python для отображения температуры и расстояния (с помощью датчиков).Значение температуры отображается, а значение расстояния - нет.Что не так с кодировкой?

Я не могу понять, как это сделать.Я попытался сохранить вывод данных датчика в текстовый файл dis.txt, но по-прежнему не работает.

Спасибо за помощь.

Снимок веб-страницы: websnapshot

python:

from flask import Flask, render_template
import RPi.GPIO as GPIO
import datetime
import os
#from flask import jsonify
import time
import glob
import sonic
import subprocess
from time import strftime


app = Flask(__name__)

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
os.system('sudo python /home/pi/webserver/sonic.py | tee /home/pi/dis.txt')
temp_sensor='/sys/bus/w1/devices/28-0416a2aca1ff/w1_slave'
dista='/home/pi/dis.txt'

@app.route("/")
def tempReading():
    t=open(temp_sensor,'r')
    lines=t.readlines()
    t.close()

    temp_output = lines[1].find('t=')
    if temp_output != -1:
        temp_string=lines[1].strip()[temp_output+2:]
        temp_c=float(temp_string)/1000.0
    templateData = {
        'temp': round(temp_c,1)
    }
    #return jsonify(temp_c)
    return render_template('temp.html',**templateData)

@app.route("/")
def distance():
        t=open(dista,'r')
        lines=t.readlines()
        t.close()

        distance_output = lines[1].find('Distance: ')
    templateData = {
        'dis': distance
    }
    return render_template('temp.html',**templateData)

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

temp.html:

    <!DOCTYPE html>
<html>
<head>
    <!--Pescuela, Galilea-->
    <title>Water Quality Monitor</title>
    <meta http-equiv="refresh" content="2"
</head>
    <body>
    <center>
    <font face="Helvetica" size="30">Temperature</font>
    <br><br><strong><font face="Helvetica" size="100">{{ temp }} °C</font></strong>
    <br>
    <font face="Helvetica" size="30">Water level</font>
    <br><br><strong><font face="Helvetica" size="100">{{ dis }} cm</font></strong>

    </body>
</html>

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Спасибо за ответы.

Хотя я нашел способ выполнить скрипт Python из функции.Я просто добавил dista=subprocess.check_output('sudo python /home/pi/webserver/sonic.py', shell=True), где он получает выходные данные скрипта и сохраняет в переменную dista, а затем добавил его в словарь templateData.

0 голосов
/ 05 октября 2018

Вы украсили обе функции базовым маршрутом "/".В нынешнем виде это означает, что Flask будет запускать первую функцию только при достижении базового маршрута вашего URL.

Если вы хотите сохранить distance() в качестве отдельной функции, удалите декоратор @app.route,измените его так, чтобы оно возвращало значение, которое вы хотите отобразить на странице, а затем вызовите эту функцию из вашей функции tempReading(), добавив возвращаемое значение в ваш словарь templateData.

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