adafruit / adafruit/Adafruit_CircuitPython_MiniMQTT

Recurring exception in loop() function

Open
#177 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
81
Forks
52
PR merge metrics
No merged PRs in 30d

Description

After updating MiniMQTT from version 7.3.2 to 7.4.1, I have a problem with the loop() function, which, upon closer investigation, throws an MMQTTException (this issue occurs every second call). The exact link where the error occurs is here: [L1035](https://github.com/adafruit/Adafruit_CircuitPython_MiniMQTT/blob/e7c26859c3cda61e1f942f7ad4079e5014cd2dbf/adafruit_minimqtt/adafruit_minimqtt.py#L1035). For my purposes, I am modified the line to return an error.

```
raise MMQTTException(f"OSError: error: {error}, errno: {error.errno}.")

```

Here is a snippet from the testing code:

```while True:
try:
# check if subscribes is enabled
if mqtt.is_subscriber():
try:
mqtt.mqtt_client.loop()
except MQTT.MMQTTException as e:
print('MQTTException ...')
print(e)
else:
print ('Loop OK ...')

# BME680
pub_data = dict({})
pub_data["temperature"], \
pub_data["humidity"], \
pub_data["pressure"], \
pub_data["gas"], \
pub_data["altitude"], \
pub_data["dewpoint"] = bme680.get_measurement(dew_point=True)

# pub values from sensor
mqtt.pub(pub_data)

# wait one minute
time.sleep(60)
except KeyboardInterrupt as e:
print("Keyboard exit!")
import sys
sys.exit()
except:
microcontroller.reset()
```

Here is the output from Thonny's debugging console:
```
Attempting to connect to broker.
Connected to MQTT Broker!
Flags: 0
RC: 0
Subscribed to with QOS level 0

MQTTException ...
OSError: error: -116, errno: -116.
RAW T: 34.2737, CPU T: 31.3517
T: 30.7, RH: 100, hPa: 642, Gas: 430446, Alt: 347, Dew: 30.7
Published to with PID 1

Loop OK ...
RAW T: 30.9062, CPU T: 31.3517
T: 27.6, RH: 51, hPa: 1018, Gas: 482123, Alt: 218, Dew: 16.6
Published to with PID 1

MQTTException ...
OSError: error: -116, errno: -116.
RAW T: 29.5876, CPU T: 30.8835
T: 26.4, RH: 55, hPa: 1018, Gas: 449328, Alt: 218, Dew: 16.6
Published to with PID 1

...
```

In version 7.3.2, the loop() function worked without any issues. From what I have investigated, it appears that the error is not affected by whether I am using the original CircuitPython 8.0.5 or the latest version 8.2.6.

Links to my complete [example](https://github.com/heximcz/raspberry-pico-mqtt-bme680/blob/main/examples/main_bme680.py) code and the [MiniMQTT wrapper](https://github.com/heximcz/raspberry-pico-mqtt-bme680/blob/main/lib/hexim/hx_mqtt.py).

Hardware:
Raspberry Pico W

Broker:
Mosquitto 2.0.18

Can I modify my code as I'm writing below, but it doesn't seem very elegant to me, especially since it worked in the previous version.
```
try:
mqtt.mqtt_client.loop()
except MQTT.MMQTTException as e:
pass
```

Thank you and have a great day!

Contributor guide

No contributing guide indexed for this repository

Research direction

Start in adafruit_minimqtt/adafruit_minimqtt.py around L1035 and reproduce the recurring exception with the linked main_bme680.py example and MiniMQTT wrapper on the stated hardware. Compare behavior between versions 7.3.2 and 7.4.1; done means the same loop and publish sequence no longer produces the recurring MMQTTException.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
embedded-iot, networking
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.