From 55f95f9a1b0e87d157ea3a23899cbdb4e41ecf07 Mon Sep 17 00:00:00 2001 From: Yoch Melka Date: Mon, 8 Jun 2026 20:35:38 +0300 Subject: [PATCH] fix: remove clean_session from MQTT v3.1.1 connect call paho-mqtt 2.x only accepts clean_session on Client construction, not in connect(). Co-authored-by: Cursor --- modpoll/mqtt_task.py | 2 -- tests/test_mqtt_task.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/modpoll/mqtt_task.py b/modpoll/mqtt_task.py index 6caa071..0a07c28 100644 --- a/modpoll/mqtt_task.py +++ b/modpoll/mqtt_task.py @@ -186,8 +186,6 @@ def connect(self) -> bool: } if self.mqtt_version == "5.0": connect_kwargs["clean_start"] = self.clean_start_or_session - else: - connect_kwargs["clean_session"] = self.clean_start_or_session self.mqtt_client.connect(**connect_kwargs) self.mqtt_client.loop_start() diff --git a/tests/test_mqtt_task.py b/tests/test_mqtt_task.py index 8ca084d..a82a3a4 100644 --- a/tests/test_mqtt_task.py +++ b/tests/test_mqtt_task.py @@ -149,6 +149,39 @@ def is_connected(self): assert result is None +def test_connect_mqtt_v311_omits_clean_session_kwarg(monkeypatch): + """paho-mqtt 2.x rejects clean_session in connect(); it is set on the Client constructor.""" + handler = MqttHandler( + name="test_mqtt", + host="broker.local", + port=1883, + user=None, + password=None, + clientid="test_client", + qos=0, + mqtt_version="3.1.1", + ) + + assert handler.setup() + + captured = {} + + def fake_connect(**kwargs): + captured.update(kwargs) + return 0 + + monkeypatch.setattr(handler.mqtt_client, "connect", fake_connect) + monkeypatch.setattr(handler.mqtt_client, "loop_start", lambda: None) + + assert handler.connect() is True + assert "clean_session" not in captured + assert captured == { + "host": "broker.local", + "port": 1883, + "keepalive": 60, + } + + def test_publish_attempts_reconnect_when_disconnected_qos1(monkeypatch): handler = MqttHandler( name="test_mqtt",