Skip to main content

MQTT-Django Bridge

Interface MQTT ASGI compatible with Django Channels 3.

Installation

pip install django-mqtt-bridge

Configuration

First you would to configure a valid channel_layer endpoint to consume and connect between django-mqtt-bridge and channels.

In your_channel_application/asgi.py:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_channel_application.settings")

import django
from channels.routing import get_default_application
from channels.layers import get_channel_layer

django.setup()

# Application
application = get_default_application()

# Layers
channel_layer = get_channel_layer()

In your_channel_application/consumers.py:

from channels.consumer import SyncConsumer

class MqttConsumer(SyncConsumer):
    def mqtt_sub(self, event):
        topic = event['text']['topic']
        payload = event['text']['payload']
        # do something with topic and payload
        print('{} - {}'.format(topic, payload))

    def mqtt_pub(self, event):
        pass

In your_channel_application/routing.py:

from django.core.asgi import get_asgi_application
from .consumers import MqttConsumer
from channels.routing import ProtocolTypeRouter, ChannelNameRouter, URLRouter
from channels.auth import AuthMiddlewareStack

application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    "channel": ChannelNameRouter(
        {
            "mqtt.pub": MqttConsumer.as_asgi()
        }
    )
})

Usage

django_mqtt_bridge -H iot.eclipse.org -p 1883 --topic=some_topic:2 your_channel_application.asgi:channel_layer

Options

django_mqtt_bridge -h

usage: django_mqtt_bridge [-h] [-H HOST] [-p PORT] [-v] [-U USERNAME] [-P PASSWORD]
                  [--topic TOPICS] [-n CHANNEL_NAME] [-s CHANNEL_SUB]
                  [-x CHANNEL_PUB]
                  channel_layer

Simple MQTT bridge for ASGI

positional arguments:
  channel_layer         The ASGI channel layer instance to use as
                        path.to.module:instance.path

optional arguments:
  -h, --help            show this help message and exit
  -H HOST, --host HOST  MQTT broker host
  -p PORT, --port PORT  MQTT broker port
  -v, --verbosity       Set verbosity
  -U USERNAME, --username USERNAME
                        MQTT username to authorised connection
  -P PASSWORD, --password PASSWORD
                        MQTT password to authorised connection
  --topic TOPICS        MQTT topics with qos to subscribe --topic TOPIC:QOS
                        --topic /office/sensor:0 --topic /home/sensor:1 If
                        empty (#, 2) is set as default
  -n CHANNEL_NAME, --channel-name CHANNEL_NAME
                        Name of Channels's channel to send and receive
                        messages
  -s CHANNEL_SUB, --channel-sub CHANNEL_SUB
                        Name of Channels's channel for MQTT Sub messages,
                        default is mqtt.pub
  -x CHANNEL_PUB, --channel-pub CHANNEL_PUB
                        Name of Channels's channel for MQTT Pub messages,
                        default is mqtt.sub

HOST: MQTT broker host

PORT: MQTT broker port, default 1883

USERNAME: MQTT username to authorised connection

PASSWORD: MQTT password to authorised connection

TOPICS: MQTT topics with qos to subscribe. This option expect a valid topic name and a QOS value splited by :

To subscribe to a list of topics use the same option --topic.

django-mqtt-bridge --topic some_topic:qos --topic another_topic:qos --topic home/kitchen_gas_sensor:2 --topic home/office_air_sensor:0

CHANNEL_NAME : Name of Channels's channel to send and receive messages, this channel_name must to exist in your channel's consumer, default is mqtt.

CHANNEL_SUB : Name of Channels's channel for MQTT Sub messages, default is mqtt.sub.

CHANNEL_PUB : Name of Channels's channel for MQTT Pub messages, default is mqtt.pub.

Release files for django-mqtt-bridge 0.4.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-mqtt-bridge 0.4.6
File Size Uploaded
django_mqtt_bridge-0.4.6.tar.gz 19.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-mqtt-bridge 0.4.6
File Interpreter ABI Platform
django_mqtt_bridge-0.4.6-py3-none-any.whl Python 3 none any Details

Total release size: 38.7 kB

Release files / django_mqtt_bridge-0.4.6.tar.gz

Download URL django_mqtt_bridge-0.4.6.tar.gz
Size 19.1 kB
Tags Source
SHA-256 checksum
How to use checksums
3d4b5f280b5312de03a9f0f98d73985e892a94f1ab737a410d22c97fca2cfb62
BLAKE2b-256 checksum
How to use checksums
efa9efdb601ba4631039be0d57c86b209336873172189739129daca34d574cc0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release files / django_mqtt_bridge-0.4.6-py3-none-any.whl

Download URL django_mqtt_bridge-0.4.6-py3-none-any.whl
Size 19.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
96c29251d46df58b0e9267f184dd44838f7320e1460843a896de76867a1bf405
BLAKE2b-256 checksum
How to use checksums
ca749dfe424f7691273f71287c30fe1904d9734593875aae3d33ef1c0fa0d7e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.4.6 This release

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.7

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page