nr75
nr75

Reputation: 31

How to receive messages from multiple clients over mqtt?

I am sending a number of messages simultaneously from multiple clients from one python script and trying to receive them on another script. The problem I am getting is that the message is received but only from the first client that gets connected and it keeps on looping over it. What I need to have is that I get messages from each client in the manner they are published.

import paho.mqtt.client as mqtt
import time

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

def on_message(client, userdata, message):
    print ("Message received: "  + str(message.payload) + " from " +  str(client))

Connected = False  


client = mqtt.Client()                
client.on_connect= on_connect                     
client.on_message= on_message                      
client.connect(host)          
client.loop_start()      

while Connected != True:   
    time.sleep(0.1)
    client.subscribe("test")
    print("subscribed")

client.loop_stop()

Upvotes: 0

Views: 1350

Answers (1)

hardillb
hardillb

Reputation: 59791

You are misunderstanding what the client argument in the on_message callback is.

This value is a link to the local instance of the MQTT client that has subscribed to the topic.

MQTT messages do not carry any information about the client that published them, unless you explicitly encode it into the payload. Part of the point of a Pub/Sub protocol like MQTT is to totally decouple the information creator (publisher) from the information consumer (subscriber).

Also you should move the call to client.subscribe("test") to inside the on_connect() callback because as you have it you are trying to resubscribe to the same topic 10 times a second which will achieve absolutely nothing, except to generate unneeded load on the broker.

Upvotes: 1

Related Questions