10

我的目标是设置一个 Django 应用程序,从代理检索 MQTT 消息。(例如使用Paho MQTT 客户端)。

在我看来,传入消息的异步获取将非常适合新的Django Channels。因为这将提供事件驱动的设置。

我的问题是:Django Channels 真的可以成为桥接 MQTT 消息的工具吗?如果是这样:我该如何设置?

4

2 回答 2

7

在 MQTT 代理和 ASGI 之间实现了一个非常简单的接口。它仍然是实验性的并且有一些限制,但是您可以使用它来获取在 MQTT 代理中发布的消息(或使用代码作为示例)。

运行 MQTT 代理:

$ systemctl start mosquitto

运行 MQTT-ASGI 接口(类似于daphne

$ asgimqtt my_django_project.asgi:channels_layer

在中定义路线my_django_project/routing.py

from channels import route

from my_django_app.consumers import on_mqtt_message

channels_routing = [
    route("mqtt.sub", on_mqtt_message),
]

my_django_app/consumers.py

from .models import MqttMessage

def on_mqtt_message(message):
    # do something with the message
    MqttMessage(topic=message["topic"],
                payload=message["payload"],
                qos=message["qos",
                host=message["host"],
                port=message["port"]).save()
于 2016-07-26T12:13:55.253 回答
0

来到这里寻求有关此主题的帮助后,我创建了chanmqttproxy

本质上,它是 MQTT 的完全异步 Channels 3 代理,允许发布和订阅。该文档展示了如何扩展标准 Channels 教程,以便在 MQTT 主题上看到聊天消息 - 并且可以从 MQTT 主题发送到所有 websocket 浏览器客户端。

我查看了 MQTTAsgi(并将其归功于灵感),但觉得使用具有完整 Channels 集成的纯异步解决方案更合适。

从 2016 年开始帮助 OP 可能有点晚了,但评论显示人们仍然来这里,所以它可能是像我这样的未来搜索者的一个选择:)

于 2022-01-09T19:19:41.463 回答