Skip to main content

The idiomatic asyncio MQTT client, wrapped around paho-mqtt

Reason this release was yanked:

Avoid breaking changes due to the "asyncio-mqtt" => "aiomqtt" rename for user's of mossblaser's aiomqtt.

Project description

The idiomatic asyncio MQTT client 🙌

(formerly known as asyncio-mqtt)

License: BSD-3-Clause PyPI version Supported Python versions PyPI downloads test suite docs Coverage pre-commit.ci status Typing: strict Code Style: Black Ruff

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 a modern, asyncio-based interface.

  • No more callbacks! 👍
  • No more return codes (welcome to the MqttError)
  • Graceful disconnection (forget about on_unsubscribe, on_disconnect, etc.)
  • Compatible with async code
  • Fully type-hinted
  • Did we mention no more callbacks?

The whole thing is less than 900 lines of code.


Read the documentation at sbtinstruments.github.io/aiomqtt


Installation

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

Note for Windows users

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":
    # only import if platform/os is win32/nt, otherwise "WindowsSelectorEventLoopPolicy" is not present
    from asyncio import (
        set_event_loop_policy,
        WindowsSelectorEventLoopPolicy
    )
    # set the event loop
    set_event_loop_policy(WindowsSelectorEventLoopPolicy())
# Run your async application as usual
asyncio.run(main())

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 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)

Contributing

We're happy about your contributions to the project!

You can get started by reading the CONTRIBUTING.md.

Versioning

This project adheres to Semantic Versioning.

Expect API changes until we reach version 1.0.0. After 1.0.0, breaking changes will only occur in a major release (e.g., 2.0.0, 3.0.0, etc.).

Changelog

The changelog lives in the CHANGELOG.md document. It adheres to 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 — Own protocol implementation. Synchronous.
    GitHub stars license
  • gmqtt — Own protocol implementation. Asynchronous.
    GitHub stars license
  • fastapi-mqtt — Asynchronous wrapper around gmqtt. Simplifies integration in your FastAPI application.
    GitHub stars license
  • amqtt — Own protocol implementation. Asynchronous. Includes a broker.
    GitHub stars license
  • mqttools — Own protocol implementation. Asynchronous.
    GitHub stars license
  • trio-paho-mqtt — Asynchronous wrapper around paho-mqtt (similar to aiomqtt). Based on trio instead of asyncio.
    GitHub stars license

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

aiomqtt-0.17.0.tar.gz (16.9 kB view details)

Uploaded Source

Built Distribution

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

aiomqtt-0.17.0-py3-none-any.whl (14.5 kB view details)

Uploaded Python 3

File details

Details for the file aiomqtt-0.17.0.tar.gz.

File metadata

  • Download URL: aiomqtt-0.17.0.tar.gz
  • Upload date:
  • Size: 16.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.4

File hashes

Hashes for aiomqtt-0.17.0.tar.gz
Algorithm Hash digest
SHA256 015e4a7fdd1f3f22ee5b70b8fc0e3cf8fa0b283618e813d222eeaed87974bfaa
MD5 471438116636a926b3d9b2f2d3fe55e1
BLAKE2b-256 e3279b4449eb31a21794b6aa1fc5e4943dab56df4a3221c0fb0c5090dac74050

See more details on using hashes here.

File details

Details for the file aiomqtt-0.17.0-py3-none-any.whl.

File metadata

  • Download URL: aiomqtt-0.17.0-py3-none-any.whl
  • Upload date:
  • Size: 14.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.4

File hashes

Hashes for aiomqtt-0.17.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b68547a9be9f4c07a19df48ead084905ca550b0c76ff7ab528bba31d180cc93e
MD5 1a050d20c2c9f6ab1b0b8ec9c10ea31f
BLAKE2b-256 d022b90c0e4d08b75435966d42233b7c8d40435d28655d6555355e28917e7922

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