So verwenden Sie MQTT im Django-Projekt

MQTT ist ein leichtgewichtiges IoT-Messaging-Protokoll, das auf einem Publish/Subscribe-Modell basiert und zuverlässige Echtzeit-Messaging-Dienste für verbundene Geräte mit sehr wenig Code und Bandbreite bereitstellen kann. Es ist weit verbreitet in Branchen wie IoT, mobiles Internet, intelligente Hardware, Internet von Fahrzeugen sowie Strom und Energie.

Django ist ein Open-Source-Webframework und eines der beliebtesten Python-Webframeworks. Dieser Artikel stellt hauptsächlich vor, wie Sie Nachrichten verbinden, abonnieren, abbestellen und Nachrichten senden und empfangen MQTT-Client und MQTT-Broker im Django-Projekt.

Wir werden einen einfachen MQTT-Client mit schreiben paho-mqtt Client-Bibliothek. paho-mqtt ist eine weit verbreitete MQTT-Client-Bibliothek in Python, die Client-Unterstützung für MQTT 5.0, 3.1.1 und 3.1 auf Python 2.7 und 3.x bietet.

Projektinitialisierung

Dieses Projekt verwendet Python 3.8 für Entwicklungstests, und der Leser kann die Version von Python mit dem folgenden Befehl bestätigen.

$ python3 --version
Python 3.8.2

Installieren Sie Django und paho-mqtt mit Pip.

pip3 install django
pip3 install paho-mqtt

Erstellen Sie ein Django-Projekt.

django-admin startproject mqtt-test

Die Verzeichnisstruktur nach der Erstellung sieht wie folgt aus.

├── manage.py
└── mqtt_test
  ├── __init__.py
  ├── asgi.py
  ├── settings.py
  ├── urls.py
  ├── views.py
  └── wsgi.py

Mit paho-mqtt

Dieser Artikel wird verwendet kostenloser öffentlicher MQTT-Broker bereitgestellt von EMQ. Der Dienst wird basierend auf erstellt MQTT Cloud-Dienst – EMQX Cloud. Die Serverzugriffsinformationen lauten wie folgt:

  • Makler: broker.emqx.io
  • TCP-Port: 1883
  • Websocket-Port: 8083

Turtle-mqtt importieren

import paho.mqtt.client as mqtt

Verbindungsrückruf schreiben

Erfolgreiche oder fehlgeschlagene MQTT-Verbindungen können in dieser Callback-Funktion behandelt werden, und dieses Beispiel wird die abonnieren django/mqtt Thema nach einer erfolgreichen Verbindung.

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)

Nachrichtenrückruf schreiben

Diese Funktion druckt die vom empfangenen Nachrichten django/mqtt Thema.

def on_message(mqtt_client, userdata, msg):
   print(f'Received message on topic: {msg.topic} with payload: {msg.payload}')

Hinzufügen von Django-Konfigurationselementen

Fügen Sie Konfigurationselemente für den MQTT-Broker in hinzu settings.py. Leser, die Fragen zu den folgenden Konfigurationselementen und MQTT-bezogenen Konzepten haben, die in diesem Artikel erwähnt werden, können den Blog lesen Der einfachste Leitfaden für den Einstieg in MQTT.

Dieses Beispiel verwendet eine anonyme Authentifizierung, sodass Benutzername und Kennwort leer sind.

MQTT_SERVER = 'broker.emqx.io'
MQTT_PORT = 1883
MQTT_KEEPALIVE = 60
MQTT_USER = ''
MQTT_PASSWORD = ''

Konfigurieren des MQTT-Clients

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
)

Erstellen einer Nachrichtenveröffentlichungs-API

Wir erstellen eine einfache POST-API, um die Veröffentlichung von MQTT-Nachrichten zu implementieren.

In tatsächlichen Anwendungen kann der API-Code eine komplexere Verarbeitung der Geschäftslogik erfordern.

Fügen Sie den folgenden Code ein 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})

Fügen Sie den folgenden Code ein urls.py.

from django.urls import path
from . import views

urlpatterns = [
    path('publish', views.publish_message, name="publish"),
]

Starten Sie den MQTT-Client

Fügen Sie den folgenden Code ein __init__.py.

from . import mqtt
mqtt.client.loop_start()

An diesem Punkt haben wir den gesamten Code geschrieben und den vollständigen Code finden Sie unter GitHub.

Führen Sie abschließend den folgenden Befehl aus, um das Django-Projekt auszuführen.

python3 manage.py runserver

Wenn die Django-Anwendung gestartet wird, stellt der MQTT-Client eine Verbindung zum MQTT-Broker her und abonniert das Thema django/mqtt.

Testen

Als Nächstes verwenden wir einen plattformübergreifenden Open-Source-MQTT-Client – ​​MQTT X, um die Verbindung, das Abonnement und die Veröffentlichung zu testen.

Empfang von Testnachrichten

  1. Erstellen Sie eine MQTT-Verbindung in MQTT X, geben Sie den Verbindungsnamen ein, belassen Sie die anderen Parameter als Standard und klicken Sie auf die Connect Schaltfläche in der oberen rechten Ecke, um sich mit dem Broker zu verbinden.

    Empfangen Sie MQTT-Nachrichten

  2. Veröffentlichen Sie die Nachricht Hello from MQTT X zum django/mqtt Thema im Nachrichtenveröffentlichungsfeld unten in MQTT X.

    Veröffentlichen Sie MQTT-Nachrichten

  3. Die von MQTT X gesendeten Nachrichten sind im Laufzeitfenster von Django sichtbar.

    Führen Sie die Django MQTT-APP aus

API zum Veröffentlichen von Nachrichten testen

  1. Abonnieren Sie die django/mqtt Thema in MQTT X.

    Abonnieren Sie das MQTT-Thema

  2. Verwenden Sie den Postboten, um anzurufen /publish API: Veröffentlichen Sie die Nachricht Hello from Django zum django/mqtt Thema.

    Verwenden Sie Postman, um die API aufzurufen

  3. Sie sehen die von Django gesendeten Nachrichten in MQTT X.

    Empfangen Sie MQTT-Nachrichten

Zusammenfassung

An dieser Stelle haben wir die Entwicklung des MQTT-Clients mit abgeschlossen paho-mqtt, wodurch die Kommunikation über MQTT in Django-Anwendungen ermöglicht wird. In der Praxis können wir den MQTT-Client erweitern, um eine komplexere Geschäftslogik basierend auf Geschäftsanforderungen zu erreichen.

Als nächstes können die Leser auschecken Der leicht verständliche Leitfaden zum MQTT-Protokoll eine Reihe von Artikeln, die von EMQ bereitgestellt werden, um mehr über die Funktionen des MQTT-Protokolls zu erfahren, fortgeschrittenere Anwendungen von MQTT zu erkunden und mit der Entwicklung von MQTT-Anwendungen und -Diensten zu beginnen.

Ursprünglich erschienen bei https://www.emqx.com.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *