Как использовать MQTT в проекте Django
MQTT — это упрощенный протокол обмена сообщениями IoT, основанный на модели публикации/подписки, который может предоставлять надежные службы обмена сообщениями в режиме реального времени для подключенных устройств с очень небольшим кодом и пропускной способностью. Он широко используется в таких отраслях, как Интернет вещей, мобильный Интернет, интеллектуальное оборудование, Интернет транспортных средств, а также электроэнергетика.
Django — это веб-фреймворк с открытым исходным кодом и один из самых популярных веб-фреймворков Python. В этой статье в основном рассказывается, как подключаться, подписываться, отписываться, а также отправлять и получать сообщения между MQTT-клиент и MQTT-брокер в проекте Джанго.
Мы напишем простой клиент MQTT, используя paho-mqtt
клиентская библиотека. paho-mqtt
— это широко используемая клиентская библиотека MQTT на Python, обеспечивающая клиентскую поддержку MQTT 5.0, 3.1.1 и 3.1 на Python 2.7 и 3.x.
Инициализация проекта
В этом проекте для тестирования разработки используется Python 3.8, и читатель может подтвердить версию Python с помощью следующей команды.
$ python3 --version
Python 3.8.2
Установите Джанго и paho-mqtt
с помощью Пипа.
pip3 install django
pip3 install paho-mqtt
Создайте проект Джанго.
django-admin startproject mqtt-test
Структура каталогов после создания выглядит следующим образом.
├── manage.py
└── mqtt_test
├── __init__.py
├── asgi.py
├── settings.py
├── urls.py
├── views.py
└── wsgi.py
Использование paho-mqtt
В этой статье будет использоваться бесплатный публичный брокер MQTT предоставлено EMQ. Сервис создан на основе Облачный сервис MQTT — Облако EMQX. Информация о доступе к серверу выглядит следующим образом:
- Маклер:
broker.emqx.io
- TCP-порт:
1883
- Порт веб-сокета:
8083
Импорт черепахи-mqtt
import paho.mqtt.client as mqtt
Запись обратного вызова соединения
Успешные или неудачные соединения MQTT могут быть обработаны в этой функции обратного вызова, и этот пример подпишется на django/mqtt
тему после успешного подключения.
def on_connect(mqtt_client, userdata, flags, rc):
if rc == 0:
print('Connected successfully')
mqtt_client.subscribe('django/mqtt')
else:
print('Bad connection. Code:', rc)
Написание обратного вызова сообщения
Эта функция распечатывает сообщения, полученные django/mqtt
тема.
def on_message(mqtt_client, userdata, msg):
print(f'Received message on topic: {msg.topic} with payload: {msg.payload}')
Добавление элементов конфигурации Django
Добавьте элементы конфигурации для брокера MQTT в settings.py
. Читатели, у которых есть вопросы о следующих элементах конфигурации и понятиях, связанных с MQTT, упомянутых в этой статье, могут посетить блог. Самое простое руководство по началу работы с MQTT.
В этом примере используется анонимная аутентификация, поэтому имя пользователя и пароль заданы пустыми.
MQTT_SERVER = 'broker.emqx.io'
MQTT_PORT = 1883
MQTT_KEEPALIVE = 60
MQTT_USER = ''
MQTT_PASSWORD = ''
Настройка клиента MQTT
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set(settings.MQTT_USER, settings.MQTT_PASSWORD)
client.connect(
host=settings.MQTT_SERVER,
port=settings.MQTT_PORT,
keepalive=settings.MQTT_KEEPALIVE
)
Создание API публикации сообщений
Мы создаем простой POST API для реализации публикации сообщений MQTT.
В реальных приложениях код API может потребовать более сложной обработки бизнес-логики.
Добавьте следующий код в views.py
.
import json
from django.http import JsonResponse
from mqtt_test.mqtt import client as mqtt_client
def publish_message(request):
request_data = json.loads(request.body)
rc, mid = mqtt_client.publish(request_data['topic'], request_data['msg'])
return JsonResponse({'code': rc})
Добавьте следующий код в urls.py
.
from django.urls import path
from . import views
urlpatterns = [
path('publish', views.publish_message, name="publish"),
]
Запустите MQTT-клиент
Добавьте следующий код в __init__.py
.
from . import mqtt
mqtt.client.loop_start()
На данный момент мы закончили писать весь код, и полный код можно найти по адресу Гитхаб.
Наконец, выполните следующую команду, чтобы запустить проект Django.
python3 manage.py runserver
Когда приложение Django запустится, клиент MQTT подключится к брокеру MQTT и подпишется на тему. django/mqtt
.
Тестирование
Далее мы будем использовать кроссплатформенный клиент MQTT с открытым исходным кодом — MQTT X для тестирования подключения, подписки и публикации.
Получение тестового сообщения
Создайте соединение MQTT в MQTT X, введите имя соединения, оставьте остальные параметры по умолчанию и нажмите кнопку
Connect
кнопка в правом верхнем углу для подключения к брокеру.Опубликовать сообщение
Hello from MQTT X
кdjango/mqtt
тему в поле публикации сообщений в нижней части MQTT X.Сообщения, отправленные MQTT X, будут видны в окне выполнения Django.
Тестовый API публикации сообщений
Подписаться на
django/mqtt
тема в MQTT X.Используйте почтальона для вызова
/publish
API: опубликовать сообщениеHello from Django
кdjango/mqtt
тема.Вы увидите сообщения, отправленные Django в MQTT X.
Резюме
На данный момент мы завершили разработку клиента MQTT с использованием paho-mqtt
, обеспечивающий связь с использованием MQTT в приложениях Django. На практике мы можем расширить клиент MQTT для достижения более сложной бизнес-логики на основе бизнес-требований.
Далее читатели могут проверить Простое для понимания руководство по протоколу MQTT серия статей, предоставленных EMQ, чтобы узнать о функциях протокола MQTT, изучить более сложные приложения MQTT и начать разработку приложений и служб MQTT.
Первоначально опубликовано на https://www.emqx.com.