-

The idiomatic asyncio MQTT client#

-

Write code like this:

+

The idiomatic asyncio MQTT client 🙌#

+

aiomqtt is a lightweight and idiomatic MQTT client:

Publish

-
async with Client("test.mosquitto.org") as client:
-    await client.publish("humidity/outside", payload=0.38)
+
async with aiomqtt.Client("test.mosquitto.org") as client:
+    await client.publish("temperature/outside", payload=28.4)
 

Subscribe

-
async with Client("test.mosquitto.org") as client:
-    await client.subscribe("humidity/#")
+
async with aiomqtt.Client("test.mosquitto.org") as client:
+    await client.subscribe("temperature/#")
     async for message in client.messages:
         print(message.payload)
 
-

aiomqtt combines the stability of the time-proven paho-mqtt library with an idiomatic asyncio interface:

+
+

Key features#

  • No more callbacks! 👍

  • No more return codes (welcome to the MqttError)

  • @@ -236,14 +237,20 @@

    The idiomatic asyncio MQTT client

    Installation#

    -

    aiomqtt can be installed via pip install aiomqtt. The only dependency is paho-mqtt.

    -

    If you can’t wait for the latest version, you can install aiomqtt directly from GitHub with:

    -

    pip install git+https://github.com/sbtinstruments/aiomqtt

    +
    pip install aiomqtt
    +
    +
    +

    The only dependency is paho-mqtt.

    +

    If you can’t wait for the latest version, install directly from GitHub with:

    +
    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:

    +

    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
    @@ -273,19 +280,7 @@ 

    Versioning

    Changelog#

    -

    The changelog lives in CHANGELOG.md. It follows the principles of Keep a Changelog.

    -

    -