Skip to main content

Idomatic asyncio wrapper around paho-mqtt.

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

license semver

MQTT client with idiomatic asyncio interface 🙌

Write code like this:

async with Client('test.mosquitto.org') as client:
    await client.subscribe('floors/#')

    async with client.filtered_messages('floors/+/humidity') as messages:
        async for message in messages:
            print(message.decode())

asyncio-mqtt 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
  • Did we mention no more callbacks?

The whole thing is less than 250 lines of code.

Installation 📚

pip install asyncio-mqtt

Advanced use ⚡

Let's make the example from before more interesting:

import asyncio
from random import randrange
from asyncio_mqtt import Client

async def log_filtered_messages(client, topic_filter):
    async with client.filtered_messages(topic_filter) as messages:
        async for message in messages:
            print(f'[topic_filter="{topic_filter}"]: {message.decode()}')

async def log_unfiltered_messages(client):
    async with client.unfiltered_messages() as messages:
        async for message in messages:
            print(f'[unfiltered]: {message.decode()}')

async def main():
    async with Client('test.mosquitto.org') as client:
        await client.subscribe('floors/#')

        # You can create any number of message filters
        asyncio.create_task(log_filtered_messages(client, 'floors/+/humidity'))
        asyncio.create_task(log_filtered_messages(client, 'floors/rooftop/#'))
        # 👉 Try to add more filters!

        # All messages that doesn't match a filter will get logged here
        asyncio.create_task(log_unfiltered_messages(client))

        # Publish a random value to each of these topics
        topics = [
            'floors/basement/humidity',
            'floors/rooftop/humidity',
            'floors/rooftop/illuminance',
            # 👉 Try to add more topics!
        ]
        while True:
            for topic in topics:
                message = randrange(100)
                print(f'[topic="{topic}"] Publishing message={message}')
                await client.publish(topic, message, qos=1)
                await asyncio.sleep(2)

asyncio.run(main())

Alternative asyncio-based MQTT clients:

Is asyncio-mqtt not what you are looking for? Try another client:

  • hbmqtt - Own protocol implementation. Includes a broker.
    GitHub stars license
  • gmqtt - Own protocol implementation. No dependencies.
    GitHub stars license
  • aiomqtt - Wrapper around paho-mqtt.
    GitHub stars license
  • mqttools - Own protocol implementation. No dependencies.
    GitHub stars license
  • aio-mqtt - Own protocol implementation. No dependencies.
    GitHub stars license

This is not an exhaustive list.

Honorable mentions

Requirements

Python 3.7 or later.

There is only a single dependency:

License

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)

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

asyncio_mqtt-0.1.3.tar.gz (6.7 kB view details)

Uploaded Source

Built Distribution

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

asyncio_mqtt-0.1.3-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file asyncio_mqtt-0.1.3.tar.gz.

File metadata

  • Download URL: asyncio_mqtt-0.1.3.tar.gz
  • Upload date:
  • Size: 6.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.1.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.0

File hashes

Hashes for asyncio_mqtt-0.1.3.tar.gz
Algorithm Hash digest
SHA256 8fc1b77b8125c446eb97ab67a129650204ab5991e81a51c514fc9f1aa581ae5f
MD5 3cd9327a5ee3c315dcdfb5e67d476e95
BLAKE2b-256 abb3c5a5b1dbda51cb9b3a2e357ee57bcb7f339ff1c6b8125341157a5fee37f3

See more details on using hashes here.

File details

Details for the file asyncio_mqtt-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: asyncio_mqtt-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.1.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.0

File hashes

Hashes for asyncio_mqtt-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 98d58c9fb8aa18025ae6888496f74c7aba0a06d48d4e9bdd91804622eee20ef6
MD5 21ed96247d89478937ec35bb079f382c
BLAKE2b-256 86ede7e6bb0adaa361498811b58090026ea4cd2b96c18fc0a49cb106f1f1a436

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