forked from peter/volvo2mqtt
fix: full patch - reconnect_delay, keepalive, clean_session, QoS1
Patches for paho-mqtt rc=7 at startup (MQTT_ERR_CONN_LOST): 1. reconnect_delay_set(1, 30) - auto-reconnect with backoff 2. keepalive=120 - prevents timeout during long OTP startup 3. subscribe(otp_topic) in on_connect - no race condition 4. time.sleep(0.05) - prevents TCP socket buffer overflow 5. clean_session=False - queued messages survive reconnect 6. qos=1 for discovery configs - PUBACK confirms delivery
This commit is contained in:
+7
-3
@@ -28,7 +28,7 @@ def connect():
|
||||
client_id = "volvoAAOS2mqtt" if os.environ.get("IS_HA_ADDON") \
|
||||
else "volvoAAOS2mqtt_" + settings.volvoData["username"].replace("+", "")
|
||||
try:
|
||||
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1, client_id)
|
||||
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1, client_id, clean_session=False)
|
||||
except AttributeError:
|
||||
# paho-mqtt < 2.0 does not have CallbackAPIVersion
|
||||
client = mqtt.Client(client_id)
|
||||
@@ -40,6 +40,7 @@ def connect():
|
||||
client.on_message = safe_on_message
|
||||
client.on_disconnect = on_disconnect
|
||||
client.on_connect = on_connect
|
||||
client.reconnect_delay_set(min_delay=1, max_delay=30)
|
||||
|
||||
client.will_set(availability_topic, "offline", 0, False)
|
||||
if settings["mqtt"]["username"] and settings["mqtt"]["password"]:
|
||||
@@ -50,10 +51,9 @@ def connect():
|
||||
if isinstance(conf_port, int):
|
||||
if conf_port > 0:
|
||||
port = settings["mqtt"]["port"]
|
||||
client.connect(settings["mqtt"]["broker"], port)
|
||||
client.connect(settings["mqtt"]["broker"], port, 120)
|
||||
|
||||
client.loop_start()
|
||||
client.subscribe("volvoAAOS2mqtt/otp_code")
|
||||
|
||||
global mqtt_client
|
||||
mqtt_client = client
|
||||
@@ -145,6 +145,7 @@ def on_connect(client, userdata, flags, rc):
|
||||
logging.info("MQTT connected")
|
||||
|
||||
send_heartbeat()
|
||||
mqtt_client.subscribe("volvoAAOS2mqtt/otp_code")
|
||||
if len(subscribed_topics) > 0:
|
||||
for topic in subscribed_topics:
|
||||
mqtt_client.subscribe(topic)
|
||||
@@ -439,6 +440,7 @@ def update_ha_device(entity, vin, state):
|
||||
mqtt_client.publish(
|
||||
f"homeassistant/{entity['domain']}/volvoAAOS2mqtt/{vin}_{entity['id']}/config",
|
||||
json.dumps(config),
|
||||
qos=1,
|
||||
retain=True
|
||||
)
|
||||
|
||||
@@ -489,8 +491,10 @@ def create_ha_devices():
|
||||
mqtt_client.publish(
|
||||
f"homeassistant/{entity['domain']}/volvoAAOS2mqtt/{vin}_{entity['id']}/config",
|
||||
json.dumps(config),
|
||||
qos=1,
|
||||
retain=True
|
||||
)
|
||||
time.sleep(0.05)
|
||||
time.sleep(2)
|
||||
send_heartbeat()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user