Как обновить данные 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 для подписки на брокера внутри страницы, запущенной в браузере, и получать обновления напрямую, а затем обновлять страницу соответственно.

Вернуться на верх