У меня есть следующий код:
def on_connect(client, userdata, flags, rc):
if not rc:
print("mqtt connected")
print(f"c:{client}, ud:{userdata}, flags:{flags}, rc:{rc}")
log.info("mqtt connected")
else:
log.info("mqtt connected not ok")
def on_disconnect(client, userdata, rc):
print("dis")
log.info("mqtt disconnected" + str(rc))
def on_publish(client, userdata, mid):
print("publish")
log.info("mqtt published")
def on_log(client, userdata, level, buf):
print(f"log {level}:{buf}")
def on_message_comp(client, userdata, msg):
print("on msg comp")
log.info("\n\n")
log.info("received request")
def on_message_cali(client, userdata, msg):
print("on_msg_cali")
log.info("\n\n")
log.info("received")
def ssl_alpn():
...ssl stuff
return ssl_context
try:
cali_subscription = os.getenv("MQTT_CALI_SUBSCRIPTION")
comp_subscription = os.getenv("MQTT_COMP_SUBSCRIPTION")
mqttc = mqtt.Client(os.getenv("MQTT_CLIENT_NAME"))
print(f"calibration subscription: '{cali_subscription}'")
print(f"computation subscription: '{comp_subscription}'")
mqttc.on_connect = on_connect
mqttc.on_log = on_log
mqttc.on_disconnect = on_disconnect
mqttc.on_publish = on_publish
mqttc.on_message = on_message_comp
mqttc.message_callback_add(cali_subscription, on_message_cali)
ssl_context = ssl_alpn()
mqttc.tls_set_context(context=ssl_context)
mqttc.connect(aws_iot_endpoint, port=443)
mqttc.subscribe(comp_subscription)
mqttc.subscribe(cali_subscription)
mqttc.loop_forever()
except KeyboardInterrupt:
mqttc.disconnect()
mqttc.loop_stop()
except:
log.info("Exception connecting to mqtt clients: \n", exc_info=True)
mqttc.loop_stop()
Моя проблема в том, что через какое-то случайное время клиент отключается, чем, как ожидалось, клиент снова подключается, но проблема сценарий не получает триггер В моих журналах я вижу следующее:
log 16:Received PINGRESP
log 16:Sending PINGREQ
<paho.mqtt.client.Client object at 0x7fbfef2cddd0> None 1 0
dis #print this when i am disconnecting
log 16:Sending CONNECT (u0, p0, wr0, wq0, wf0, c1, k60) client_id=b'myClientName'
log 16:Received CONNACK (0, 0)
<paho.mqtt.client.Client object at 0x7fbfef2cddd0> None {'session present': 0} 0
connected OK #print when i am connecting
log 16:Sending PINGREQ
log 16:Received PINGRESP
Так что я вижу, что он отключен (не до конца понятно, почему keep_alive
по умолчанию 60 от того, что Я знаю) в какой-то момент времени, а затем, когда он снова подключается, я больше не могу его запустить.
Кто-нибудь знает, что я делаю неправильно?