2016-03-18 3 views
3

Есть ли способ проверить, все еще подключен клиент к брокеру MQTT?MQTT - Есть ли способ проверить, все еще подключен клиент?

Что-то вроде

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

Edit: Был случай, когда мой Raspberry Pi перестал получать от клиента, хотя она по-прежнему (от взгляда его код был все еще показывает обновленные результаты) работает.

Вот код, так как я могу делать что-то неправильно:

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

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

Дело в том, что я был в отъезде, так что я даже не знаю, почему он остановился! Только если я перезапущу своего брокера, он снова начнет получать.

+0

Оставить заявку: https://github.com/TNChalise/php-mqtt. Код написан для клиента php. – TNC

ответ

3

Я не могу увидеть один в doc но есть on_disconnecton_connect обратные вызовы, которые могут быть использованы, чтобы установить собственное состояние переменной

EDIT:

Вам необходимо позвонить по одному из loop функций дать клиентские циклы для обработки сетевых операций:

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) 
+0

Я включил более подробно на мой вопрос и причину этого. –

+0

Отредактированный ответ для соответствия фактической проблеме – hardillb

+0

Он работал около двух часов, но затем мне пришлось перезапустить код клиента, потому что брокер снова не получал получение. По крайней мере, мне не нужно перезапускать Raspberry Pi, но почему клиент остановился, если он все еще показывает обновленные результаты? Я печатаю 'sent' сразу после строки публикации. –

-1

Не уверен, что если кто-то еще хочет ответить на этот вопрос, я знаю, что я сделал, следовательно, огляделся и обнаружил, что м qtt paho имеет такую ​​функциональность, чтобы проверить, все ли клиент подключен к брокеру или нет.

Это звучит примерно так:

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

Ура!

+0

Это не код python, а на python API isConnected() недоступен – CppChase

2

Вы можете активировать флаг в on_connect и деактивировать его в on_disconnect. Таким образом, вы можете узнать, подключен или нет клиент.

import paho.mqtt.client as mqtt 

flag_connected = 0 

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

def on_disconnect(client, userdata, rc): 
    global flag_connected 
    flah_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 
Смежные вопросы