Strange MQTT exceptions - possible memory corruption?
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 28/100
- Tipo di issue
- Bug
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- python
- Ambito
- embedded-iot, networking
Direzione di ricerca
Start by reproducing the reported exception with the provided MQTT receive loop on CircuitPython 10.1.3 or 10.1.4, then trace how adafruit_minimqtt handles PUBLISH packet lengths. No test or source file is named in the issue. Done means the reported packet no longer causes the exception or subsequent instability, with the behavior covered by a reproducible test.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
CircuitPython version and board name
Adafruit CircuitPython 10.1.3 on 2026-02-21; Wemos Lolin C3 Mini with ESP32-C3FH4
Code/REPL
import asyncio
import wifi
import socketpool
import ssl
import adafruit_minimqtt.adafruit_minimqtt as MQTT
import usyslog
BROKER = "192.168.0.1"
MQTT_PORT = 1883
MQTT_TOPICS = [
"inverter/total/P_AC",
"battery/1/relay/set",
"battery/2/relay/set",
]
sl = usyslog.UDPClient(socketpool.SocketPool(wifi.radio), ip='192.168.0.1', tag='battery')
def log(msg):
try:
sl.info(msg)
except Exception:
print(msg)
def handle_message(client, topic, message):
if topic == "inverter/total/P_AC":
power_ac = float(message)
log(f"AC power: {power_ac} W")
elif topic == "battery/1/relay/set":
if message == "ON":
log("Relay 1: turning ON")
else:
log("Relay 1: turning OFF")
elif topic == "battery/2/relay/set":
if message == "ON":
log("Relay 2: turning ON")
else:
log("Relay 2: turning OFF")
async def mqtt_receive_task():
pool = socketpool.SocketPool(wifi.radio)
ssl_ctx = ssl.create_default_context()
client = MQTT.MQTT(
broker=BROKER,
port=MQTT_PORT,
socket_pool=pool,
ssl_context=ssl_ctx,
)
client.on_message = handle_message
client.connect()
client.subscribe([(topic, 0) for topic in MQTT_TOPICS])
log("MQTT connected and subscribed.")
while True:
try:
client.loop(timeout=1)
except Exception as e:
log(f"MQTT error: {e} – reconnecting…")
try:
client.reconnect()
except Exception as re:
log(f"Reconnect failed: {re}")
await asyncio.sleep(9)
async def main():
await mqtt_receive_task()
asyncio.run(main())
Behavior
After some time, 12 to 24 hours:
MQTT error: MMQTTException('Topic length 11830 in PUBLISH packet exceeds remaining length 48 - 2', None);
Description
After this exception the program becomes more and more unstable and just crashes without any error message.
I suspect a memory corruption since I use the mosquitto MQTT server with other project, without any problems, but where?
Tested with Circuitpython 10.1.3 and 10.1.4.
Two different boards tested.
Additional information
No response
- Lingua principale
- C
- Stelle
- 4.6k
- Fork
- 1.4k
- Merge medio
- 1g 7h
- PR unite (30g)
- 166
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di adafruit/circuitpython
-
board breaks api
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
adafruit/circuitpython#11099 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
storage usb zephyr
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
adafruit/circuitpython#11531 ·
I maintainer di solito rispondono entro 1 giorno
-
Move silabs to ZephyrApertasilabs
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
adafruit/circuitpython#11507 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Feature/API request: portable camera capture across ESP-IDF, Zephyr, and parallel interfacesForse già presa @tannewt l’ha presa 1 giorno fa. Apertacircuitpython api displayio enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
adafruit/circuitpython#11505 · 5 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 38/100
adafruit/circuitpython#11472 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di adafruit/circuitpython
Issue simili
-
encoding.binary: bounds check guard is compiled away, so decode functions read past the sliceAperta
Difficoltà 2/5 Mezza giornata Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
I maintainer di solito rispondono entro 5 giorni
-
constants.h: M_PI / M_PI_2 fallbacks cause -Wambiguous-macro when H3 is compiled as a Clang moduleAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
area:backend bug launch:p2 scope:core
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
Chelis-Lang/chelis#3494 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
zephyrproject-rtos/zephyr#121740 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni