A versatile and extensible platform for home and life automation with hundreds of supported integrations
Go to file
Fabio Manganiello 9e23d0a407 The action should be placed in the body again before retrying 2017-11-05 15:16:54 +01:00
runbullet The action should be placed in the body again before retrying 2017-11-05 15:16:54 +01:00
.gitignore gitignore 2017-11-03 23:07:15 +01:00
LICENSE.txt MIT License 2017-11-03 18:06:58 +01:00
README.md README 2017-11-05 01:11:13 +01:00
setup.py Version bump 2017-11-04 12:50:43 +01:00

README.md

Runbullet

Execute any command or custom complex logic on your devices, wherever they are, using your PushBullet account.

Installation

pip install runbullet

Configuration

Copy /etc/runbullet/config.example.yaml to /etc/runbullet/config.yaml (system-wise settings) or ~/.config/runbullet/config.yaml (user-wise settings).

Edit the file to include:

  • Your PushBullet access token (create one here);
  • The name of the (virtual) PushBullet device used to listen for events (create one here).

Each 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.

Shell interface

runbullet installs pusher, a command-line tool to send PushBullet messages to the connected devices in the format used by runbullet.

Some examples:

pusher --target laptop --action shell.exec --cmd "scp /home/user/photos/*.jpg backup_host:/mnt/hd/photos"
pusher --target raspberrypi --action music.mpd.play

The logic to execute is specified by the --action option, whose format is package_name.method_name (with method_name part of the package main class).

Available plugins

  • runbullet.plugins.shell: The simplest and yet most versatile plugin. Executes a remote command on the host identified by the --target device_id. Example:
pusher --target laptop --action shell.exec --cmd "scp /home/user/photos/*.jpg backup_host:/mnt/hd/photos"
  • runbullet.plugins.music.mpd: Controls the playback on a mpd/mopidy music server. Requires the package mpd2 on the target machine. Example:
pusher --target raspberry --action music.mpd.play

Configure the plugin through an entry like this in your config.yaml:

music.mpd:
    host: your_mpd_host
    port: 6600
  • runbullet.plugins.switch.wemo: Controls a WeMo Switch smart switch device. Requires the package ouimeaux on the target machine. Example:
pusher --target raspberry --action switch.wemo.on
  • TODO runbullet.plugins.light.hue: Controls a Philips Hue smart lights system. Requires the package phue on the target machine. Example:
pusher --target raspberry --action light.hue.set_scene --scene "Sunset" --group "Living Room"

Writing your plugins

Writing 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.

  1. Create your plugin directory under runbullet/plugins (e.g. light/batsignal).

  2. In the case above, runbullet.plugins.light.batsignal will be your package name.

  3. Create an __init__.py under runbullet/plugins/light/batsignal.

  4. If your module is light/batsignal, then its main class should be named LightBatsignalPlugin.

  5. 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.

The __init__.py will look like this:

import batman

from .. import LightPlugin

class LightBatsignalPlugin(LightPlugin):
    def _init(self):
        self.batsignal = batman.Batsignal(self.config['intensity'])

    def on(self, urgent=False):
        if urgent:
            self.batsignal.notify_robin()

        self.batsignal.on()

    def off(self):
        self.batsignal.off()

    def toggle(self):
        self.batsignal.toggle()

    def status(self):
        return [self.batsignal.status().stdout, self.batsignal.status().stderr]
  1. It's a good practice to define a status method in your plugin, which returns a 2-items list like [output, error].

  2. Rebuild and reinstall runbullet if required and relaunch it.

  3. Test your new plugin by sending some bullets to it:

pusher --target your_pc --action light.batsignal.on --urgent 1