Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Strange MQTT exceptions - possible memory corruption?

Abierto
#10,886 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
28/100
Tipo de issue
Error
Claridad
Necesita aclaración
Estado de actividad
Estancado
Stack tecnológico
python

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug espressif
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

Lenguaje dominante
C
Estrellas
4.6k
Forks
1.4k
Merge medio
1 d 8 h
PR fusionados (30 d)
155

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de adafruit/circuitpython

Todos los issues de adafruit/circuitpython

Issues similares

Más issues de C

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.