Support for multiple devices in AutoRemote plugin

This commit is contained in:
Fabio Manganiello 2018-10-22 09:36:30 +00:00
parent fec684210c
commit 4d592fff17
1 changed files with 121 additions and 71 deletions

View File

@ -18,33 +18,53 @@ class AutoremotePlugin(Plugin):
_AUTOREMOTE_MESSAGE_URL = _AUTOREMOTE_BASE_URL + '/sendmessage'
_AUTOREMOTE_NOTIFICATION_URL = _AUTOREMOTE_BASE_URL + '/sendnotification'
def __init__(self, key, password=None, *args, **kwargs):
def __init__(self, devices=None, key=None, password=None, *args, **kwargs):
"""
:param key: The key associated to your device. Open the link in your AutoRemote app and copy the key in the target URL
:param devices: Set this attribute if you want to control multiple AutoRemote devices. This will be a map in the format:
{
'device_name': {
'key': 'AUTOREMOTE_KEY',
'password': 'DEVICE_PASSWORD'
},
...
}
:type devices: dict
:param key: The key associated to your device. Open the link in your AutoRemote app and copy the key in the target URL. Set this value if you want to communicate with only one AutoRemote device.
:type key: str
:param password: AutoRemote password configured on the device (default: None)
:param password: AutoRemote password configured on the device (default: None). Set this value if you want to communicate with only one AutoRemote device.
:type password: str
"""
super().__init__(*args, **kwargs)
self.key = key
self.password = password
if key:
self.devices = { key: { 'key': key, 'password': password } }
elif devices:
self.devices = devices
else:
raise RuntimeError('Either <key,password> or devices attributes should be set')
@action
def send_message(self, msg, key=None, password=None, target=None,
def send_message(self, msg, key=None, password=None, devices=None, target=None,
sender=None, ttl=None, group=None, *args, **kwargs):
"""
Sends a message to AutoRemote.
:param msg: Message to send
:param key: Set it if you want to override the default key (default: None)
:param key: Set it if you want to override the default devices (default: None, message sent to all the configured devices)
:type key: str
:param password: Set it if you want to override the default password (default: None)
:type password: str
:param devices: Set it if you want to send the message to a specific list of configured devices (default: None, message sent to all the configured devices)
:type devices: list
:param target: Message target (default: None)
:type target: str
@ -58,27 +78,42 @@ class AutoremotePlugin(Plugin):
:type group: str
"""
args = {
'message': msg,
'key': key or self.key,
'sender': sender or Config.get('device_id'),
}
target_devices = []
if password or self.password:
args['password'] = password or self.password
if devices:
target_devices = [self.devices[name] for name in self.devices.keys()
if name in devices]
elif key:
device = { 'key': key }
if password:
device['password'] = password
if target: args['target'] = target
if ttl: args['ttl'] = ttl
if group: args['collapseKey'] = group
target_devices = [device]
else:
target_devices = self.devices.values()
response = requests.post(self._AUTOREMOTE_MESSAGE_URL, data=args)
self.logger.info('Received response from AutoRemote: {}'.format(response.text))
for device in target_devices:
args = {
'message': msg,
'key': device['key'],
'sender': sender or Config.get('device_id'),
}
if device.get('password'):
args['password'] = device['password']
if target: args['target'] = target
if ttl: args['ttl'] = ttl
if group: args['collapseKey'] = group
response = requests.post(self._AUTOREMOTE_MESSAGE_URL, data=args)
self.logger.info('Received response from AutoRemote: {}'.format(response.text))
@action
def send_notification(self, text=None, key=None, password=None, title=None,
target=None, sender=None, ttl=None, group=None,
sound=None, vibration=None, url=None, id=None,
action=None, icon=None, led=None, ledon=None,
def send_notification(self, text=None, key=None, password=None, devices=None,
title=None, target=None, sender=None, ttl=None,
group=None, sound=None, vibration=None, url=None,
id=None, action=None, icon=None, led=None, ledon=None,
ledoff=None, picture=None, share=False, msg=None,
action1=None, action1_name=None, action1_icon=None,
action2=None, action2_name=None, action2_icon=None,
@ -93,57 +128,72 @@ class AutoremotePlugin(Plugin):
Send Notification for a detailed explanation of the attributes.
"""
args = {
'text': text,
'key': key or self.key,
'sender': sender or Config.get('device_id'),
}
target_devices = []
if password or self.password:
args['password'] = password or self.password
if devices:
target_devices = [self.devices[name] for name in self.devices.keys()
if name in devices]
elif key:
device = { 'key': key }
if password:
device['password'] = password
if target: args['target'] = target
if ttl: args['ttl'] = ttl
if group: args['collapseKey'] = group
if title: args['title'] = title
if text: args['text'] = text
if sound: args['sound'] = sound
if vibration: args['vibration'] = vibration
if url: args['url'] = url
if id: args['id'] = id
if action: args['action'] = action
if icon: args['icon'] = icon
if led: args['led'] = led
if ledon: args['ledon'] = ledon
if ledoff: args['ledoff'] = ledoff
if picture: args['picture'] = picture
if msg: args['message'] = msg
if share: args['share'] = share
if action1: args['action1'] = action1
if action1_name: args['action1name'] = action1_name
if action1_icon: args['action1icon'] = action1_icon
if action2: args['action2'] = action2
if action2_name: args['action2name'] = action2_name
if action2_icon: args['action2icon'] = action2_icon
if action3: args['action3'] = action3
if action3_name: args['action3name'] = action3_name
if action3_icon: args['action3icon'] = action3_icon
if persistent: args['persistent'] = persistent
if statusbar_icon: args['statusbaricon'] = statusbar_icon
if ticker: args['ticker'] = ticker
if dismiss_on_touch: args['dismissontouch'] = dismiss_on_touch
if priority: args['priority'] = priority
if number: args['number'] = number
if content_info: args['contentinfo'] = content_info
if subtext: args['subtext'] = subtext
if max_progress: args['maxprogress'] = max_progress
if progress: args['progress'] = progress
if indeterminate_progress: args['indeterminateprogress'] = indeterminate_progress
if action_on_dismiss: args['actionondismiss'] = action_on_dismiss
if cancel: args['cancel'] = cancel
target_devices = [device]
else:
target_devices = self.devices.values()
response = requests.post(self._AUTOREMOTE_NOTIFICATION_URL, data=args)
self.logger.info('Received response from AutoRemote: {}'.format(response.text))
for device in target_devices:
args = {
'text': text,
'key': device.get('key'),
'sender': sender or Config.get('device_id'),
}
if device.get('password'):
args['password'] = device['password']
if target: args['target'] = target
if ttl: args['ttl'] = ttl
if group: args['collapseKey'] = group
if title: args['title'] = title
if text: args['text'] = text
if sound: args['sound'] = sound
if vibration: args['vibration'] = vibration
if url: args['url'] = url
if id: args['id'] = id
if action: args['action'] = action
if icon: args['icon'] = icon
if led: args['led'] = led
if ledon: args['ledon'] = ledon
if ledoff: args['ledoff'] = ledoff
if picture: args['picture'] = picture
if msg: args['message'] = msg
if share: args['share'] = share
if action1: args['action1'] = action1
if action1_name: args['action1name'] = action1_name
if action1_icon: args['action1icon'] = action1_icon
if action2: args['action2'] = action2
if action2_name: args['action2name'] = action2_name
if action2_icon: args['action2icon'] = action2_icon
if action3: args['action3'] = action3
if action3_name: args['action3name'] = action3_name
if action3_icon: args['action3icon'] = action3_icon
if persistent: args['persistent'] = persistent
if statusbar_icon: args['statusbaricon'] = statusbar_icon
if ticker: args['ticker'] = ticker
if dismiss_on_touch: args['dismissontouch'] = dismiss_on_touch
if priority: args['priority'] = priority
if number: args['number'] = number
if content_info: args['contentinfo'] = content_info
if subtext: args['subtext'] = subtext
if max_progress: args['maxprogress'] = max_progress
if progress: args['progress'] = progress
if indeterminate_progress: args['indeterminateprogress'] = indeterminate_progress
if action_on_dismiss: args['actionondismiss'] = action_on_dismiss
if cancel: args['cancel'] = cancel
response = requests.post(self._AUTOREMOTE_NOTIFICATION_URL, data=args)
self.logger.info('Received response from AutoRemote: {}'.format(response.text))
# vim:sw=4:ts=4:et: