フラスコにmqttを実装する方法について質問したいと思います。私はいくつかのコードを書いた。特定のページに行くと、メッセージを受け取ってデータベースに格納し、その特定のページのテーブルにメッセージを出力する。フラスコにMQTTを実装する
以下は私のコードのスニペットです。
'views.py'
from flask import render_template, request, url_for, redirect, flash
from flask_wtf import Form
from flask_login import login_user, logout_user, login_required
import paho.mqtt.client as mqtt
from app import app, db
from models import User, Data
...other @app.route...
@app.route('/table')
@login_required
def table_data():
def on_connect(client, userdata, flags, rc):
flash("connected")
client.subscribe("abc123")
def on_message(client, userdata, msg, message):
message = Data(temperature=msg.temperature, ph=msg.pH, time=msg.time)
db.session.add(message)
db.session.commit()
client = mqtt.Client(client_id = "my_visualise", clean_session = True)
client.username_pw_set("mosquitto", "mosquitto")
client.on_connect = on_connect
client.on_message = on_message
return render_template('table_data.html')
'models.py'
from app import app, db
...User table...
# Data table
class Data(db.Model):
__tablename__= 'data_reading'
id = db.Column(db.Integer, primary_key=True)
temperature = db.Column(db.Integer, index=True)
pH = db.Column(db.Integer, index=True)
time = db.Column(db.DateTime, index=True)
def __init__(self, temperature, pH, time):
self.temperature = temperature
self.pH = pH
self.time = time
db.create_all()
'table_data.html'
...
<div class="jumbotron">
<div class="container-fluid">
<h2>Data</h2>
<p>This table includes the data for temperature, pH value and time</p>
<div class="table-responsive">
<table class="table", border=2>
{% for value in message.iteritems() %}
<thead>
<tr>
<th>id</th>
<th>Temperature</th>
<th>pH Value</th>
<th>Timestamp</th>
</tr>
</thead>
<tbody>
<tr>
<td> {{value}} </td>
</tr>
</tbody>
{% endfor %}
</table>
</div>
</div>
私は自分のコンピュータ上でローカルにコードを実行します。最初はエラーは表示されませんが、一度 '/ table'ページに移動すると、次のエラーが表示されます。
「エラー」私はこれは私が私が十分に理解することができます任意の例やチュートリアルを見つけることができませんでしたので、私は「views.py」でスクリプトを書いた方法に問題でなければならないと信じて
UndefinedError: 'message' is undefined
フラスコにmqttを実装する。そこで私は自分でそれを実装しようと決めました。
私はこれについてあなたの意見を聞きたいと思います。
ありがとうございます。
モデルが壊れている場合、クライアントがページのレンダリングに長い時間だけ接続されていると、メッセージが受信されない可能性があります。 – hardillb
例外を発生させる行はどれですか? – dirn
@dim私は 'views.py'の 'message = ...'という行がエラーを引き起こしたと信じています – Ling