Я делаю проект, который использует Django и MQTT. Есть ситуация, когда я хочу повторно подписаться на все темы, относящиеся к моделям в базе данных, когда мой веб-сервер Django повторно подключается к брокеру после отключения по какой-либо причине. У меня есть модель комнаты, как показано ниже:
class Room(models.Model):
building = models.ForeignKey(Building, on_delete= models.CASCADE)
number = models.PositiveIntegerField()
available = models.BooleanField(default=True)
power = models.BooleanField(default=False)
class Meta:
ordering = ['building', 'number']
unique_together = ['building', 'number']
def __str__(self):
return f"{self.building.bid}/{self.number}"
def get_mqtt_topic(self):
return f"{self.building.bid}/{self.number}"
Метод get_mqtt_topic () вернет тему MQTT, связанную с комнатой. Код клиента MQTT mqtt / client.py:
import paho.mqtt.client as mqtt
from .tasks import *
from .models import Room
def on_connect(client, userdata, flags, rc):
print("Connecting to CloudMQTT broker: "+ mqtt.connack_string(rc))
room_mqtt = [(room.get_mqtt_topic(), 1) for room in Room.objects.all()]
client.subscribe(room_mqtt)
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
Поскольку я поместил приведенный ниже код в init .py, чтобы запустить клиент mqtt в другом потоке, отличном от приложения django.
from mqtt.client import client
client.loop_start()
поэтому я получил эту ошибку: django.core.exceptions.AppRegistryNotReady: приложения еще не загружены.