MQTT - Is there a way to check if the client is still connected

倾然丶 夕夏残阳落幕 提交于 2019-12-30 08:36:31

问题


Is there a way to check if the client is still connected to the MQTT broker?

Something like

if client.isConnected(): # for example
    # if True then do stuff

Edit: There was instance where my Raspberry Pi stopped receiving from the client although it was still (from the look of it, the code was still showing updated results) running.

Here is the code since I may be doing something wrong:

client = mqtt.Client()
client.connect(address, 1883, 60)

while True:
    data = getdata()
    client.publish("$ahmed/",data,0)
    time.sleep(0.2)

The thing is that I was away, so I am not even sure why it stopped! Only if I restart my broker then it will start receiving again.


回答1:


You can activate a flag in on_connect and deactivate it in on_disconnect. In this way you can know if the client is connected or not.

import paho.mqtt.client as mqtt

flag_connected = 0

def on_connect(client, userdata, flags, rc):
   global flag_connected
   flag_connected = 1

def on_disconnect(client, userdata, rc):
   global flag_connected
   flag_connected = 0

client = mqtt.Client()
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.connect(server,port)
client.loop_forever()
if flag_connected == 1:
   # Publish message
else:
   # Wait to reconnect



回答2:


I can't see one in the doc but there are the on_disconnect on_connect callbacks that can be used to set your own state variable

EDIT:

You need to call one of the loop functions to give the client cycles to handle the network operations:

client = mqtt.Client()
client.connect(address, 1883, 60)

while True:
    data = getdata()
    client.publish("$ahmed/",data,0)
    client.loop(timeout=1.0, max_packets=1)
    time.sleep(0.2)



回答3:


Not sure if someone still wants an answer to this, I know I did, hence looked around and found that mqtt paho has such functionality to check if the client is still connected to the broker or not.

It goes something like this:

MqttClient client = new MqttClient("tcp://broker.mqttdashboard.com:1883", //URI 
MqttClient.generateClientId(), //ClientId 
new MemoryPersistence()); //Persistence
client.connect();
client.isConnected();

Cheers!



来源:https://stackoverflow.com/questions/36093078/mqtt-is-there-a-way-to-check-if-the-client-is-still-connected

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!