【问题标题】:Python/Django subscripe permanently to a MQTT Mosquito topic and get dataPython/Django 永久订阅 MQTT Mosquitto 主题并获取数据
【发布时间】:2021-11-11 09:14:26
【问题描述】:

在我的 django 项目中,我将永久订阅 MQTT 主题并在主题更改时触发操作。 在我的__init__.py 应用程序文件中,我尝试:

client1 = mqtt.Client(hex(uuid.getnode()))
data_dict = init_client('IOT/Data/#')

for k, v in data_dict.items():
    ...do some stuff with data

init_client 函数连接到我的 MQTT 服务器并开始循环(我使用 paho.mqtt.client):

def init_client(t_topic='IOT/Data/#'):
# Instantiate and check connection about MQTT instance
client1.on_connect = on_connect  # attach function to callback
client1.on_message = on_message  # attach function to callback
if t_topic == 'IOT/Data/#':
    client1.message_callback_add(t_topic, on_message_data)
else:
    client1.message_callback_add(t_topic, on_message_reg)
client1.on_publish = on_publish  # attach function to callback
# client1.on_subscribe =on_subscribe
# attach function to callback
try:
    client1.tls_set(mqtt_ca_crt, mqtt_cli_crt, mqtt_cli_key)
    client1.tls_insecure_set(True)
except ValueError:
    logging.info("SSL/TLS Already configured")
time.sleep(1)

try:
    if not client1.is_connected():
        client1.connect(mqtt_server, mqtt_port)  # connect to broker
        client1.connected_flag = False
    
except Exception:
    logging.error("Cannot connect MQTT Client1")

client1.loop_forever()
...and some other stuff

问题是当 loop_forever() 启动时,所有 django 应用程序都被搁置,永远等待。

所以我的问题是: 当我的 django allpication 开始并在每次主题实时更改时收到通知时,如何使用 paho.mqtt(异步)订阅主题? django 还有其他更聪明的方法吗?

提前非常感谢

【问题讨论】:

    标签: python django python-asyncio mqtt


    【解决方案1】:

    来自 Python Paho doc

    loop_start() / loop_stop()

    loop_start()
    loop_stop(force=False)
    

    这些函数实现了网络循环的线程接口。 在 connect*() 之前或之后调用 loop_start() 一次,运行一个线程 在后台自动调用 loop()。这释放了主要 线程用于可能阻塞的其他工作。这个调用也处理 重新连接到代理。调用 loop_stop() 停止后台 线。 force 参数当前被忽略。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多