Я работаю над проектом, который в конечном итоге станет веб-сайтом, отображающим данные устройства с возможностью управления этими устройствами.В настоящее время я работаю над кодом на Python, используя библиотеку Paho MQTT Python.Мне удалось отправить и получить зашифрованные сообщения через брокера Mosquitto.Я создал клиента, который является своего рода клиентом для мониторинга, который подписывается на тему с подстановочными знаками, чтобы получать все сообщения, проходящие через посредника, и в конечном итоге собирается сохранять их в базе данных.Я использую django 2.1.5, Mosquitto Broker 1.5, работающий в Python.
Проблема, с которой я сталкиваюсь сейчас, заключается в том, что я не могу найти способ отправки сообщений брокеру Mosquitto, как толькоизменение базы данных происходит.Допустим, у меня есть веб-сайт, который показывает все подключенные устройства, и я хочу выключить одно, я бы нажал кнопку, которая изменила бы таблицу базы данных, затем необходимо отправить сообщение брокеру, чтобы уведомить устройство о том, что оно должновыключить.Я знаю, что могу сделать веб-сайт клиентом, который затем будет использовать MQTT поверх веб-сокетов, но это нежелательный вариант.
Я пробовал сигналы django, которые, кажется, работают нормально.Проблема в том, что функция, которую запускает сигнал django, создает новый экземпляр нового клиента mqtt.Я бы хотел, чтобы уже запущенный клиент мониторинга отправил сообщение, то есть активировал одну из своих определенных функций, которая отправляла бы сообщение при отправке сигнала.
class Post(models.Model):
title = models.CharField(max_length=50)
def __str__(self):
return self.title
def save_post(sender, instance, **kwargs):
message = {
"client_id": "abc",
"message": "Created new model: " + str(instance),
}
publish.single("house/StateServer/receive",
payload=json.dumps(message),
port=8081, hostname="localhost", retain=False,
auth = {'username':"abc", 'password':"abc"},
client_id="abc",tls = {"ca_certs":"","certfile":"","keyfile":"",})
post_save.connect(save_post, sender=Post)
Я бы хотел, чтобы функция "save_post"вызвать функцию клиента мониторинга, который работает 24/7 и хранится в другом файле, скажем, «monitor.py».Эта функция клиента мониторинга будет получать желаемые данные: полезную нагрузку сообщения и тему конечного устройства и отправлять их брокеру Mosquitto.