# The idiomatic asyncio MQTT client 🙌
<a href="https://github.com/empicano/aiomqtt/actions/workflows/test.yml"><img alt="test" src="https://github.com/empicano/aiomqtt/actions/workflows/test.yml/badge.svg"></a> <a href="https://pypi.org/project/aiomqtt"><img alt="PyPI downloads" src="https://img.shields.io/pypi/dm/aiomqtt"></a> <a href="https://pypi.org/project/aiomqtt"><img alt="PyPI version" src="https://img.shields.io/pypi/v/aiomqtt"></a> <a href="https://pypi.org/project/aiomqtt"><img alt="Supported Python versions" src="https://img.shields.io/pypi/pyversions/aiomqtt.svg"></a> <a href="https://codecov.io/gh/sbtinstruments/aiomqtt"><img alt="Coverage" src="https://img.shields.io/codecov/c/github/sbtinstruments/aiomqtt"></a> <a href="https://github.com/empicano/aiomqtt"><img alt="Typing: strict" src="https://img.shields.io/badge/typing-strict-green.svg"></a> <a href="https://github.com/astral-sh/ruff"><img alt="Ruff" src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json"></a> <a href="https://github.com/empicano/aiomqtt/blob/main/LICENSE"><img alt="License: BSD-3-Clause" src="https://img.shields.io/github/license/empicano/aiomqtt"></a>
**Documentation:** [https://aiomqtt.felixboehm.dev](https://aiomqtt.felixboehm.dev)
---
<!-- documentation start -->
Write code like this:
**Publish**
```python
async with Client("test.mosquitto.org") as client:
await client.publish("temperature/outside", payload=28.4)
```
**Subscribe**
```python
async with Client("test.mosquitto.org") as client:
await client.subscribe("temperature/#")
async for message in client.messages:
print(message.payload)
```
## Key features
- 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?
## Installation
```
pip install aiomqtt
```
The only dependency is [paho-mqtt](https://github.com/eclipse/paho.mqtt.python).
If you can't wait for the latest version, install directly from GitHub with:
```
pip install git+https://github.com/empicano/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](https://docs.python.org/3/library/asyncio-platforms.html#windows) that is required by aiomqtt. Please switch to an event loop that supports the `add_reader` method such as the built-in `SelectorEventLoop`:
```python
# 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())
```
## License
This project is licensed under the [BSD 3-clause License](https://opensource.org/licenses/BSD-3-Clause).
Note that the underlying paho-mqtt library is dual-licensed. One of the licenses is the [Eclipse Distribution License v1.0](https://www.eclipse.org/org/documents/edl-v10.php), 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 happy about contributions to aiomqtt! 🎉 You can get started by reading [CONTRIBUTING.md](https://github.com/empicano/aiomqtt/blob/main/CONTRIBUTING.md).
## Versioning
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Breaking changes will only occur in major `X.0.0` releases.
## Changelog
See [CHANGELOG.md](https://github.com/empicano/aiomqtt/blob/main/CHANGELOG.md), which follows the principles of [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
Raw data
{
"_id": null,
"home_page": "https://github.com/empicano/aiomqtt",
"name": "aiomqtt",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.8",
"maintainer_email": null,
"keywords": "mqtt, iot, internet-of-things, asyncio, paho-mqtt, mqttv5",
"author": "Frederik Aalund",
"author_email": "fpa@sbtinstruments.com",
"download_url": "https://files.pythonhosted.org/packages/db/c9/168e78bd35b21d9bdbb26178db33a8f265e4a69bb4193e72434e7cb3d1cd/aiomqtt-2.3.0.tar.gz",
"platform": null,
"description": "# The idiomatic asyncio MQTT client \ud83d\ude4c\n\n<a href=\"https://github.com/empicano/aiomqtt/actions/workflows/test.yml\"><img alt=\"test\" src=\"https://github.com/empicano/aiomqtt/actions/workflows/test.yml/badge.svg\"></a> <a href=\"https://pypi.org/project/aiomqtt\"><img alt=\"PyPI downloads\" src=\"https://img.shields.io/pypi/dm/aiomqtt\"></a> <a href=\"https://pypi.org/project/aiomqtt\"><img alt=\"PyPI version\" src=\"https://img.shields.io/pypi/v/aiomqtt\"></a> <a href=\"https://pypi.org/project/aiomqtt\"><img alt=\"Supported Python versions\" src=\"https://img.shields.io/pypi/pyversions/aiomqtt.svg\"></a> <a href=\"https://codecov.io/gh/sbtinstruments/aiomqtt\"><img alt=\"Coverage\" src=\"https://img.shields.io/codecov/c/github/sbtinstruments/aiomqtt\"></a> <a href=\"https://github.com/empicano/aiomqtt\"><img alt=\"Typing: strict\" src=\"https://img.shields.io/badge/typing-strict-green.svg\"></a> <a href=\"https://github.com/astral-sh/ruff\"><img alt=\"Ruff\" src=\"https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json\"></a> <a href=\"https://github.com/empicano/aiomqtt/blob/main/LICENSE\"><img alt=\"License: BSD-3-Clause\" src=\"https://img.shields.io/github/license/empicano/aiomqtt\"></a>\n\n**Documentation:** [https://aiomqtt.felixboehm.dev](https://aiomqtt.felixboehm.dev)\n\n---\n\n<!-- documentation start -->\n\nWrite code like this:\n\n**Publish**\n\n```python\nasync with Client(\"test.mosquitto.org\") as client:\n await client.publish(\"temperature/outside\", payload=28.4)\n```\n\n**Subscribe**\n\n```python\nasync with Client(\"test.mosquitto.org\") as client:\n await client.subscribe(\"temperature/#\")\n async for message in client.messages:\n print(message.payload)\n```\n\n## Key features\n\n- No more callbacks! \ud83d\udc4d\n- No more return codes (welcome to the `MqttError`)\n- Graceful disconnection (forget about `on_unsubscribe`, `on_disconnect`, etc.)\n- Supports MQTT versions 5.0, 3.1.1 and 3.1\n- Fully type-hinted\n- Did we mention no more callbacks?\n\n## Installation\n\n```\npip install aiomqtt\n```\n\nThe only dependency is [paho-mqtt](https://github.com/eclipse/paho.mqtt.python).\n\nIf you can't wait for the latest version, install directly from GitHub with:\n\n```\npip install git+https://github.com/empicano/aiomqtt\n```\n\n### Note for Windows users\n\nSince Python 3.8, the default asyncio event loop is the `ProactorEventLoop`. Said loop [doesn't support the `add_reader` method](https://docs.python.org/3/library/asyncio-platforms.html#windows) that is required by aiomqtt. Please switch to an event loop that supports the `add_reader` method such as the built-in `SelectorEventLoop`:\n\n```python\n# Change to the \"Selector\" event loop if platform is Windows\nif sys.platform.lower() == \"win32\" or os.name.lower() == \"nt\":\n from asyncio import set_event_loop_policy, WindowsSelectorEventLoopPolicy\n set_event_loop_policy(WindowsSelectorEventLoopPolicy())\n# Run your async application as usual\nasyncio.run(main())\n```\n\n## License\n\nThis project is licensed under the [BSD 3-clause License](https://opensource.org/licenses/BSD-3-Clause).\n\nNote that the underlying paho-mqtt library is dual-licensed. One of the licenses is the [Eclipse Distribution License v1.0](https://www.eclipse.org/org/documents/edl-v10.php), which is almost identical to the BSD 3-clause License. The only differences are:\n\n- One use of \"COPYRIGHT OWNER\" (EDL) instead of \"COPYRIGHT HOLDER\" (BSD)\n- One use of \"Eclipse Foundation, Inc.\" (EDL) instead of \"copyright holder\" (BSD)\n\n## Contributing\n\nWe're happy about contributions to aiomqtt! \ud83c\udf89 You can get started by reading [CONTRIBUTING.md](https://github.com/empicano/aiomqtt/blob/main/CONTRIBUTING.md).\n\n## Versioning\n\nThis project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Breaking changes will only occur in major `X.0.0` releases.\n\n## Changelog\n\nSee [CHANGELOG.md](https://github.com/empicano/aiomqtt/blob/main/CHANGELOG.md), which follows the principles of [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).\n\n",
"bugtrack_url": null,
"license": "BSD-3-Clause",
"summary": "The idiomatic asyncio MQTT client, wrapped around paho-mqtt",
"version": "2.3.0",
"project_urls": {
"Documentation": "https://aiomqtt.felixboehm.dev",
"Homepage": "https://github.com/empicano/aiomqtt",
"Issue tracker": "https://github.com/empicano/aiomqtt/issues",
"Repository": "https://github.com/empicano/aiomqtt"
},
"split_keywords": [
"mqtt",
" iot",
" internet-of-things",
" asyncio",
" paho-mqtt",
" mqttv5"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0d5f73aa0474a75fce798c8c45a0993720c3722688ae5bea1d0a5c4a9f97ae8e",
"md5": "4c9763a24de8f2337bd71e7da4c6cc88",
"sha256": "127926717bd6b012d1630f9087f24552eb9c4af58205bc2964f09d6e304f7e63"
},
"downloads": -1,
"filename": "aiomqtt-2.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4c9763a24de8f2337bd71e7da4c6cc88",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.8",
"size": 15807,
"upload_time": "2024-08-06T22:54:50",
"upload_time_iso_8601": "2024-08-06T22:54:50.696476Z",
"url": "https://files.pythonhosted.org/packages/0d/5f/73aa0474a75fce798c8c45a0993720c3722688ae5bea1d0a5c4a9f97ae8e/aiomqtt-2.3.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "dbc9168e78bd35b21d9bdbb26178db33a8f265e4a69bb4193e72434e7cb3d1cd",
"md5": "e23feb8ad69a1ae3a9701fb1f3c03a3c",
"sha256": "312feebe20bc76dc7c20916663011f3bd37aa6f42f9f687a19a1c58308d80d47"
},
"downloads": -1,
"filename": "aiomqtt-2.3.0.tar.gz",
"has_sig": false,
"md5_digest": "e23feb8ad69a1ae3a9701fb1f3c03a3c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.8",
"size": 16479,
"upload_time": "2024-08-06T22:54:51",
"upload_time_iso_8601": "2024-08-06T22:54:51.859484Z",
"url": "https://files.pythonhosted.org/packages/db/c9/168e78bd35b21d9bdbb26178db33a8f265e4a69bb4193e72434e7cb3d1cd/aiomqtt-2.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-08-06 22:54:51",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "empicano",
"github_project": "aiomqtt",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "aiomqtt"
}