Paho MQTT клиент отключен и больше сообщений не приходит после переподключения - PullRequest
1 голос
/ 17 января 2020

У меня есть Rspi с MQTT Paho Client. Я реализовал on_connect () ... on_diconnect () ... mqtt_service (), чтобы подписаться на topi c, установить sh соединение с брокером и сделать все oop .start и while1

    client.loop_start()    
# client.loop_forever()                 19/12/19 Du coup si on veux lire les Inputs fo fair un loop
print("> client.connected_flag= ", client.connected_flag, ".")
print("> client.bad_connection_flag= ", client.bad_connection_flag, ".")

while not client.connected_flag and not client.bad_connection_flag:                             #wait coonnection to broker .. usefull ??
    Print_savelog("[mqtt_service]: In wait loop to connect")
    time.sleep(1)
    Print_savelog('[mqtt_service]: client.connected_flag = ', client.connected_flag)
    Print_savelog('[mqtt_service]: client.bad_connection_flag = ', client.bad_connection_flag)

if client.bad_connection_flag:                                                                  # 20/12/19 PEUT etre là que ca ne reconnecte pas suite à coupure de jus et pas encore internet
    Print_savelog("[mqtt_service]: aaa")
    client.loop_stop()    #Stop loop
    sys.exit()

while 1:
    if (rx_en_crs==0):
        print("In the MQTT LOOP")
        toto.chk_position()
    #Print_savelog('> position [chk_position]2 = ', var.position_en_crs)

    #print(">2 var.position_ancienne = ", var.position_ancienne, ".")
    #print(">2 var.position_en_crs   = ", var.position_en_crs, ".")

        if ( (client.connected_flag == False) and (client.bad_connection_flag == True) ):
            Print_savelog('[mqtt_service]: into connected_flag=false & bad_connection_flag=true')
        if (var.position_ancienne!=var.position_en_crs ):
            Print_savelog('[mqtt_service]: > PUBLISHING position = ', var.position_en_crs)
            client.publish("mo/portail/position_portail",var.position_en_crs,1, True)
            var.position_ancienne=var.position_en_crs 

        time.sleep(1)      
    else:
        rx_en_crs=rx_en_crs

Иногда есть некоторое отключение [on_disconnect] по причине 1 ?? (я не знаю почему ...) Клиенту удалось выполнить переподключение [on_connect] с результатом 0. Но после этого невозможно получить какие-либо входящие Topi c.

. Мне нужно перезапустить вручную l oop ?? потому что переподключение является автоматическим c, но не l oop ??

Есть идеи?

...