Во-первых, вы не устанавливаете обратный вызов on_message
на клиенте, поэтому вы не получаете сообщений.
Во-вторых, нет никакой выгоды в установке обратных вызовов внутри цикла, они лучше перемещаются за пределыосновной цикл.
В-третьих, вы останавливаете цикл перед вызовом разъединения, так как все обратные вызовы выполняются в цикле событий клиента, on_disconnect
никогда не будет вызван. У вас также есть дополнительный аргумент в on_disconnect
, там не должно быть flags
.
Я также не уверен, что ваш connected_flag
когда-либо будет работать, его следует переместить в глобальную переменную
#!/usr/bin/python3
import paho.mqtt.client as mqtt #import the client1
import time
connected_flag=False
def on_message(client, userdata, message):
print("received message =",str(message.payload.decode("utf-8")))
def on_disconnect(client, userdata, rc):
global connected_flag
connected_flag=False #set flag
print("disconnected OK")
def on_connect(client, userdata, flags, rc):
global connected_flag
if rc==0:
connected_flag=True #set flag
print("connected OK")
client.subscribe("Phone/announcet") #subscribe
print("subscribed OK")
else:
print("Bad connection Returned code=",rc)
broker="192.168.1.71"
client = mqtt.Client() #create new instance
print("Connecting to broker ",broker)
client.username_pw_set(username="zzz",password="xxx")
client.on_connect = on_connect
client.on_message = on_message
client.on_disconnect = on_disconnect
while True:
client.connect(broker) #connect to broker
client.loop_start()
while not connected_flag: #wait in loop
print("In wait loop")
time.sleep(1)
print("in Main Loop")
time.sleep(3)
print(connected_flag)
client.disconnect() # disconnect
print("After disconnect")
print(connected_flag)
client.loop_stop()