paho-mqtt перестает слушать настроенные темы - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть часть python-кода в некоторых скриптах, которая перестает работать неправильно.Я использую обратный вызов on_message для подписки тем, но через несколько часов (где-то между 8 часами и двумя днями) сообщения mqtt больше не обрабатываются.Я даже больше не вижу сокета для брокера mqtt, так что я думаю, что где-то отсутствует повтор или повторное соединение?

из приведенного ниже сценария, я все еще могу видеть сообщения "в цикле попытки".

У меня есть попытка, за исключением обратного вызова on, так как я заметил, что любое исключение также приводит к разрыву соединения с брокером mqtt.

Этот код выполняется в нескольких запущенных скриптах, проблемавстречается вездеЭто не зависит от оборудования или соединения.

def start_keyble(command):
    print("start_keyble with value " + command)
    cmd = '/usr/local/bin/keyble-sendcommand --address XXXXXXXXXXXX --user_id 1 --user_key YYYYYYYYYYYYYYYY --command ' + str(command)
    output = os.popen(cmd).readlines()
    print("start_keyble will return ")
    print(output)
    return output

def on_message(client, userdata, message):
    try:
        if (str(message.topic).endswith("/set") and str(message.payload.decode("utf-8")) != ''):
            param = str(message.topic)
            value = str(message.payload.decode("utf-8"))
            print("set parameter " + param + " with value " + value + " requested")
            newstate = start_keyble(value)
            #mqttc.publish("Garagentuere/status", str(newstate), 0)
            for line in newstate:
                if (line != ""):
                    mqttc.publish("Garagentuere/status", str(line), 0)
                    time.sleep(1)
    except Exception:
        return

if __name__ == '__main__':
...
    mqttw = paho.Client('equiva-watcher', clean_session=True)
    mqttw.on_message=on_message
    mqttw.connect(BROKER_HOST, BROKER_PORT, 60)
    mqttw.loop_start()
    mqttw.subscribe([("Garagentuere/status/set", 0)])

    while True:
        try:
            print("in try-loop")
            time.sleep(FREQUENCY)
        except KeyboardInterrupt:
            break
        except Exception:
            raise
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...