Как обновить данные MQTT в шаблоне django
Я использую paho-MQTT и могу получать сообщения и могу отображать данные в шаблоне(html), но не могу обновлять сообщение в реальном времени в шаблоне(html). Я хочу обновлять значение в шаблоне, когда я получаю новое сообщение из mosquitto/topic.
from django.shortcuts import render
import paho.mqtt.client as mqtt
import json
valor_mqtt = 0
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("mhub/hr")
def on_message(client, userdata, msg):
global valor_mqtt
valor_mqtt = (msg.payload)
print(valor_mqtt)
def print_on_m(request):
global valor_mqtt
message = str(valor_mqtt)
return render(request, 'home/index.html',{'context':message})
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("mqtt.eclipseprojects.io", 1883, 60)
Я передаю print_on_m в urls.py, чтобы использовать {{context}} в home/index.html для отображения данных
PS: Я не хочу использовать функции типа "setInterval(function() {" или ".load(window.location.href") для обновления части веб-страницы через некоторое время, я хочу обновлять только когда я получаю новое сообщение от mosquitto/topic
Короткий ответ - вы не делаете этого в django.
Шаблон отображается только один раз на стороне сервера, затем отправляется клиенту, он не может быть обновлен после отправки.
Что вы можете сделать, если ваш брокер поддерживает MQTT через WebSockets, тогда вы можете использовать либо клиент Paho JavaScript, либо клиент MQTT.js для подписки на брокера внутри страницы, запущенной в браузере, и получать обновления напрямую, а затем обновлять страницу соответственно.