Skip to main content

aiomqttc - Asynchronous MQTT Client

Reason this release was yanked:

Accidentaly published

Project description

aiomqttc - Asynchronous MQTT Client

An asynchronous MQTT client implementation compatible with both standard Python and MicroPython environments, particularly optimized for ESP32 platforms.

Tested on:

  • ESP32-PICO
    • MicroPython v1.23.0
    • RAM: 2MB

Features

  • Fully asynchronous operation using Python's asyncio
  • Support for both CPython and MicroPython runtimes
  • Automatic reconnection with configurable backoff strategy
  • QoS 0 and QoS 1 message support
  • SSL/TLS connection support
  • Topic subscription and message callback handling
  • Keep-alive and ping management
  • Clean connection termination

Development Setup

This project uses pre-commit to enforce code quality using Ruff.

Install it once:

pip install pre-commit
pre-commit install

Then, every time you commit, it will run the configured hooks.

Installation

For Python environments:

Install UV if you don't have it yet

curl -sSf https://install.ultraviolet.rs | sh

Clone the repository

git clone https://github.com/Tangerino/aiomqttc.git
cd aiomqttc

Install the package

uv venv && uv pip install -e .

Run the example

uv run main.py
2025-05-18 08:53:34.922 Stating aiomqttc example
Error reading config file: [Errno 2] No such file or directory: 'config.json'
Config file created with default values.
2025-05-18 08:53:34.923 Running... (Press Ctrl+C to exit)
2025-05-18 08:53:34.923 Connecting to broker...
2025-05-18 08:53:34.923 MQTTClient:connect. Connecting to :0
  • ⚠️ Remember to configure the config.json file with your MQTT broker details.

For MicroPython environments:

Copy aiomqttc.py to your device

Configuration

The client can be configured via a JSON file. Here's an example config.json:

{
  "wifi": {
    "ssid": "your_wifi_name",
    "password": "your_wifi_password"
  },
  "mqtt": {
    "broker": "broker.example.com",
    "port": 8883,
    "username": "your_username",
    "password": "your_password",
    "tls": true
  }
} 

Basic usage

import asyncio
from aiomqttc import MQTTClient


async def on_connect_callback(client, userdata, flags, rc):
    print(f"Connected with result code {rc}")
    # Subscribe to a topic
    await client.subscribe("home/+/status", qos=1)


async def message_callback(topic, message, retain):
    print(f"Received message on {topic}: {message}")


async def main():
    # Create an MQTT client
    client = MQTTClient(
        client_id="my_client",
        server="mqtt.example.com",
        port=1883,
        user="username",
        password="password",
        keepalive=60
    )

    # Set up callback for incoming messages
    client.on_connect = on_connect_callback
    client.on_message = message_callback

    # Connect to broker
    await client.connect()

    # Keep the connection alive
    try:
        while True:
            # Publish a message
            await client.publish("home/status", "online", qos=1, retain=True)
            await asyncio.sleep(1)
    except KeyboardInterrupt:
        await client.disconnect()


if __name__ == "__main__":
    asyncio.run(main())

Cross-Environment Development Benefits

One of the key advantages of aiomqttc is its ability to run identical code in both standard Python and MicroPython environments, which offers several benefits:

Streamlined Development Workflow

  • Test on desktop, deploy to microcontrollers: Debug complex MQTT interactions on your PC before deploying to resource-constrained devices
  • Faster iteration cycles: Develop and test on CPython where debugging tools are more advanced, then deploy tested code to MicroPython
  • Consistent behavior: The same code behaves predictably across platforms, reducing environment-specific bugs

Simplified Debugging

  • Use Python's rich debugging tools in your development environment before deploying
  • Test network recovery and edge cases on your development machine
  • Validate MQTT communication patterns without flashing hardware repeatedly

Advanced Use Cases

  • Run the same code on ESP32 edge devices and Python-based gateways

  • Create IoT systems with identical protocol handling across the entire device ecosystem

  • Maintain a single codebase for all MQTT-connected components in your project

  • Performance Optimizations

The library automatically adjusts its behavior based on the runtime environment:

  • Optimizes memory usage on MicroPython platforms
  • Takes advantage of more advanced asyncio features when running in CPython
  • Maintains consistent API despite different underlying implementations

API Reference

MQTTClient Class

MQTTClient(client_id=None, server=None, port=1883, user=None,
           password=None, keepalive=60, ssl=False, ssl_params=None,
           verbose=0)

Parameters

  • client_id: Unique client identifier (auto-generated if not provided)
  • server: MQTT broker hostname or IP address
  • port: MQTT broker port (default: 1883)
  • user: Username for authentication
  • password: Password for authentication
  • keepalive: Keepalive interval in seconds (default: 60)
  • ssl: Enable SSL/TLS connection (default: False)
  • ssl_params: SSL parameters as dictionary
  • verbose: Logging verbosity (0-2)

Methods

  • async connect(timeout_sec=10): Connect to the MQTT broker
  • async disconnect(): Disconnect from the broker
  • async publish(topic, message, qos=1, retain=False): Publish message
  • async subscribe(topic, qos=0): Subscribe to topic
  • async unsubscribe(topic): Unsubscribe from topic
  • reconnect_delay_set(min_delay=1, max_delay=10): Configure reconnection parameters
  • get_last_error(): Get last error message

Callbacks

  • on_connect: Callback for successful connection
  • on_disconnect: Callback for disconnection
  • on_message: Callback for incoming messages

License

This software is released into the public domain.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aiomqttc-1.0.5.tar.gz (18.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aiomqttc-1.0.5-py3-none-any.whl (19.3 kB view details)

Uploaded Python 3

File details

Details for the file aiomqttc-1.0.5.tar.gz.

File metadata

  • Download URL: aiomqttc-1.0.5.tar.gz
  • Upload date:
  • Size: 18.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for aiomqttc-1.0.5.tar.gz
Algorithm Hash digest
SHA256 cbcb5ce06f12bae717d2ae3022779e0dff166b6986ddb2fe8b07b01b9667f8a9
MD5 aad19997455b88485cd54a18261cc876
BLAKE2b-256 90e3dab2133c1bdb68f33d3c8f76c6f223d9a12cce11f05cefface645575d764

See more details on using hashes here.

File details

Details for the file aiomqttc-1.0.5-py3-none-any.whl.

File metadata

  • Download URL: aiomqttc-1.0.5-py3-none-any.whl
  • Upload date:
  • Size: 19.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for aiomqttc-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 6cd5740cb3727ae36c9b343750c8e350e4356a222d87b464a407db3c163c167f
MD5 381f8310bc5fff857bcb2cf9a8b1cb8d
BLAKE2b-256 5ed83e3d0d626fb303060ca86384de594c4042c4c84430f877ccceb882cd22a8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page