繁体   English   中英

python mqtt订阅多条消息

[英]python mqtt subscribe to mutliple message

我确实发布了多条消息:

#!/usr/bin/env python3

import paho.mqtt.publish as publish

topic1 = "testtopic/topic1"
topic2 = "testtopic/topic2"

val1 = b'54.8'
val2 = b'598.45'
val3 = b'4813.9'

msgs = [(topic1, val1),
        (topic1, val2),
        (topic2, val3)]

publish.multiple(msgs, hostname="localhost")

订阅它时

#!/usr/bin/env python3

import paho.mqtt.client as mqtt
import json

broker_url = "localhost"
broker_port = 1883

def on_connect(client, userdata, flags, rc):
    print("Connected With Result Code: {}".format(rc))
def on_disconnect(client, userdata, rc):
    print("Client Got Disconnected")
def on_message(client, userdata, message):
    msg = json.loads(message.payload.decode())
    print("Message Recieved: " + str(msg))
    
client = mqtt.Client()
client.connect(broker_url, broker_port)

client.on_connect = on_connect
client.on_message = on_message
client.on_disconnect = on_disconnect

topic = "testtopic/#"

client.subscribe(topic, qos=0)

client.loop_forever()

我明白了

Connected With Result Code: 0
Message Recieved: 54.8
Message Recieved: 598.45
Message Recieved: 4813.9

我如何将三个值分配给单个变量(例如 value1 = 54.8、value2 = 598.45、value3 = 598.45)以便能够像进行一些计算或将其保存到文件一样使用它们。

您可以使用下面这样的 JSON 格式..

#!/usr/bin/env python3
import paho.mqtt.publish as publish

topic1 = "testtopic/topic1"
topic2 = "testtopic/topic2"

val1 = b'54.8'
val2 = b'598.45'
val3 = b'4813.9'

payload1=json.dumps({"value1":val1, "value2":val2})
payload2=json.dumps({"value3":val3)

msgs = [(topic1, payload1),
        (topic2, payload2)]

publish.multiple(msgs, hostname="localhost")

对于 on_message 函数中的订阅者...

def on_message(client, userdata, message):
    msg = json.loads(message.payload.decode())
    res=json.loads(str(msg))
    if message.topic == topic1:
           print(str(res["value1"])+" & "+str(res["value2"]))
    else:
           print(str(res["value2"]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM