{ "info": { "author": "Alexander Sch\u00f6berl", "author_email": "alexander.schoeberl@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "[![Build Status](https://travis-ci.org/kankiri/pabiana.svg?branch=master)](https://travis-ci.org/kankiri/pabiana)\n\n# Pabiana\n\nA smart home consists of various remotely controllable devices and sensors, all of which posses a distinct interface.\nThese devices are controlled either manually with an app or by an adaptive algorithm based on sensor input.\nTo be controllable from software each of these interfaces has to be represented in code.\nThis demands for a particularly *modular software design* to be maintainable.\nAlso, physical distances in larger smart homes call for a *distributed control system*.\n\nProcessing and integrating sensor input from various sources and of various types and controlling multiple devices based on the results, including feedback loops, can quickly get very complicated.\nA *hierarchical data processing model* can limit the complexity to a manageable degree.\nA hierarchical system control model on the other hand can enable steady monitoring and supervision of multiple semi-autonomous systems.\n\n**Pabiana** is a minimalistic Python framework that lets you build software complying with these principles.\nApplications consist of a number of submodules running in parallel, distributed over several nodes.\nThese modules are, however, closely interconnected.\nConstant streams of messages are passed between them as a means of communication.\nMessaging over the network is handled by the *\u00d8MQ* library.\n\nBesides home automation systems, Pabiana can be used to develop intelligent assistants, robot control systems or any other software that controls actuators based on sensory input.\n\n## Installation\n\nPabiana is currently tested with Python \u2265 3.5.\nIt is hosted on PyPI.\nTo integrate Pabiana into your projects, you can install it with:\n\n pip install --upgrade pabiana\n\nIt is recommended to use a virtual environment for your project.\n\n## Application Design\n\nThe first step in the development of a Pabiana application is to think about the different submodules your application will be split in.\nAt the bottom of the hierarchical structure you will usually find I/O modules for different media of communication.\nOne module might be responsible for http, another one for UHF radio signals and a third one for audio signals.\nThese modules rely strongly on resources like drivers provided by the operating system.\nHowever, they are rather generic and can be shared between applications.\nIt might make sense to split input and output between two modules running in parallel if significant feedback loops occur within a medium of communication.\n\nUpper modules receive input from lower ones.\nThey integrate information from different communication media, as well as over time.\nThese modules are responsible for representing reality and keeping track of it's state.\nFor a home automation system, in this layer you might create a separate module for every important real-world device.\n\nTop layer modules monitor actions and states of lower ones and intervene where necessary.\nThey implement complex logic to orchestrate the interaction between devices.\n\n## Usage\n\nProcesses that run Pabiana modules are called *areas*. Each area can publish messages, subscribe to messages, trigger procedures of other areas and receive trigger calls. To start an area you have to use the following command:\n\n python -m pabiana module_name:area_name\n\nFor this command to work, you have to provide a JSON file called `interfaces.json` in the working directory specifying the addresses for both networking interfaces of all the areas of your application.\nThe structure of this file is as follows:\n\n {\n \"area1-pub\": {\"ip\": \"127.0.0.1\", \"port\": 10001},\n \"area1-rcv\": {\"ip\": \"127.0.0.1\", \"port\": 10002},\n \"area2-pub\": {\"ip\": \"127.0.0.1\", \"port\": 10003},\n \"area2-rcv\": {\"ip\": \"127.0.0.1\", \"port\": 10004, \"host\": \"0.0.0.0\"}\n }\n\nIn the current working directory there also has to be a folder called like the module and containing a Python file called `__init__.py` (a Python module).\nIn this file you will define the functionality of the area.\n\n from pabiana import Area, repo\n\n area = Area(repo['area-name'], repo['interfaces'])\n config = {\n 'subscriptions': {'area2': ['ran', 'dom']}\n }\n\n @area.alteration(source='area2', slot='ran')\n def input(recent, complete):\n print(recent)\n\n @area.register\n def procedure(parameter):\n area.publish({'foo': 'bar'}, slot='important')\n\nThis code creates an area that will listen to messages from `area2` on two slots.\nIf it receives messages from `area2` it will print them.\nIt's important to note that messages are queued for some time before they are processed together.\nA procedure is defined to be called from other areas.\nReturn values for procedures are ignored.\nIt is recommended to create a separate file for message handlers and procedures.\n\nIf a module requires a third-party library, it is possible to specify it in a `requirements.txt` file within the module directory.\nThe specified libraries will be installed through Pip at start time.\nThis feature was included to support automatic deployment of applications on different platforms.", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kankiri/pabiana", "keywords": "framework,cognitive,distributed,\u00d8MQ", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "Pabiana", "package_url": "https://pypi.org/project/Pabiana/", "platform": "", "project_url": "https://pypi.org/project/Pabiana/", "project_urls": { "Homepage": "https://github.com/kankiri/pabiana" }, "release_url": "https://pypi.org/project/Pabiana/0.2.4/", "requires_dist": null, "requires_python": "", "summary": "A minimalistic framework to build distributed cognitive applications based on \u00d8MQ", "version": "0.2.4", "yanked": false, "yanked_reason": null }, "last_serial": 6048357, "releases": { "0.0.7": [ { "comment_text": "", "digests": { "md5": "b9122979be27e62d93ecc24bbbfc9b6a", "sha256": "2d02795d5e69a3acd65f540a9ef90f9ccf2e122ce4d53ecd96e896e3f9dc5fd6" }, "downloads": -1, "filename": "Pabiana-0.0.7.tar.gz", "has_sig": false, "md5_digest": "b9122979be27e62d93ecc24bbbfc9b6a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5456, "upload_time": "2017-09-19T13:21:20", "upload_time_iso_8601": "2017-09-19T13:21:20.611642Z", "url": "https://files.pythonhosted.org/packages/49/42/28efdad186669d27974d97f193048a652c1599f6c723a3129c6d54d1f849/Pabiana-0.0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "32098474986402f148718e86cdee4834", "sha256": "75cf80d058fd05cd9d921ccecfd6bcc21c5bbae0754dd216b8fa33bd99d86fc4" }, "downloads": -1, "filename": "Pabiana-0.1.0.tar.gz", "has_sig": false, "md5_digest": "32098474986402f148718e86cdee4834", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5507, "upload_time": "2017-09-20T14:21:29", "upload_time_iso_8601": "2017-09-20T14:21:29.718198Z", "url": "https://files.pythonhosted.org/packages/0e/0f/9a2eec28b2b6b9d21d44ddab3440be3463407e6e1def7825f02f52a5124e/Pabiana-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "89dfb07f3ad18473dea84f3d9c950ba7", "sha256": "51c9fee4292f2e558efa8a26c6a52cfd1305e2dc88b3e6bf6c51c3e8f1f0efac" }, "downloads": -1, "filename": "Pabiana-0.1.2.tar.gz", "has_sig": false, "md5_digest": "89dfb07f3ad18473dea84f3d9c950ba7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9132, "upload_time": "2017-11-04T15:19:58", "upload_time_iso_8601": "2017-11-04T15:19:58.787218Z", "url": "https://files.pythonhosted.org/packages/de/15/719d6708109f3a55b2fb5f2b73fe7e8d6bb044703fe7bf49570f70ffecfc/Pabiana-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.20": [ { "comment_text": "", "digests": { "md5": "fa5a3f686db93924e344ff7ae7dd2c2f", "sha256": "687304fa4971e282f2454f4eae843cb18c4a8a64fe683a54392a86bf200c6f11" }, "downloads": -1, "filename": "Pabiana-0.1.20.tar.gz", "has_sig": false, "md5_digest": "fa5a3f686db93924e344ff7ae7dd2c2f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11082, "upload_time": "2019-07-21T20:36:17", "upload_time_iso_8601": "2019-07-21T20:36:17.469731Z", "url": "https://files.pythonhosted.org/packages/55/9e/0386ebdc24758d27b981ccc7b1979b66bafd612b00a3c9fd94ceb44e9372/Pabiana-0.1.20.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "7d8a728ecb51fec140daeac8f97d4f16", "sha256": "666f2f6209aafa926b15745d19d83d20bd30da987bc639e5daab1153aaee3498" }, "downloads": -1, "filename": "Pabiana-0.1.3.tar.gz", "has_sig": false, "md5_digest": "7d8a728ecb51fec140daeac8f97d4f16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9292, "upload_time": "2018-01-18T11:42:54", "upload_time_iso_8601": "2018-01-18T11:42:54.502960Z", "url": "https://files.pythonhosted.org/packages/59/9f/09b416ba4d9dd9888255085a8b5542051d387cca3ffc23efb45f1517f79b/Pabiana-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "88226b38d6a344aa0d79960ca37dba57", "sha256": "679e3b6e6553dce1831a7a75dbae28831ff664944568095e4a87d884bc76553c" }, "downloads": -1, "filename": "Pabiana-0.1.5.tar.gz", "has_sig": false, "md5_digest": "88226b38d6a344aa0d79960ca37dba57", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8286, "upload_time": "2019-05-02T14:20:36", "upload_time_iso_8601": "2019-05-02T14:20:36.921120Z", "url": "https://files.pythonhosted.org/packages/e3/84/d7eb7f62eff26146788c08531df0543cd75904e3107c7b9de54c6c952cb8/Pabiana-0.1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "758ba6e95f3a4fdfa68d118336a96d5d", "sha256": "0e2bb59be24a4cecbafaee6cea39c11abcd9337d2ed4a14dbe69ef277bd2bf66" }, "downloads": -1, "filename": "Pabiana-0.1.6.tar.gz", "has_sig": false, "md5_digest": "758ba6e95f3a4fdfa68d118336a96d5d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11015, "upload_time": "2019-06-28T01:43:27", "upload_time_iso_8601": "2019-06-28T01:43:27.148327Z", "url": "https://files.pythonhosted.org/packages/4f/6e/a8d9e5aa8a8afa1962860ac1cbd47d7480bd1c96b6986b12359d28bff56a/Pabiana-0.1.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "e860bc515b46aad3fa2ab7360872eca9", "sha256": "a84669839cfad908b217b1e2fce1659a3c073ee2f7f73715912dc13dee0fe1ba" }, "downloads": -1, "filename": "Pabiana-0.1.7.tar.gz", "has_sig": false, "md5_digest": "e860bc515b46aad3fa2ab7360872eca9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11021, "upload_time": "2019-07-21T16:16:44", "upload_time_iso_8601": "2019-07-21T16:16:44.178036Z", "url": "https://files.pythonhosted.org/packages/60/4f/662402aa655358b7ba6d56c48e3863ee41165d9f7627a778573a64d88c85/Pabiana-0.1.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "7e35f64fa4580577161119168a5c7dc9", "sha256": "956b61eea8b1082ac096707302999d36e9231a83b9df8dd191829a1f833c23e6" }, "downloads": -1, "filename": "Pabiana-0.1.8.tar.gz", "has_sig": false, "md5_digest": "7e35f64fa4580577161119168a5c7dc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12995, "upload_time": "2019-07-21T16:48:33", "upload_time_iso_8601": "2019-07-21T16:48:33.850582Z", "url": "https://files.pythonhosted.org/packages/8f/b5/5e8d93a0ddb069724b8f771445db61e318b5631786a5a88194be36098336/Pabiana-0.1.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "dc6aec5609ba72b6de18ef9272597e5d", "sha256": "0726cd0924657b40661ccd450b4e494582aae224362d6e6b742f53a394064b23" }, "downloads": -1, "filename": "Pabiana-0.1.9.tar.gz", "has_sig": false, "md5_digest": "dc6aec5609ba72b6de18ef9272597e5d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11080, "upload_time": "2019-07-21T17:20:46", "upload_time_iso_8601": "2019-07-21T17:20:46.603532Z", "url": "https://files.pythonhosted.org/packages/35/25/2570240dae3651e049d14d61c764ded35ddd065418daa462e5cf32726726/Pabiana-0.1.9.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "4ae53bd162e86aa80b29dccf88f7f49c", "sha256": "0154eb853d42083c3be682d4cc2d93b2ed78a98d1e04dc35fa149fe197d2a4d7" }, "downloads": -1, "filename": "Pabiana-0.2.0.tar.gz", "has_sig": false, "md5_digest": "4ae53bd162e86aa80b29dccf88f7f49c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10730, "upload_time": "2019-07-29T12:27:08", "upload_time_iso_8601": "2019-07-29T12:27:08.710357Z", "url": "https://files.pythonhosted.org/packages/37/4a/49f4a941e7d12363f8ec7b7e310a82e548d3e794f0b4c3bb0ae8b772b9f6/Pabiana-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "acb4b9a9dcbdbee518aef2ad18628efa", "sha256": "6d4e8ec61a24177e56bfc97fee478303f3589a66a2ffbebd330cea730d080672" }, "downloads": -1, "filename": "Pabiana-0.2.1.tar.gz", "has_sig": false, "md5_digest": "acb4b9a9dcbdbee518aef2ad18628efa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10759, "upload_time": "2019-07-30T13:18:23", "upload_time_iso_8601": "2019-07-30T13:18:23.031910Z", "url": "https://files.pythonhosted.org/packages/8f/6a/879b9ebca22f3349b402f4694321bbe32cb3a2964786c0133cefd8a92df1/Pabiana-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "cf5c8a6ad6fe8c59407d1d24330ca5f5", "sha256": "b5c318e0217b735bf9bf217da2fde9be772c6801fc4e39b21c9721d47b85acb4" }, "downloads": -1, "filename": "Pabiana-0.2.2.tar.gz", "has_sig": false, "md5_digest": "cf5c8a6ad6fe8c59407d1d24330ca5f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10772, "upload_time": "2019-08-03T20:06:46", "upload_time_iso_8601": "2019-08-03T20:06:46.408998Z", "url": "https://files.pythonhosted.org/packages/c4/8a/ecb66d9c4176410dccdcb658eb772454b9e25fd57561798c5219ad388afc/Pabiana-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "c0eb96abbb3eecd4a72ba7800d53789c", "sha256": "92618d3d1423a765d5edc14c1f2c5b32b07057cb9a3777b8ec430fd968e945cd" }, "downloads": -1, "filename": "Pabiana-0.2.3.tar.gz", "has_sig": false, "md5_digest": "c0eb96abbb3eecd4a72ba7800d53789c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10852, "upload_time": "2019-09-27T17:13:29", "upload_time_iso_8601": "2019-09-27T17:13:29.193653Z", "url": "https://files.pythonhosted.org/packages/68/85/4dc81d82920b69a8f7f1c6b7f244310dfc9bd3e3679378b7c213783641e9/Pabiana-0.2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "46b56b94985e408936c4f665661da1bf", "sha256": "a8de9d8c9a9e578cfd20137317c4c235bb190bff4891fabcac3d30febf900f51" }, "downloads": -1, "filename": "Pabiana-0.2.4.tar.gz", "has_sig": false, "md5_digest": "46b56b94985e408936c4f665661da1bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10809, "upload_time": "2019-10-29T17:19:53", "upload_time_iso_8601": "2019-10-29T17:19:53.381804Z", "url": "https://files.pythonhosted.org/packages/72/30/3188b346a5be81c8469fe17f9f2cb2037397f91022c92cb689fb15cbb688/Pabiana-0.2.4.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "46b56b94985e408936c4f665661da1bf", "sha256": "a8de9d8c9a9e578cfd20137317c4c235bb190bff4891fabcac3d30febf900f51" }, "downloads": -1, "filename": "Pabiana-0.2.4.tar.gz", "has_sig": false, "md5_digest": "46b56b94985e408936c4f665661da1bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10809, "upload_time": "2019-10-29T17:19:53", "upload_time_iso_8601": "2019-10-29T17:19:53.381804Z", "url": "https://files.pythonhosted.org/packages/72/30/3188b346a5be81c8469fe17f9f2cb2037397f91022c92cb689fb15cbb688/Pabiana-0.2.4.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }