adafruit / adafruit/Adafruit_CircuitPython_MiniMQTT
Recurring exception in loop() function
- 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