From 5f743abbe7de731b2966bddad39cd667793be275 Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Wed, 14 Jun 2023 22:41:51 +0200 Subject: [PATCH 1/4] loop() timeout parameter should be absolute --- adafruit_minimqtt/adafruit_minimqtt.py | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/adafruit_minimqtt/adafruit_minimqtt.py b/adafruit_minimqtt/adafruit_minimqtt.py index 7f96ea9d..2f448475 100644 --- a/adafruit_minimqtt/adafruit_minimqtt.py +++ b/adafruit_minimqtt/adafruit_minimqtt.py @@ -980,11 +980,10 @@ def reconnect(self, resub_topics: bool = True) -> int: def loop(self, timeout: float = 0) -> Optional[list[int]]: # pylint: disable = too-many-return-statements - """Non-blocking message loop. Use this method to - check incoming subscription messages. - Returns response codes of any messages received. + """Non-blocking message loop. Use this method to check for incoming messages. + Returns list of response codes of any messages received or None. - :param float timeout: Socket timeout, in seconds. + :param float timeout: timeout to wait for a message, in seconds. """ @@ -1002,23 +1001,21 @@ def loop(self, timeout: float = 0) -> Optional[list[int]]: return rcs stamp = time.monotonic() - self._sock.settimeout(timeout) rcs = [] while True: - rc = self._wait_for_msg(timeout) - if rc is None: - break - if time.monotonic() - stamp > self._recv_timeout: + rc = self._wait_for_msg() + if rc is not None: + rcs.append(rc) + if time.monotonic() - stamp > timeout: self.logger.debug( - f"Loop timed out, message queue not empty after {self._recv_timeout}s" + f"Loop timed out, message queue empty after {timeout} seconds" ) break - rcs.append(rc) return rcs if rcs else None - def _wait_for_msg(self, timeout: float = 0.1) -> Optional[int]: + def _wait_for_msg(self) -> Optional[int]: # pylint: disable = too-many-return-statements """Reads and processes network events. @@ -1039,8 +1036,6 @@ def _wait_for_msg(self, timeout: float = 0.1) -> Optional[int]: return None raise MMQTTException from error - # Block while we parse the rest of the response - self._sock.settimeout(timeout) if res in [None, b"", b"\x00"]: # If we get here, it means that there is nothing to be received return None From 9cd7392cff89711d6e4a13bb335481b5a332565a Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Wed, 14 Jun 2023 22:47:27 +0200 Subject: [PATCH 2/4] adjust the log message --- adafruit_minimqtt/adafruit_minimqtt.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/adafruit_minimqtt/adafruit_minimqtt.py b/adafruit_minimqtt/adafruit_minimqtt.py index 2f448475..1c9fc39f 100644 --- a/adafruit_minimqtt/adafruit_minimqtt.py +++ b/adafruit_minimqtt/adafruit_minimqtt.py @@ -1008,9 +1008,7 @@ def loop(self, timeout: float = 0) -> Optional[list[int]]: if rc is not None: rcs.append(rc) if time.monotonic() - stamp > timeout: - self.logger.debug( - f"Loop timed out, message queue empty after {timeout} seconds" - ) + self.logger.debug(f"Loop timed out after {timeout} seconds") break return rcs if rcs else None From 4e5e22eefdc8c41b761085c2c8141977011b120d Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Wed, 14 Jun 2023 22:49:24 +0200 Subject: [PATCH 3/4] adjust the doc --- adafruit_minimqtt/adafruit_minimqtt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_minimqtt/adafruit_minimqtt.py b/adafruit_minimqtt/adafruit_minimqtt.py index 1c9fc39f..6b974ddc 100644 --- a/adafruit_minimqtt/adafruit_minimqtt.py +++ b/adafruit_minimqtt/adafruit_minimqtt.py @@ -983,7 +983,7 @@ def loop(self, timeout: float = 0) -> Optional[list[int]]: """Non-blocking message loop. Use this method to check for incoming messages. Returns list of response codes of any messages received or None. - :param float timeout: timeout to wait for a message, in seconds. + :param float timeout: return after this timeout, in seconds. """ From 4f57b20bfc360ef82ba5e2fc40eeb120965adeac Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Thu, 22 Jun 2023 15:10:37 +0200 Subject: [PATCH 4/4] bump to 3 seconds for stability --- examples/esp32spi/minimqtt_pub_sub_nonblocking_esp32spi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/esp32spi/minimqtt_pub_sub_nonblocking_esp32spi.py b/examples/esp32spi/minimqtt_pub_sub_nonblocking_esp32spi.py index 8a5ce8ba..30611384 100644 --- a/examples/esp32spi/minimqtt_pub_sub_nonblocking_esp32spi.py +++ b/examples/esp32spi/minimqtt_pub_sub_nonblocking_esp32spi.py @@ -109,4 +109,4 @@ def message(client, topic, message): print("Sending photocell value: %d" % photocell_val) mqtt_client.publish(default_topic, photocell_val) photocell_val += 1 - time.sleep(0.5) + time.sleep(3)