{ "info": { "author": "Fabio Manganiello", "author_email": "info@fabiomanganiello.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: MIT License", "Topic :: Utilities" ], "description": "Runbullet\n=========\n\nExecute any command or custom complex logic on your devices, wherever they are, using your PushBullet account.\n\nInstallation\n------------\n\n```shell\npip install runbullet\n```\n\nConfiguration\n-------------\n\nCopy /etc/runbullet/config.example.yaml to /etc/runbullet/config.yaml (system-wise settings) or ~/.config/runbullet/config.yaml (user-wise settings).\n\nEdit the file to include:\n\n* Your PushBullet access token (create one [here](https://www.pushbullet.com/#settings/account));\n* The name of the (virtual) PushBullet device used to listen for events (create one [here](https://www.pushbullet.com/#devices)).\n\nEach target device is identified by a unique device_id in the messages sent over your account. The device_id is the hostname by default, unless changed in config.yaml.\n\nTesting\n-------\n\n`runbullet` installs `pusher`, a command-line tool to send PushBullet messages to the connected devices in the format used by runbullet.\n\nSome examples:\n\n```shell\necho '{\"cmd\":\"scp /home/user/photos/*.jpg backup_host:/mnt/hd/photos\"}' | pusher --target laptop --plugin shell\necho '{\"play\":true}' | pusher --target raspberrypi --plugin music.mpd\n```\n\nWriting your plugins\n--------------------\n\nWriting your own `runbullet` plugin, that would execute your own custom logic whenever a bullet with your plugin name is received, is a very simple task.\n\n1. Create your plugin directory under `runbullet/plugins` (e.g. `light/batsignal`).\n\n2. In the case above, `runbullet.plugins.light.batsignal` will be your package name.\n\n3. Create an `__init__.py` under `runbullet/plugins/light/batsignal`.\n\n4. If your module is `light/batsignal`, then its main class should be named `LightBatsignalPlugin`.\n\n5. The configuration for your module will be read from a section named `light.batsignal` from your `config.yaml`, the attributes are accessible in your class in `self.config`.\n\nThe `__init__.py` will look like this:\n\n```python\nfrom .. import LightPlugin\n\nclass LightBatsignalPlugin(LightPlugin):\n def _init(self):\n self.batsignal = batsignal.Batsignal(self.config['intensity'])\n\n def on(self):\n self.batsignal.on()\n\n def off(self):\n self.batsignal.off()\n\n def toggle(self):\n self.batsignal.toggle()\n\n def status(self):\n return [self.batsignal.status().stdout, self.batsignal.status().stderr]\n```\n\n6. It's a good practice to define a `status` method in your plugin, which returns a 2-items list like `[output, error]`.\n\n7. Rebuild and reinstall `runbullet` if required and relaunch it.\n\n8. Test your new plugin by sending some bullets to it:\n\n```shell\necho '{\"on\":true}' | pusher --target your_pc --plugin light.batsignal\n```\n\n\n\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/BlackLight/runbullet", "keywords": "pushbullet notifications automation", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "runbullet", "package_url": "https://pypi.org/project/runbullet/", "platform": "", "project_url": "https://pypi.org/project/runbullet/", "project_urls": { "Homepage": "https://github.com/BlackLight/runbullet" }, "release_url": "https://pypi.org/project/runbullet/0.2.0.dev1/", "requires_dist": [ "pyyaml" ], "requires_python": ">= 3", "summary": "Runbullet service", "version": "0.2.0.dev1" }, "last_serial": 3304386, "releases": { "0.2.0.dev1": [ { "comment_text": "", "digests": { "md5": "9c892090d8416a3d8f4d494be2ef9c10", "sha256": "c79c44c7fdd1eaca16c2e12f8ddb1887ac8e242f3081aeee73bc3380a1ff4425" }, "downloads": -1, "filename": "runbullet-0.2.0.dev1-py3-none-any.whl", "has_sig": false, "md5_digest": "9c892090d8416a3d8f4d494be2ef9c10", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3", "size": 15855, "upload_time": "2017-11-03T22:09:29", "url": "https://files.pythonhosted.org/packages/0f/37/57b6ea97f6cdf23b537422a152ab55476d2fcb94763334befc683d37cafb/runbullet-0.2.0.dev1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16c21ccda7234b6807f527a136471ac6", "sha256": "d5e70266d9fa7920ec878f19bfc5d6d83bd92b0459d9faa5789c540abef1bd00" }, "downloads": -1, "filename": "runbullet-0.2.0.dev1.tar.gz", "has_sig": false, "md5_digest": "16c21ccda7234b6807f527a136471ac6", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3", "size": 10242, "upload_time": "2017-11-03T22:09:30", "url": "https://files.pythonhosted.org/packages/4e/05/a2c1d1fa815fc1a1d5d6b289494176fb1d4bd73340c95fdddd38625e6181/runbullet-0.2.0.dev1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9c892090d8416a3d8f4d494be2ef9c10", "sha256": "c79c44c7fdd1eaca16c2e12f8ddb1887ac8e242f3081aeee73bc3380a1ff4425" }, "downloads": -1, "filename": "runbullet-0.2.0.dev1-py3-none-any.whl", "has_sig": false, "md5_digest": "9c892090d8416a3d8f4d494be2ef9c10", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3", "size": 15855, "upload_time": "2017-11-03T22:09:29", "url": "https://files.pythonhosted.org/packages/0f/37/57b6ea97f6cdf23b537422a152ab55476d2fcb94763334befc683d37cafb/runbullet-0.2.0.dev1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16c21ccda7234b6807f527a136471ac6", "sha256": "d5e70266d9fa7920ec878f19bfc5d6d83bd92b0459d9faa5789c540abef1bd00" }, "downloads": -1, "filename": "runbullet-0.2.0.dev1.tar.gz", "has_sig": false, "md5_digest": "16c21ccda7234b6807f527a136471ac6", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3", "size": 10242, "upload_time": "2017-11-03T22:09:30", "url": "https://files.pythonhosted.org/packages/4e/05/a2c1d1fa815fc1a1d5d6b289494176fb1d4bd73340c95fdddd38625e6181/runbullet-0.2.0.dev1.tar.gz" } ] }