web-dev-qa-db-fra.com

Comment utiliser le client paho mqtt dans django?

J'écris une application Django qui devrait agir en tant qu'éditeur MQTT et en tant qu'abonné.

Où dois-je démarrer le client paho et exécuter la fonction loop_forever ().

Doit-il être dans wsgi.py?

13
Raja Sudhan

Mise à jour:

Si vous avez besoin de Django s'exécutant dans plusieurs threads, puis pour publier des messages depuis votre application Django vous pouvez utiliser les fonctions d'assistance du module Publier de Paho - https : //Eclipse.org/paho/clients/python/docs/#id17 Vous n'avez pas besoin de créer une instance de client mqtt et de démarrer une boucle dans ce cas. Et pour vous abonner à un sujet, pensez à exécuter le client mqtt en tant que script autonome et importez les modules nécessaires de votre application Django (et n'oubliez pas de configurer l'environnement Django dans le script).


La réponse ci-dessous n'est bonne que si vous exécutez Django dans un seul thread, ce qui n'est pas habituel en production.

Créez mqtt.py Dans votre dossier d'application et mettez-y tout le code associé. Par exemple:

import paho.mqtt.client as mqtt

def on_connect(client, userdata, rc):
    client.subscribe("$SYS/#")

def on_message(client, userdata, msg):
    # Do something
    pass

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect("iot.Eclipse.org", 1883, 60)

N'appelez pas loop_forever() ici!

Puis dans votre application __init__.py Appelez loop_start():

from . import mqtt

mqtt.client.loop_start()

L'utilisation de loop_start() au lieu de loop_forever() vous évitera de bloquer le thread d'arrière-plan.

11
Max Polezhaev