{ "info": { "author": "Tyler Crumpton", "author_email": "tyler.crumpton@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: ISC License (ISCL)", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "|Logo|\r\n\r\ndooblr - The Data Doubler\r\n=========================\r\n\r\n|Build Status|\r\n\r\nUtility for duplicating data received over MQTT to InfluxDB.\r\n\r\nInstallation\r\n------------\r\nIn the very near future, **dooblr** will be able to be installed via pypi/pip. Until then, or if you want the latest,\r\nbleeding-edge version, you can install it by cloning or downloading the repo and running ``pip install`` inside the\r\nroot directory::\r\n\r\n pip install ./\r\n\r\nYou should then be able to run **dooblr**::\r\n\r\n dooblr\r\n\r\nDocker\r\n------\r\n**dooblr** has also been conveniently Dockerized!\r\n\r\nYou will want to mount or copy your configs into the container at the ```/root/.dooblr``` directory. An example of how Makers Local 256 uses dooblr can be found in the [makerslocal/dooblr-prod](https://github.com/makerslocal/dooblr-prod) repo.\r\n\r\nExample:\r\n\r\n docker run -v $(pwd)/config:/root/.dooblr makerslocal/dooblr:latest\r\n\r\nConfiguration\r\n-------------\r\n**dooblr** is configured using YAML files, and these files are stored in the user's home directory. On Linux-based\r\nsystems they'll need to be in a directory like::\r\n\r\n /home//.dooblr/\r\n\r\nOn Windows they're loaded from somewhere like::\r\n\r\n C:\\Users\\\\.dooblr\\\r\n\r\nAfter the first run of **dooblr**, this directory will be created, and some default configuration files will be there.\r\n**dooblr** requires a main ``dooblr.yml`` that defines MQTT and InfluxDB connections, and one or more measurement\r\nconfigs.\r\n\r\nA default-settings ``dooblr.yml`` config file will look like::\r\n\r\n # dooblr.yaml\r\n global:\r\n config-dir: /home//.dooblr/measurements # Directory that contains dooblr's measurement configs\r\n\r\n mqtt:\r\n host: localhost # Host, domain name, or IP address of the MQTT broker\r\n port: 1883 # Port number of the MQTT broker\r\n\r\n influxdb:\r\n host: localhost # Host, domain name, or IP address of the InfluxDB instance\r\n port: 8086 # Port number of the InfluxDB instance\r\n username: root # Username for the InfluxDB instance\r\n password: root # Password for the InfluxDB instance\r\n database: dooblr # Database to use in InfluxDB (will be created if it doesn't exist already)\r\n\r\nBy default, **dooblr** looks for ``*.yml`` measurement configs in the ``.dooblr/measurements/`` directory. Measurement\r\nconfigs are used to tell **dooblr** which topics and pieces of data need to be pulled from MQTT and pushed to InfluxDB.\r\n**dooblr** expects the MQTT message to contain either a single value or simple JSON data in its payload.\r\n\r\nSingle Value MQTT Message\r\n+++++++++++++++++++++++++\r\nIf you have a device that publishes to the ``home/garage/humidity`` topic with single float values like ``12.3``,\r\nyou would want to create a measurement like ``humidity.yml``::\r\n\r\n # humidity.yml\r\n humidity:\r\n parser: single-value\r\n value_type: float # Valid value_types are integer, float, boolean, and string\r\n field_name: humidity # If no field_name is provided, the default is 'value'\r\n topics:\r\n - home/garage/humidity\r\n\r\n\r\nSimple JSON MQTT Message\r\n++++++++++++++++++++++++\r\nLet's say you have a device that publishes to the ``home/kitchen/fridge/temperature`` and\r\n``home/kitchen/freezer/temperature`` topics with the data::\r\n\r\n {\"temperature\": 40.1, \"units\":\"F\", \"humidity\": 0.12, \"label\": \"blue\"}\r\n\r\nYou would probably want to create a measurement config called ``temperature.yml`` that looks like::\r\n\r\n # temperature.yml\r\n temperature:\r\n topics:\r\n - home/kitchen/fridge/temperature\r\n - home/kitchen/freezer/temperature\r\n - home/kitchen/+/temperature # Standard MQTT wildcards also apply here\r\n fields:\r\n - temperature\r\n - humidity\r\n tags:\r\n - units\r\n optional_tags:\r\n - label # Maybe not every message on these topics have a \"label\" property!\r\n\r\nNotice that there can be multiple topics, fields, and tags. Tags and fields refer to the tags and fields used in\r\nInfluxDB. Optional tags will not raise an error if they weren't defined in the MQTT message, while regular tags will.\r\n\r\n.. |Build Status| image:: https://travis-ci.org/makerslocal/dooblr.svg?branch=master\r\n :target: https://travis-ci.org/makerslocal/dooblr\r\n\r\n.. |Logo| image:: https://github.com/makerslocal/dooblr/blob/master/logo/text_logo.png?raw=true\r\n :height: 70px\r\n :alt: dooblr logo\r\n\r\n\r\n\r\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/makerslocal/dooblr", "keywords": "", "license": "ISC", "maintainer": "", "maintainer_email": "", "name": "dooblr", "package_url": "https://pypi.org/project/dooblr/", "platform": "", "project_url": "https://pypi.org/project/dooblr/", "project_urls": { "Homepage": "https://github.com/makerslocal/dooblr" }, "release_url": "https://pypi.org/project/dooblr/3.1.0/", "requires_dist": [ "configparser", "influxdb", "paho-mqtt", "pyyaml", "schema" ], "requires_python": "", "summary": "Duplicate data received over MQTT to InfluxDB", "version": "3.1.0" }, "last_serial": 3642715, "releases": { "2.1.0": [ { "comment_text": "", "digests": { "md5": "a7b4b9985d750eeed5bcc7ef736aa3f4", "sha256": "cb30a2262cd167ace6ba205eaea6b5650a6f9b39e16b3ddfc9a55e2fca5c8a20" }, "downloads": -1, "filename": "dooblr-2.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "a7b4b9985d750eeed5bcc7ef736aa3f4", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10423, "upload_time": "2016-11-20T03:11:23", "url": "https://files.pythonhosted.org/packages/d3/d9/4810ffce0627c7d23c77ae289c8df3450a57f662a560600742573bc4d5e1/dooblr-2.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b4886f669b30e56ed37e99c3c17a3651", "sha256": "f51ae6bb99a7872d83c6e0b73dbc21d25e9a27acfc0d1de4ca0ecf5c020e140d" }, "downloads": -1, "filename": "dooblr-2.1.0.tar.gz", "has_sig": false, "md5_digest": "b4886f669b30e56ed37e99c3c17a3651", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8102, "upload_time": "2016-11-20T03:11:25", "url": "https://files.pythonhosted.org/packages/64/44/c77513aa0f3fdc2b5caddad18f9e334d43cdf1b73311421157b3e0f6cf22/dooblr-2.1.0.tar.gz" } ], "3.1.0": [ { "comment_text": "", "digests": { "md5": "5d5b9efb5b9b307d8c5a5507f4107462", "sha256": "44ae210368d38a0c314e39a1304bf5d27ed0df6cff5624825060ff4b50e51f3e" }, "downloads": -1, "filename": "dooblr-3.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "5d5b9efb5b9b307d8c5a5507f4107462", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10042, "upload_time": "2018-03-06T04:51:41", "url": "https://files.pythonhosted.org/packages/67/f2/d1e4140ddd4c4573f2d737b3da34eb7298efcdc0bf88a75bb0b58e3a97ff/dooblr-3.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e8b2c050c2bd3e4900898a2c40084eed", "sha256": "2f7ab0d3b0753cfc40eaa085cf4e5f38fa0e1b48850349e31061d7d8f9f4911c" }, "downloads": -1, "filename": "dooblr-3.1.0.zip", "has_sig": false, "md5_digest": "e8b2c050c2bd3e4900898a2c40084eed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15037, "upload_time": "2018-03-06T04:51:42", "url": "https://files.pythonhosted.org/packages/e8/39/b189d4161c575f1bc5e4a86819aa3d4ad7b058cb5f941dca1774d28cd886/dooblr-3.1.0.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5d5b9efb5b9b307d8c5a5507f4107462", "sha256": "44ae210368d38a0c314e39a1304bf5d27ed0df6cff5624825060ff4b50e51f3e" }, "downloads": -1, "filename": "dooblr-3.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "5d5b9efb5b9b307d8c5a5507f4107462", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10042, "upload_time": "2018-03-06T04:51:41", "url": "https://files.pythonhosted.org/packages/67/f2/d1e4140ddd4c4573f2d737b3da34eb7298efcdc0bf88a75bb0b58e3a97ff/dooblr-3.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e8b2c050c2bd3e4900898a2c40084eed", "sha256": "2f7ab0d3b0753cfc40eaa085cf4e5f38fa0e1b48850349e31061d7d8f9f4911c" }, "downloads": -1, "filename": "dooblr-3.1.0.zip", "has_sig": false, "md5_digest": "e8b2c050c2bd3e4900898a2c40084eed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15037, "upload_time": "2018-03-06T04:51:42", "url": "https://files.pythonhosted.org/packages/e8/39/b189d4161c575f1bc5e4a86819aa3d4ad7b058cb5f941dca1774d28cd886/dooblr-3.1.0.zip" } ] }