У меня есть часть 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