I write 2 mqtt clients with Python2.7: mqtt_talk.py and mqtt_listen.py, they get publisher and subscriber inside. Take mqtt_talk.py as example, once received a mqtt message from mqtt_listen.py, it echo a new mqtt message back, and mqtt_listen.py works the same way. Therefore, these 2 clients communicate with each other as long as they are alive.
mqtt_talk.py
#!/usr/bin/env python
import os.path
import paho.mqtt.client as mqtt
class mqtt_talker():
def __init__(self, broker_ip):
self.ip = broker_ip
self.client = mqtt.Client(client_id = "test_mqtt_talker")
self.client.on_connect = self.on_connect
self.client.on_disconnect = self.on_disconnect
self.client.on_publish = self.on_publish
self.client.on_message = self.on_message
def connect(self):
self.client.connect(self.ip, 1883, 60)
def on_connect(self, client, userdata, flags, rc):
self.connected = True
print("Connected with broker ......")
def disconnect(self):
self.client.disconnect()
def on_disconnect(self, client, userdata, rc):
print("Disconnected with broker ......")
def publish(self):
data = "Hello Lily"
self.client.publish("mqtt_talker", data, 2)
def on_publish(self, client, userdata, mid):
print("Data publish success ...")
def subscribe(self, topic):
self.client.subscribe(topic)
def on_message(self, client, userdata, msg):
self.publish()
print("topic:{} payload: {}".format(msg.topic, msg.payload))
def loop_forever(self):
self.client.loop_forever()
if __name__ == '__main__':
broker_IP = "192.168.1.2" # change broker ip same with mqtt server
client = mqtt_talker(broker_IP)
client.connect()
client.publish()
client.subscribe("mqtt_listener")
#client.disconnect()
client.loop_forever()
mqtt_listen.py
#!/usr/bin/env python
import os.path
import paho.mqtt.client as mqtt
class mqtt_listener():
def __init__(self, broker_ip):
self.ip = broker_ip
self.client = mqtt.Client(client_id = "test_mqtt_listener")
self.client.on_connect = self.on_connect
self.client.on_disconnect = self.on_disconnect
self.client.on_publish = self.on_publish
self.client.on_message = self.on_message
def connect(self):
self.client.connect(self.ip, 1883, 60)
def on_connect(self, client, userdata, flags, rx):
print("Connected with broker ......")
self.subscribe("mqtt_talker")
return True
def disconnect(self):
self.client.disconnect()
def on_disconnect(self, client, userdata, rc):
print("Disconnected with broker ......")
def publish(self):
data = "Hello World"
self.client.publish("mqtt_listener", data, 2)
def on_publish(self, client, userdata, mid):
print("Data publish success ...")
def subscribe(self, topic):
self.client.subscribe(topic)
def on_message(self, client, userdata, msg):
self.publish()
print("topic:{} payload: {}".format(msg.topic, msg.payload))
def loop_forever(self):
self.client.loop_forever()
if __name__ == '__main__':
broker_IP = "192.168.1.2" # change broker ip same with mqtt server
client = mqtt_listener(broker_IP)
client.connect()
#client.publish()
client.subscribe("mqtt_talker")
#client.disconnect()
client.loop_forever()