Updated README

This commit is contained in:
Fabio Manganiello 2017-12-18 01:53:29 +01:00
parent 93be9e3912
commit 97b6fab376
2 changed files with 47 additions and 6 deletions

View file

@ -105,7 +105,7 @@ Writing your own `platypush` plugin, that would execute your own custom logic wh
4. If your module is `light/batsignal`, then its main class should be named `LightBatsignalPlugin`. 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`. 5. The configuration for your module will be read from a section named `light.batsignal` from your `config.yaml`. Its values will passed over the plugin constructor arguments.
The `__init__.py` will look like this: The `__init__.py` will look like this:
@ -117,23 +117,24 @@ from platypush.message.response import Response
from .. import LightPlugin from .. import LightPlugin
class LightBatsignalPlugin(LightPlugin): class LightBatsignalPlugin(LightPlugin):
def _init(self): def __init__(self, intensity=100):
self.batsignal = batman.Batsignal(self.config['intensity']) super().__init__()
self.batsignal = batman.Batsignal(intensity)
def on(self, urgent=False): def on(self, urgent=False):
if urgent: if urgent:
self.batsignal.notify_robin() self.batsignal.notify_robin()
self.batsignal.on() self.batsignal.on()
return Response('ok') return Response(output='ok')
def off(self): def off(self):
self.batsignal.off() self.batsignal.off()
return Response('ok') return Response(output='ok')
def toggle(self): def toggle(self):
self.batsignal.toggle() self.batsignal.toggle()
return Response('ok') return Response(output='ok')
``` ```
@ -145,3 +146,42 @@ class LightBatsignalPlugin(LightPlugin):
pusher --target your_pc --action light.batsignal.on --urgent 1 pusher --target your_pc --action light.batsignal.on --urgent 1
``` ```
Writing your backends
---------------------
You can also write your own backends, where a backend is nothing but a thread that listens for messages on a certain channel and pokes the main app whenever it receives one.
1. Create your backend directory under `platypush/backend` (e.g. `voicemail`)
2. In the case above, `platypush.backend.voicemail` will be your package name.
3. Create an `__init__.py` under `platypush/backend/voicemail`.
4. If your module is `voicemail`, then its main class should be named `VoicemailBackend`.
5. The configuration for your module will be read from a section named `backend.voicemail` from your `config.yaml`. Its values will be passed over the backend constructor arguments.
6. Implement the `run` method. Since a backend is a thread that polls for new messages on a channel, this will be the thread main method. `_send_msg` should call `self.on_msg` at the end to post a new message to the application.
7. Implement the `_send_msg` method. This method will be called whenever the application needs to send a new message through `send_request` and `send_response`. You should never call `_send_msg` directly.
The `__init__.py` will look like this:
```python
from .. import Backend
class VoicemailBackend(Backend)
def __init__(self, phone)
super().__init__()
self.phone = phone
self.voicemail = Voicemail(...)
def _send_msg(self, msg):
self.voicemail.save_msg(msg)
def run(self):
while True:
msg = self.voicemail.poll()
self.on_msg(msg)
```

View file

@ -9,6 +9,7 @@ from platypush.message.request import Request
def print_usage(): def print_usage():
print ('''Usage: {} [-h|--help] <-t|--target <target name>> <-a|--action <action name>> payload print ('''Usage: {} [-h|--help] <-t|--target <target name>> <-a|--action <action name>> payload
-h, --help:\t\tShow this help and exit -h, --help:\t\tShow this help and exit
-c, --config:\tPath to the platypush config.yaml (default: ~/.config/platypush/config.yaml or /etc/platypush/config.yaml)
-b, --backend:\tBackend to deliver the message [pushbullet|kafka] (default: whatever specified in your config with pusher=True) -b, --backend:\tBackend to deliver the message [pushbullet|kafka] (default: whatever specified in your config with pusher=True)
-t, --target:\tName of the target device/host -t, --target:\tName of the target device/host
-a, --action\tAction to run, it includes both the package name and the method (e.g. shell.exec or music.mpd.play) -a, --action\tAction to run, it includes both the package name and the method (e.g. shell.exec or music.mpd.play)