2016-05-05 4 views
6

Моя цель - настроить приложение Django, получая сообщения MQTT от брокера. (Например, используя Paho MQTT Client).Могу ли я использовать каналы Django для отображения сообщений MQTT в реальном времени?

Мне кажется, что асинхронная выборка входящих сообщений будет хорошей подгонкой для нового Django Channels. Поскольку это обеспечило бы установку, управляемую событиями.

Мой вопрос: могут ли каналы Django быть инструментом для соединения сообщений MQTT? Если да: как я мог это настроить?

ответ

1

Я внедрил very simple interface between MQTT broker and 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), 
] 

Реализовать потребителя (например, хранить сообщения MQTT в базе данных) в 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()