/aiomqtt

The idiomatic asyncio MQTT client, wrapped around paho-mqtt

Primary LanguagePythonBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

The idiomatic async MQTT client 🙌

(formerly known as asyncio-mqtt)

License: BSD-3-Clause PyPI version Supported Python versions PyPI downloads test docs Coverage Typing: strict Code style: Ruff Ruff

Write code like this:

Publish

async with Client("test.mosquitto.org") as client:
    await client.publish("humidity/outside", payload=0.38)

Subscribe

async with Client("test.mosquitto.org") as client:
    await client.subscribe("humidity/#")
    async for message in client.messages:
        print(message.payload)

aiomqtt combines the stability of the time-proven paho-mqtt library with an idiomatic async interface:

  • No more callbacks! 👍
  • No more return codes (welcome to the MqttError)
  • Graceful disconnection (forget about on_unsubscribe, on_disconnect, etc.)
  • Supports MQTT versions 5.0, 3.1.1 and 3.1
  • Optionally: separate queues per subscription. No more overhead for dispatching.
  • Fully type-hinted
  • Did we mention no more callbacks?
  • Works with asyncio and trio! No workarounds required!

Read the documentation at sbtinstruments.github.io/aiomqtt


Installation

aiomqtt can be installed via pip install aiomqtt. The only dependencies are paho-mqtt and anyio.

If you can't wait for the latest version, you can install aiomqtt directly from GitHub with:

pip install git+https://github.com/sbtinstruments/aiomqtt

License

This project is licensed under the BSD 3-clause License.

Note that the underlying paho-mqtt library is dual-licensed. One of the licenses is the Eclipse Distribution License v1.0, which is almost identical to the BSD 3-clause License. The only differences are:

  • One use of "COPYRIGHT OWNER" (EDL) instead of "COPYRIGHT HOLDER" (BSD)
  • One use of "Eclipse Foundation, Inc." (EDL) instead of "copyright holder" (BSD)

Contributing

We're very happy about contributions to aiomqtt! ✨ You can get started by reading CONTRIBUTING.md.

Versioning

This project adheres to Semantic Versioning. Breaking changes will only occur in major X.0.0 releases.

Changelog

The changelog lives in CHANGELOG.md. It follows the principles of Keep a Changelog.

Related projects

Is aiomqtt not what you're looking for? There are a few other clients you can try:

  • paho-mqtt: Synchronous client
  • micropython-mqtt: Asynchronous client for microcontrollers in MicroPython
  • gmqtt: Asynchronous client
  • fastapi-mqtt: Asynchronous wrapper around gmqtt; Simplifies integration with FastAPI
  • amqtt: Asynchronous client; Includes a broker
  • trio-paho-mqtt: Asynchronous wrapper around paho-mqtt; Based on trio instead of asyncio