Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Subscribe on Multiple topic using PAHO-MQTT on python

I am trying to subscribe on three different topics using single subscriber client. But with the below mentioned code I am able to get data from only one server. Please suggest ant modification in my code that can be implemented to get the desired data from the different publisher clients.

# 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()
like image 362
Abhay Singh Avatar asked Feb 23 '18 06:02

Abhay Singh


1 Answers

Your MQTT_TOPIC array should contain QOS levels as well as topic names.

From the doc:

String and integer tuple

e.g. subscribe(("my/topic", 1))

topic

a tuple of (topic, qos). Both topic and qos must be present in the tuple.

qos

not used.

e.g.

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

like image 131
hardillb Avatar answered Sep 18 '22 14:09

hardillb