如何从 mqtt 主题获取通配符值?

How to get wildcard value from mqtt topic?

假设我有多个设备,每个设备都有温度。所有与设备温度相关的消息都发布在主题 device/1/temeraturedevice/2/temperature 等上。我使用 Python paho-mqtt 处理关于此主题发布的所有消息,并带有一个使用通配符表达式 client.message_on_callback_add("device/+/temperature", ...) 的回调函数。有没有办法获取通配符表达式的值,这里直接+(w.o。需要解析msg.topic)?

不,回调包括消息发布到的主题。

您可以从主题中提取所需的任何信息。

我相信您希望从主题中提取客户 ID。回调函数将 clientid 作为回调的一部分。请检查下面的函数 URL.

https://pypi.org/project/paho-mqtt/#callbacks

如果您对收到的消息使用默认回调函数,您将能够将客户端作为单独的参数获取。

在这个例子中,您可以在消息到达时获取订阅的主题。您可以拆分主题以从订阅的主题中获取通配符。

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    client.subscribe("device/+/temperature")
    client.message_callback_add("device/+/temperature", handler("device/+/temperature"))
    
def handler(subscribed_topic):
    wildcard_expression = subscribed_topic
    def on_message(client, userdata, msg):
        print(msg.topic+" "+str(msg.payload), wildcard_expression)
    return on_message
    
client = mqtt.Client()
client.on_connect = on_connect
client.connect(<mqtt broker url>, 1883, 60)
client.loop_forever()