{ "info": { "author": "John Donnal", "author_email": "donnal@usna.edu", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Programming Language :: Python" ], "description": ".. image:: https://coveralls.io/repos/github/wattsworth/joule/badge.svg?branch=master\n :target: https://coveralls.io/github/wattsworth/joule?branch=master\n\nJoule\n========\n\nJoule is a data capture and signal processing engine. It allows you to build\nrobust sensors using embedded systems such as the\nRaspberry Pi. Joule uses modules to build complex acquisition\nand signal processing workflows from simple building blocks. \nModules are user defined processes that are connected\ntogether by data streams.\n\nJoule acts as a process manager, ensuring that modules start at system\nboot and are restarted if they fail. Joule also collects runtime\nstatistics and logs for each module making it easy to detect\nbugs and find bottlenecks in processing pipelines.\n\nSee https://wattsworth.net/joule for full documentation. To get started see:\nhttps://wattsworth.net/joule/quick_start.html\n\nStreams\n-------\n\nStreams are timestamped data flows that connect modules together.\nStreams can represent primary measurements such as readings from a current\nsensor or derived measurements such as harmonic content. A stream has\none or more elements and can be viewed as a database table: ::\n\n ========= ====== ====== === ======\n timestamp value1 value2 ... valueN\n ========= ====== ====== === ======\n 1003421 0.0 10.5 ... 2.3\n 1003423 1.0 -8.0 ... 2.3\n 1003429 8.0 12.5 ... 2.3\n 1003485 4.0 83.5 ... 2.3\n ========= ====== ====== === ======\n\n\n\nModules\n-------\n\nModules process streams. A module may receive zero, one or more\ninput streams and may produce zero, one, or more output streams. While\nJoule does not enforce any structure on modules, we suggest\nstructuring your data pipeline with two types of modules: Readers, and\nFilters. Readers take no inputs. They directly manage a sensor (eg a\nTTY USB device) and generate an output data stream with sensor\nvalues. Filters take these streams as inputs and produce new outputs.\nFilters can be chained to produce complex behavior from simple,\nreusable building blocks.\n\n\nExample\n-------\nUsing a light sensor and temperature sensor to detect occupancy in a room: ::\n\n [Module] a_stream\n\n [ TempReader] --> temp_values --,\n [LightReader] --> light_values --+--> [OccupancyFilter] --> room_status\n\nFeatures\n--------\n\n- Fast, lightweight\n- Highbandwidth signal processing\n\nInstallation\n------------\n\nJoule requires Python 3.6 or later. Install Joule by running:\n\n $> python3 setup.py install\n\nTo run the Joule daemon, first configure your system with:\n\n $> sudo joule admin initialize\n\nThen control the daemon as a system service:\n\n $> sudo systemctl [enable|disable|start|stop|status] joule\n\n\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/wattsworth/joule", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://wattsworth.net/joule", "keywords": "", "license": "open source (see LICENSE)", "maintainer": "", "maintainer_email": "", "name": "Joule", "package_url": "https://pypi.org/project/Joule/", "platform": "Any", "project_url": "https://pypi.org/project/Joule/", "project_urls": { "Download": "https://github.com/wattsworth/joule", "Homepage": "http://wattsworth.net/joule" }, "release_url": "https://pypi.org/project/Joule/0.9.6/", "requires_dist": [ "click", "treelib", "numpy", "scipy", "psutil", "aiohttp", "markdown", "BeautifulSoup4", "dateparser", "tabulate", "sqlalchemy", "aiohttp-jinja2", "jinja2", "asyncpg", "psycopg2-binary", "uvloop", "aiodns", "cchardet", "pyopenssl", "dsnparse" ], "requires_python": "", "summary": "Decentralized data processing for IoT platforms", "version": "0.9.6" }, "last_serial": 5991277, "releases": { "0.8.10": [ { "comment_text": "", "digests": { "md5": "5ce9e3818e9f1469414db7c566ec3878", "sha256": "c1e5fd27641ca877a0c4a3caf80689695e6233765d0cf346b02fbcdf5e619c12" }, "downloads": -1, "filename": "Joule-0.8.10-py3-none-any.whl", "has_sig": false, "md5_digest": "5ce9e3818e9f1469414db7c566ec3878", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 465964, "upload_time": "2019-02-07T20:44:52", "url": "https://files.pythonhosted.org/packages/e4/34/eadf078cd0797d14920073aca0efc0eba8e54c174c3e962118d04d12a442/Joule-0.8.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "51e7cd5967adce0a058333c431cf7b93", "sha256": "a6bbb620de8ecd6a8cc2f707148760224ed0f5f649efc25feb26f4107a41a93e" }, "downloads": -1, "filename": "Joule-0.8.10.tar.gz", "has_sig": false, "md5_digest": "51e7cd5967adce0a058333c431cf7b93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 428476, "upload_time": "2019-02-07T20:44:54", "url": "https://files.pythonhosted.org/packages/fd/31/7ae9166e47c15102ad0a5fa4d9e182b32098c301a8252cf8c86a2b457ffd/Joule-0.8.10.tar.gz" } ], "0.8.11": [ { "comment_text": "", "digests": { "md5": "d0ee69d3975a427fbcfa1a091d01b8e2", "sha256": "1e4d98bbe8bcc3a791f4ee047e11ffd0d31c7346210c269072fdb0f7ee1ecd5c" }, "downloads": -1, "filename": "Joule-0.8.11-py3-none-any.whl", "has_sig": false, "md5_digest": "d0ee69d3975a427fbcfa1a091d01b8e2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 477199, "upload_time": "2019-03-05T21:28:19", "url": "https://files.pythonhosted.org/packages/59/c3/19085556a10ba965cd2d2ec56b34586cb8b3d4bf5216a44aa9e78aff9918/Joule-0.8.11-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57cd1f26e117471e7652f21d31485ca6", "sha256": "8c73ff5a3d54cce043d415ea7faf735e46ae365476e53c4ba6bf603238a26a6c" }, "downloads": -1, "filename": "Joule-0.8.11.tar.gz", "has_sig": false, "md5_digest": "57cd1f26e117471e7652f21d31485ca6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 431282, "upload_time": "2019-03-05T21:28:21", "url": "https://files.pythonhosted.org/packages/c0/c4/e0744d623cb5d93f288d8f0247a6d3d2e9fa862455e46b7e94d9410ad532/Joule-0.8.11.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "8d6143d5d319f4c33c56dc48562f8569", "sha256": "a1bf72765376409a6b8f5d9cfe38f191ec6b77fd86fa63714357153661e72b38" }, "downloads": -1, "filename": "Joule-0.9.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8d6143d5d319f4c33c56dc48562f8569", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 483570, "upload_time": "2019-05-09T15:11:20", "url": "https://files.pythonhosted.org/packages/ba/60/fde6c8906bca0bb9ac0c58dce3ccf8065559847ff02367d7714c0bd298c4/Joule-0.9.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7987281c0599cecf1c82329c2a42fc81", "sha256": "d4a3e204c9cd688469a0703c1d8bbdf81a5f7174989707424648aad9ba265b59" }, "downloads": -1, "filename": "Joule-0.9.0.tar.gz", "has_sig": false, "md5_digest": "7987281c0599cecf1c82329c2a42fc81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 438764, "upload_time": "2019-05-09T15:11:21", "url": "https://files.pythonhosted.org/packages/86/0e/efde30af816a3918c39478d68ec74e4d95d275cca77ffba460891406ca9c/Joule-0.9.0.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "aaad076b6c7a2487e1c241aa54d6f572", "sha256": "57116967321939416e2f6f8f0f7b748fe53085212fc05f408d072d210ccdcf05" }, "downloads": -1, "filename": "Joule-0.9.1.tar.gz", "has_sig": false, "md5_digest": "aaad076b6c7a2487e1c241aa54d6f572", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 443867, "upload_time": "2019-05-30T17:14:25", "url": "https://files.pythonhosted.org/packages/ca/ae/2c7d129799475384730164b162c0ec452adfb937c831d9d275ad65e4bd21/Joule-0.9.1.tar.gz" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "cd4e8bf9f35279bb6f4ccbafcb52f82d", "sha256": "19303fd50d13e28390da30a8fde1fd01fda5cb2793c2e873afa451c91c1c4efe" }, "downloads": -1, "filename": "Joule-0.9.2-py3-none-any.whl", "has_sig": false, "md5_digest": "cd4e8bf9f35279bb6f4ccbafcb52f82d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 505683, "upload_time": "2019-07-26T20:23:29", "url": "https://files.pythonhosted.org/packages/56/f2/b43ef0a0aa02842e151597c2af544b787e37aa5676957e9b1680b0805929/Joule-0.9.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d082a6b1c7241582c58082b4a3aee27a", "sha256": "42a2bcbd868e28eac910da3658f57dd0ab2cdb6a6d841a937acf92ba96b26ec7" }, "downloads": -1, "filename": "Joule-0.9.2.tar.gz", "has_sig": false, "md5_digest": "d082a6b1c7241582c58082b4a3aee27a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 452864, "upload_time": "2019-07-26T20:23:32", "url": "https://files.pythonhosted.org/packages/f6/84/94e38c4a45945f60c12622362cdc9681fb16896b4c5c1e2dff7f12056d27/Joule-0.9.2.tar.gz" } ], "0.9.3": [ { "comment_text": "", "digests": { "md5": "60f07cb93036d805201426a01f2541a9", "sha256": "161db0b8627198719f8b8b0fccde7d1ee25f714b5d061ce50c38f565157edef8" }, "downloads": -1, "filename": "Joule-0.9.3-py3-none-any.whl", "has_sig": false, "md5_digest": "60f07cb93036d805201426a01f2541a9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 506612, "upload_time": "2019-07-30T17:26:14", "url": "https://files.pythonhosted.org/packages/41/3d/fcfe6a51836edb7342d1fdce35f01d8f311831278a64b8f464c11f71cedf/Joule-0.9.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4604cd8b031ef9ac800b93040130a78d", "sha256": "9dd11095c6e52be5fcafed0205b7a666f5c06956316ed6402eaaafc81b08cbb2" }, "downloads": -1, "filename": "Joule-0.9.3.tar.gz", "has_sig": false, "md5_digest": "4604cd8b031ef9ac800b93040130a78d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 453684, "upload_time": "2019-07-30T17:26:17", "url": "https://files.pythonhosted.org/packages/37/3b/e089123946decff9024c5ab81955a0c80769e9671e05b791cb67e064e9f7/Joule-0.9.3.tar.gz" } ], "0.9.4": [ { "comment_text": "", "digests": { "md5": "f3948cd987c337fb1e174ab083787c73", "sha256": "cbcd2eb908bbe65e1a77532519688e56aaf9bfab0492b60463388179918ca917" }, "downloads": -1, "filename": "Joule-0.9.4-py3-none-any.whl", "has_sig": false, "md5_digest": "f3948cd987c337fb1e174ab083787c73", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 508817, "upload_time": "2019-09-25T15:59:04", "url": "https://files.pythonhosted.org/packages/1a/ae/ff79765e1cf72d4e5ac75f4a85e27b5c454ef6af8eb75a3bdc05158d3b8f/Joule-0.9.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6000bb90fcc78afd025cbdee05e8ada8", "sha256": "c8c5bddd424eb01c2a31ba85e2620ce04438d17539ba4cc0b7b60420a5b7be92" }, "downloads": -1, "filename": "Joule-0.9.4.tar.gz", "has_sig": false, "md5_digest": "6000bb90fcc78afd025cbdee05e8ada8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 458547, "upload_time": "2019-09-25T15:59:07", "url": "https://files.pythonhosted.org/packages/1c/b7/77f3d2a4755d9e518ae2b9a90b8ae1777523d13a703fca6d592ec8729fda/Joule-0.9.4.tar.gz" } ], "0.9.5": [ { "comment_text": "", "digests": { "md5": "c3807a45aa980f7db89340b5f23cebdd", "sha256": "2f7bb018ce23d5e8eaa1ad9cdf33f80c8d6d1297c676724b400442d0c085579a" }, "downloads": -1, "filename": "Joule-0.9.5-py3-none-any.whl", "has_sig": false, "md5_digest": "c3807a45aa980f7db89340b5f23cebdd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 509558, "upload_time": "2019-10-17T14:04:03", "url": "https://files.pythonhosted.org/packages/bd/1a/31e1622f5fa84491d8df17496fb0aa05c1418cc65ad634ff67fada650032/Joule-0.9.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d23940bd2b39b8881435e5570c6efdf", "sha256": "5abc676a6388bfb93f88f6fa08b77f7c18ff842e57e1b8b2a34ce379e1f8507d" }, "downloads": -1, "filename": "Joule-0.9.5.tar.gz", "has_sig": false, "md5_digest": "3d23940bd2b39b8881435e5570c6efdf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 459210, "upload_time": "2019-10-17T14:04:06", "url": "https://files.pythonhosted.org/packages/be/c2/a293f849e345d9777ecfa82f3783f87e550cb9a47edf785a7654876d9db1/Joule-0.9.5.tar.gz" } ], "0.9.6": [ { "comment_text": "", "digests": { "md5": "96d879ed3c85ca5b15cc70a709b27b30", "sha256": "fd2021d2baaa73bf57b5bb1a8c17b5ca1c4f52da7d086fa7021e4acdfa0fb58f" }, "downloads": -1, "filename": "Joule-0.9.6-py3-none-any.whl", "has_sig": false, "md5_digest": "96d879ed3c85ca5b15cc70a709b27b30", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 509566, "upload_time": "2019-10-17T17:02:42", "url": "https://files.pythonhosted.org/packages/32/25/cc67a59ff0328ab6ba88911eeaba399d2d1d1f3056e46ce14a02a6ef2969/Joule-0.9.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2ecff261c00ec7fef77867ea24628fbf", "sha256": "90b279dccb0f6253ad179bdd5bce8157e5d41fec9173bb610f6a8a6392b85646" }, "downloads": -1, "filename": "Joule-0.9.6.tar.gz", "has_sig": false, "md5_digest": "2ecff261c00ec7fef77867ea24628fbf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 459200, "upload_time": "2019-10-17T17:02:46", "url": "https://files.pythonhosted.org/packages/95/7f/dc904d3b953cb51fc9933bdff061bf6bc781219f76fafeaaa806d0d945be/Joule-0.9.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "96d879ed3c85ca5b15cc70a709b27b30", "sha256": "fd2021d2baaa73bf57b5bb1a8c17b5ca1c4f52da7d086fa7021e4acdfa0fb58f" }, "downloads": -1, "filename": "Joule-0.9.6-py3-none-any.whl", "has_sig": false, "md5_digest": "96d879ed3c85ca5b15cc70a709b27b30", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 509566, "upload_time": "2019-10-17T17:02:42", "url": "https://files.pythonhosted.org/packages/32/25/cc67a59ff0328ab6ba88911eeaba399d2d1d1f3056e46ce14a02a6ef2969/Joule-0.9.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2ecff261c00ec7fef77867ea24628fbf", "sha256": "90b279dccb0f6253ad179bdd5bce8157e5d41fec9173bb610f6a8a6392b85646" }, "downloads": -1, "filename": "Joule-0.9.6.tar.gz", "has_sig": false, "md5_digest": "2ecff261c00ec7fef77867ea24628fbf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 459200, "upload_time": "2019-10-17T17:02:46", "url": "https://files.pythonhosted.org/packages/95/7f/dc904d3b953cb51fc9933bdff061bf6bc781219f76fafeaaa806d0d945be/Joule-0.9.6.tar.gz" } ] }