Skip to content

Strange MQTT exceptions - possible memory corruption? #10886

@ldrolez

Description

@ldrolez

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugespressifapplies to multiple Espressif chips

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions