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

Получение тестового сообщения

  1. Создайте соединение MQTT в MQTT X, введите имя соединения, оставьте остальные параметры по умолчанию и нажмите кнопку Connect кнопка в правом верхнем углу для подключения к брокеру.

    Получать MQTT-сообщения

  2. Опубликовать сообщение Hello from MQTT X к django/mqtt тему в поле публикации сообщений в нижней части MQTT X.

    Публикация сообщений MQTT

  3. Сообщения, отправленные MQTT X, будут видны в окне выполнения Django.

    Запустите приложение Django MQTT

Тестовый API публикации сообщений

  1. Подписаться на django/mqtt тема в MQTT X.

    Подпишитесь на тему MQTT

  2. Используйте почтальона для вызова /publish API: опубликовать сообщение Hello from Django к django/mqtt тема.

    Используйте Postman для вызова API

  3. Вы увидите сообщения, отправленные Django в MQTT X.

    Получать MQTT-сообщения

Резюме

На данный момент мы завершили разработку клиента MQTT с использованием paho-mqtt, обеспечивающий связь с использованием MQTT в приложениях Django. На практике мы можем расширить клиент MQTT для достижения более сложной бизнес-логики на основе бизнес-требований.

Далее читатели могут проверить Простое для понимания руководство по протоколу MQTT серия статей, предоставленных EMQ, чтобы узнать о функциях протокола MQTT, изучить более сложные приложения MQTT и начать разработку приложений и служб MQTT.

Первоначально опубликовано на https://www.emqx.com.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *