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
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
asynccode - 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.
- gmqtt - Own protocol implementation. No dependencies.
- aiomqtt - Wrapper around paho-mqtt.
- mqttools - Own protocol implementation. No dependencies.
- aio-mqtt - Own protocol implementation. No dependencies.
This is not an exhaustive list.
Honorable mentions
- trio-paho-mqtt - Trio-based. Wrapper around paho-mqtt.
Requirements
Python 3.7 or later.
There is only a single dependency:
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8fc1b77b8125c446eb97ab67a129650204ab5991e81a51c514fc9f1aa581ae5f
|
|
| MD5 |
3cd9327a5ee3c315dcdfb5e67d476e95
|
|
| BLAKE2b-256 |
abb3c5a5b1dbda51cb9b3a2e357ee57bcb7f339ff1c6b8125341157a5fee37f3
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98d58c9fb8aa18025ae6888496f74c7aba0a06d48d4e9bdd91804622eee20ef6
|
|
| MD5 |
21ed96247d89478937ec35bb079f382c
|
|
| BLAKE2b-256 |
86ede7e6bb0adaa361498811b58090026ea4cd2b96c18fc0a49cb106f1f1a436
|