ОК, так что я все еще борюсь с этим, вот мой полный код после использования предложения @DrAgon. У меня есть 3 файла, первый - мой файл Python, который просто получает местное время.
import datetime
import time
now = datetime.datetime.now()
print(now)
Если я настрою этот файл как:
import datetime
import time
while True:
now = datetime.datetime.now()
print(now)
time.sleep(2)
Он обновляется и возвращает мне дату каждые 2 секунды, но когда он импортируется в мой проект колбы, он вступает во владение и просто не загружает веб-страницу.
поэтому я использую первую версию файла, которая получает местное время. Далее у меня есть страница Python фляжка:
from flask import Flask, render_template, request, jsonify
from flask_bootstrap import Bootstrap
import Timereppper
import datetime
now = datetime.datetime.now()
app = Flask(__name__)
Bootstrap(app)
@app.route('/')
def hello():
return render_template('hello.html', myvar= now.second)
@app.route('/currentstatus')
def currentstatus():
return render_template('hello.html', myvar= now.second)
@app.route('/historic')
def historic():
return render_template('historic.html')
@app.route('/data')
def get_data():
mbdata = Timereppper.now() # Call your code that gets the data here
return jsonify(mbdata) # And return it as JSON
if __name__ == '__main__':
app.run(host= 'localhost', port=5000, debug=False, threaded=True)
и у меня есть основной файл hello.html с кодом, предложенным @DrAgon внизу. Это возвращает текст в нижней части главной веб-страницы «Новые данные идут сюда», и если я смотрю на lcalhost: 5000 / data, я получаю дату, которая была прочитана в тот момент, когда был впервые запущен колб-сервер. Я хочу, чтобы эта дата обновлялась непрерывно или каждые несколько секунд и отображалась на главной домашней странице сайта. Кто-нибудь может показать мне, где я иду не так. Я прошу прощения, я новичок в колбе.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title> Vibration Monitor</title>
<meta name="viewport" content="width=device-wi dth, initial-scale=1">
<link href="{{url_for('static', filename='css/bootstrap.min.css')}}"
rel="stylesheet">
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico')
}}">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
</script>
<script>window.jQuery || document.write('<script src="{{
url_for('static', filename='jquery.js') }}">\x3C/script>')</script>
</head>
<nav class="navbar navbar-expand-lg navbar-light bg-#808080">
<a class="navbar-brand" href= https://www.iotindustries.co.uk>
<img src="/static/img/IOT Industries Logo 1THIN.png" width="300" height="90"
class="d-inline-block" alt="">
</a>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link font-weight-bold" href="/currentstatus">Current
Status</a>
</li>
<li class="nav-item active">
<a class="nav-link font-weight-bold" href="/historic">Historic</a>
</li>
</ul>
</nav>
<div class="alert alert-secondary" role="alert"></div>
<div class="card-deck" style="width: 42rem;">
<div class="card text-white bg-dark mb-3" style="width: 16rem;">
<img class="card-img-top" src="/static/img/vibes1.png" alt="Vibration
Image">
<div class="card-body">
<h5 class="card-title">Current vibration level:</h5>
<h1 class="card-text font-weight-bold">15 mA</h1>
<a class="btn btn-success">Acknowledge</a>
</div>
</div>
<div class="card text-white bg-dark mb-3" style="width: 16rem;">
<img class="card-img-top" src="/static/img/timer.svg" alt="Timer Image">
<div class="card-body">
<h5 class="card-title">Estimated days until failure:</h5>
<h1 class="card-text font-weight-bold"> 3 Days {{myvar}} </h1>
<a class="btn btn-info" href="/historic">View Historic</a>
</div>
</div>
</div>
<body>
<div id="myDataDiv">New Data Goes Here</div>
</body>
<script>
var goGetNewData = function() {
$.ajax({
url: '/data',
dataType: 'json',
type: 'get',
success: function(e) {
$('#myDataDiv').html('New Data ' + e);
},
error: function(e) {
$('#myDataDiv').html('Error');
},
});
}
var waitTime = 10; // 10 seconds
var fetchInterval = window.setInterval(goGetNewData, waitTime*1000);
</script>
</html>
У меня есть файл Python, который постоянно читает регистр Modbus каждые пару секунд, используя функцию Python sleep. (). Это значение регистрируется в базе данных Google FireBase.
Что я хотел бы сделать, это отобразить это значение, считанное из регистра ModBus, на моем веб-сайте Flask. Я просто не знаю, как это сделать. Могу ли я либо:
Получите обновленное значение ModBus из файла Python, передавайте его в MyFlaskApp.py непрерывно или по нажатию кнопки в моем HTML-файле.
Запросите базу данных Firebase и заставьте ее отображать последнее записанное значение либо непрерывно, либо по нажатию кнопки.
Что, если что-то из этого можно сделать, и какой метод будет наилучшим. Кто-нибудь может опубликовать пример того, как я смогу это сделать?
Спасибо