{ "info": { "author": "Dave Arter", "author_email": "pypi@davea.me", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Build Tools" ], "description": "mqttwrapper\n===========\n\nA little glue package to make it simple to quickly put together scripts that\nbridge MQTT and other libraries. See examples below.\n\nInstallation\n------------\n\nInstall from PyPI::\n\n $ pip install mqttwrapper\n\nBy default ``paho-mqtt`` will be used as the MQTT library, but you can use\n``hbmqtt`` if you wish - see below. To install, use::\n\n $ pip install mqttwrapper[hbmqtt]\n\nUsage\n-----\n\n``mqttwrapper.run_script`` handles the setup/maintenance of the MQTT connection\nand subscriptions to topics, and calls a callback function when messages are\nreceived.\n\nThe simplest script looks something like this::\n\n from mqttwrapper import run_script\n\n def callback(topic, payload):\n print(\"Received payload {} on topic {}\".format(payload, topic))\n\n def main():\n run_script(callback, broker=\"mqtt://127.0.0.1\", topics=[\"my/awesome/topic1\", \"another/awesome/topic2\"])\n\nAny extra keyword arguments passed to ``run_script`` are passed back to the\ncallback function when it's called::\n\n from mqttwrapper import run_script\n\n def callback(topic, payload, context, foo):\n assert context == \"hello\"\n assert foo == \"bar\"\n print(\"Received payload {} on topic {}\".format(payload, topic))\n\n def main():\n run_script(callback, broker=\"mqtt://127.0.0.1\", topics=[\"my/awesome/topic1\", \"another/awesome/topic2\"], context=\"hello\", foo=\"bar\")\n\n\nIf you don't need any context passed to your callback, just the topic and\npayload of messages, you can run in 'importless' mode by creating a `callback`\nmodule which has a `callback` function defined, then execute the\n`mqttwrapper.run` module::\n\n $ cat callback.py\n def callback(topic, payload):\n print(topic, payload)\n\n $ python -m mqttwrapper.run\n\nRetained messages\n-----------------\n\nYou can ignore MQTT retained messages by passing ``ignore_retained=True`` when\ncalling ``run_script``. NB this is currently not supported by the hbmqtt\nbackend.\n\nPublishing messages from the callback\n-------------------------------------\n\nSometimes your callback function might want to publish its own MQTT messages,\nperhaps in reply to or an acknowledgement of a received message. This is\npossible by returning a list of ``(topic, payload)`` tuples from the callback,\ne.g.::\n\n def callback(topic, payload):\n print(\"Received payload {} on topic {}\".format(payload, topic))\n return [\n (\"{}/ack\".format(topic), payload)\n ]\n\n\n``mqttwrapper`` will take care of publishing these messages to the broker.\n\nConfiguration\n-------------\n\n``broker`` and ``topics`` can be omitted from the ``run_script`` call and\nenvironment variables used instead:\n\n- ``MQTT_BROKER``: MQTT broker to connect to, e.g. ``mqtt://127.0.0.1/``\n- ``MQTT_TOPICS``: Comma-separated list of topics to subscribe to, e.g. ``my/topic1,my/topic2``\n\nasyncio/hbmqtt\n--------------\n\nThe asyncio-powered ``hbmqtt`` MQTT library can be used instead, if you like::\n\n from mqttwrapper.hbmqtt_backend import run_script\n\n async def callback(topic, payload):\n print(\"Received payload {} on topic {}\".format(payload, topic))\n\n\nNote that your callback must be an awaitable in this case.\n\nYour callback may require context arguments which themselves are async objects\nor awaitables which poses a challenge: how to set these up outside of an asyncio\nevent loop before calling ``run_script``? In this case, you can pass a\n``context_callback`` awaitable as a kwarg to ``run_script``. This is run at the\nstart of the MQTT loop, and should return a dict which will be merged into the\nkwargs which are passed to your callback. For example::\n\n from mqttwrapper.hbmqtt_backend import run_script\n\n async def setup_db():\n return {\n \"query_db\": query_db\n }\n\n async def query_db(value):\n # pretend this is some slow DB query, for example.\n await asyncio.sleep(3)\n return value * 2\n\n async def callback(topic, payload, query_db):\n db_result = await query_db(int(payload))\n print(\"Received payload {} on topic {}, db result: {}\".format(payload, topic, db_result))\n\n def main():\n run_script(callback, context_callback=setup_db)\n\n\nNB hbmqtt's reconnection handling does not resubscribe to topics upon\nreconnection, and ``mqttwrapper`` does not yet work around this.\n\nExamples\n--------\n\n- rxv2mqtt_\n- tradfri-mqtt_ (uses asyncio)\n\n.. _rxv2mqtt: https://github.com/davea/rxv2mqtt/blob/master/main.py\n.. _tradfri-mqtt: https://github.com/davea/tradfri-mqtt/blob/master/main.py\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/davea/mqttwrapper", "keywords": "mqtt", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "mqttwrapper", "package_url": "https://pypi.org/project/mqttwrapper/", "platform": "", "project_url": "https://pypi.org/project/mqttwrapper/", "project_urls": { "Homepage": "https://github.com/davea/mqttwrapper" }, "release_url": "https://pypi.org/project/mqttwrapper/0.0.6/", "requires_dist": [ "paho-mqtt", "hbmqtt ; extra == 'hbmqtt'" ], "requires_python": "", "summary": "MQTT utility scripts made easy", "version": "0.0.6" }, "last_serial": 5585703, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "de8aad9ad86447af3ebec12dc67f9e8b", "sha256": "4bf9b61e25a49cfda668b22e69b1fa1c97c25135686340d709b227c75da1a247" }, "downloads": -1, "filename": "mqttwrapper-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "de8aad9ad86447af3ebec12dc67f9e8b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3686, "upload_time": "2018-02-13T22:32:01", "url": "https://files.pythonhosted.org/packages/41/83/2eb86022ff390c83cba46c3a0c1875eee66a8d03b94dc78cf950e7ff598d/mqttwrapper-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d0e747f2b584e3aa0168ed876c10404", "sha256": "655ea3539141d1a25f305c168f3adf5e875d37f3b6c29cca6ef1c887b70b6f86" }, "downloads": -1, "filename": "mqttwrapper-0.0.1.tar.gz", "has_sig": false, "md5_digest": "5d0e747f2b584e3aa0168ed876c10404", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1931, "upload_time": "2018-02-13T22:32:02", "url": "https://files.pythonhosted.org/packages/44/78/436576e2efdcce28f9dd40f5bd253f8b7506bf25ae4c47ca18c87db28f87/mqttwrapper-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "e09b5f3f1c639ce311c2adba1f0510f5", "sha256": "d6cf30dfb0e61f0075f0a15011b7d843644be2e7758569c37bfa61b8d9e1217a" }, "downloads": -1, "filename": "mqttwrapper-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e09b5f3f1c639ce311c2adba1f0510f5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5299, "upload_time": "2018-02-14T09:01:40", "url": "https://files.pythonhosted.org/packages/81/86/9e17e7d72a1162937a14f09529e64bca37f92ea946b2dca126c7f602e9ed/mqttwrapper-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "78765fd05a0f9af2e54f56815f6b9aa8", "sha256": "75e6c219a3ed091436561cc93d46543828da17a0f0b49d1d883b8a55bb78c6c9" }, "downloads": -1, "filename": "mqttwrapper-0.0.2.tar.gz", "has_sig": false, "md5_digest": "78765fd05a0f9af2e54f56815f6b9aa8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2910, "upload_time": "2018-02-14T09:01:42", "url": "https://files.pythonhosted.org/packages/e6/4f/f1547872badcf71566d147c8a791bf3f4b9fdc45b6c393e555e6ab779f9d/mqttwrapper-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "4cbad451827c976a9d6549826ca9cb15", "sha256": "efd9034423d9c7c0a33a63a0b91d68c9ba3ba057afa0eb940a23e93f66f22c99" }, "downloads": -1, "filename": "mqttwrapper-0.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4cbad451827c976a9d6549826ca9cb15", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6068, "upload_time": "2018-02-20T20:04:18", "url": "https://files.pythonhosted.org/packages/36/60/21847d45b3b0e1ce76d2cccac178eeddebbcfdf52932e8a9abae8ee68949/mqttwrapper-0.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "69f7de3e6affa4c7c4074c136b29120e", "sha256": "3ee7e416b0d3d0965cbb8ab01ea298bcd97f01bf8bf90476c5c28c37f6970e65" }, "downloads": -1, "filename": "mqttwrapper-0.0.3.tar.gz", "has_sig": false, "md5_digest": "69f7de3e6affa4c7c4074c136b29120e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3417, "upload_time": "2018-02-20T20:04:20", "url": "https://files.pythonhosted.org/packages/68/3c/343c9673c532caa4d404bafe595c82b2f10d0ea1d9e1b988e931b886db9d/mqttwrapper-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "2573914cc1a2b71f50ef96a542387d1e", "sha256": "973082dc4d0c353cb7da0ff99f759764f9bf556bce32b86450bd96c537a49014" }, "downloads": -1, "filename": "mqttwrapper-0.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2573914cc1a2b71f50ef96a542387d1e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6480, "upload_time": "2018-03-23T12:19:05", "url": "https://files.pythonhosted.org/packages/bd/6a/2c974e31820436962471f83ff0d247e5538e494a019be0eede68e1eb65da/mqttwrapper-0.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b6e7ba5ed425e68d018b94a86c93bc7b", "sha256": "d8d391ef706a4a0585785a4d36a70a523da79891bc1f91dafae0fb6fa49a2b19" }, "downloads": -1, "filename": "mqttwrapper-0.0.4.tar.gz", "has_sig": false, "md5_digest": "b6e7ba5ed425e68d018b94a86c93bc7b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3698, "upload_time": "2018-03-23T12:20:57", "url": "https://files.pythonhosted.org/packages/5d/31/0fefaabafe05d79adee664957421dd0e641307c5946f46dc32337924fa2c/mqttwrapper-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "125744fc56e9e2e8506d64f3900af618", "sha256": "dd95c8c5b6b094f0a4ad2676a248f34e57b82c1445075f07be83a026ad748eaf" }, "downloads": -1, "filename": "mqttwrapper-0.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "125744fc56e9e2e8506d64f3900af618", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7319, "upload_time": "2019-04-08T15:36:29", "url": "https://files.pythonhosted.org/packages/96/98/785c16f4904c4d86869c585c6bee0cc97b962843ccb747f858b8d128012e/mqttwrapper-0.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d06f6bb424585dc8f8d47b6aa2d1f4d0", "sha256": "f158390fff75a5bc2a7eee0d83c6fd80f41582188ef1b6a229a6e22b22aaf535" }, "downloads": -1, "filename": "mqttwrapper-0.0.5.tar.gz", "has_sig": false, "md5_digest": "d06f6bb424585dc8f8d47b6aa2d1f4d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4228, "upload_time": "2019-04-08T15:36:30", "url": "https://files.pythonhosted.org/packages/e0/42/b70869ce7241be5c2469ba0f6e5a3482485073c05b1c71c9adbcd4a87b60/mqttwrapper-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "76633737a779116c3d533de6c98677db", "sha256": "6a8d44a3bad9a8566683190dfd7dfd8658f78373937e65a45fd96163874df876" }, "downloads": -1, "filename": "mqttwrapper-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "76633737a779116c3d533de6c98677db", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5798, "upload_time": "2019-07-25T21:20:06", "url": "https://files.pythonhosted.org/packages/1d/8a/a52cd4a30220a67ac99dd53c29f4a4415f69ed10f6f4e028ca817a80a70b/mqttwrapper-0.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aeb8bbbe07e2f87426f2e602ae5a7999", "sha256": "97e27ae8f00950a581a70e3ce75176a58afb48d311523152f67b1a215dcbaa1f" }, "downloads": -1, "filename": "mqttwrapper-0.0.6.tar.gz", "has_sig": false, "md5_digest": "aeb8bbbe07e2f87426f2e602ae5a7999", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4358, "upload_time": "2019-07-25T21:20:08", "url": "https://files.pythonhosted.org/packages/19/c2/89cb3959e4045b5e8aaa8bb46f4e0ab8e228e990174a5ec631d3893f5471/mqttwrapper-0.0.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "76633737a779116c3d533de6c98677db", "sha256": "6a8d44a3bad9a8566683190dfd7dfd8658f78373937e65a45fd96163874df876" }, "downloads": -1, "filename": "mqttwrapper-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "76633737a779116c3d533de6c98677db", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5798, "upload_time": "2019-07-25T21:20:06", "url": "https://files.pythonhosted.org/packages/1d/8a/a52cd4a30220a67ac99dd53c29f4a4415f69ed10f6f4e028ca817a80a70b/mqttwrapper-0.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aeb8bbbe07e2f87426f2e602ae5a7999", "sha256": "97e27ae8f00950a581a70e3ce75176a58afb48d311523152f67b1a215dcbaa1f" }, "downloads": -1, "filename": "mqttwrapper-0.0.6.tar.gz", "has_sig": false, "md5_digest": "aeb8bbbe07e2f87426f2e602ae5a7999", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4358, "upload_time": "2019-07-25T21:20:08", "url": "https://files.pythonhosted.org/packages/19/c2/89cb3959e4045b5e8aaa8bb46f4e0ab8e228e990174a5ec631d3893f5471/mqttwrapper-0.0.6.tar.gz" } ] }