如何在python上使用PAHO-MQTT订阅多个主题

时间:2018-02-23 06:43:55

标签: python-3.x mqtt publish-subscribe

我正在尝试使用单个订阅者客户端订阅三个不同的主题。但是使用下面提到的代码,我只能从一台服务器获取数据。 请在我的代码中建议进行ant修改,以便从不同的发布者客户端获取所需的数据。

# Define Variables
MQTT_BROKER = "10.97.143.44"
MQTT_PORT = 11883
MQTT_TOPIC = [("Server1/kpi1"),("Server2/kpi2"),("Server3/kpi3")


def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("Connected to broker")
        global Connected                #Use global variable
        Connected = True                #Signal connection
    else:
        print("Connection failed")

def on_message(client, userdata, message):
    data = message.payload
    receive=data.decode("utf-8")
    m_decode = json.loads(receive)
    #print(m_decode)
    #print (m_decode['Server_name'])
    print ("Message received: "  + str(m_decode))


Connected = False   #global variable for the state of the connection

client = mqttClient.Client("Python")               #create new instance
client.on_connect= on_connect                      #attach function to callback
client.on_message= on_message                      #attach function to callback
client.connect(MQTT_BROKER,MQTT_PORT)              #connect to broker         



client.loop_start()        #start the loop

while Connected != True:    #Wait for connection

    time.sleep(0.1)

client.subscribe(MQTT_TOPIC)

try:

    while True:

        time.sleep(1)

except KeyboardInterrupt:

    print ("exiting")

List item

    client.disconnect()

    client.loop_stop()

1 个答案:

答案 0 :(得分:3)

您的MQTT_TOPIC数组应包含QOS级别和主题名称。

来自doc

  

字符串和整数元组

     

e.g。订阅(("我/主题",1))

     

<强>主题

     

(话题,qos)的元组。主题和qos都必须存在   元组。

     

<强>的QoS

     

未使用。

e.g。

MQTT_TOPIC = [("Server1/kpi1",0),("Server2/kpi2",0),("Server3/kpi3",0)]