(formerly known as asyncio-mqtt)
Write code like this:
Publisher
async with Client("test.mosquitto.org") as client:
await client.publish("humidity/outside", payload=0.38)
Subscriber
async with Client("test.mosquitto.org") as client:
async with client.messages() as messages:
await client.subscribe("humidity/#")
async for message in messages:
print(message.payload)
aiomqtt combines the stability of the time-proven paho-mqtt library with an intuitive, idiomatic asyncio 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
- Fully type-hinted
- Did we mention no more callbacks?
Read the documentation at sbtinstruments.github.io/aiomqtt
aiomqtt can be installed via pip install aiomqtt
. It requires Python 3.7+
to run. The only dependency is paho-mqtt.
If you can't wait for the latest version and want to install directly from GitHub, use:
pip install git+https://github.com/sbtinstruments/aiomqtt
Since Python 3.8, the default asyncio event loop is the ProactorEventLoop
. Said loop doesn't support the add_reader
method that is required by aiomqtt. Please switch to an event loop that supports the add_reader
method such as the built-in SelectorEventLoop
:
# Change to the "Selector" event loop if platform is Windows
if sys.platform.lower() == "win32" or os.name.lower() == "nt":
from asyncio import set_event_loop_policy, WindowsSelectorEventLoopPolicy
set_event_loop_policy(WindowsSelectorEventLoopPolicy())
# Run your async application as usual
asyncio.run(main())
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 so-called Eclipse Distribution License v1.0. It is almost word-for-word 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)
We're very happy about contributions to the project! You can get started by reading CONTRIBUTING.md.
This project adheres to Semantic Versioning. Breaking changes will only occur in major X.0.0
releases.
The changelog lives in CHANGELOG.md. It follows the principles of Keep a Changelog.
Is aiomqtt not what you're looking for? There are a few other clients you can try:
- paho-mqtt โ Own protocol implementation. Synchronous.
- gmqtt โ Own protocol implementation. Asynchronous.
- fastapi-mqtt โ Asynchronous wrapper around gmqtt. Simplifies integration in your FastAPI application.
- amqtt โ Own protocol implementation. Asynchronous. Includes a broker.
- mqttools โ Own protocol implementation. Asynchronous.
- trio-paho-mqtt โ Asynchronous wrapper around paho-mqtt (similar to aiomqtt). Based on trio instead of asyncio.