platypush/platypush/plugins/switch/wemo/__init__.py

63 lines
1.8 KiB
Python
Raw Normal View History

import json
2017-11-04 00:13:22 +01:00
from ouimeaux.environment import Environment, UnknownDevice
from platypush.message.response import Response
2017-11-04 00:13:22 +01:00
from .. import SwitchPlugin
class SwitchWemoPlugin(SwitchPlugin):
2018-05-08 09:59:43 +02:00
def __init__(self, discovery_seconds=3, *args, **kwargs):
super().__init__(*args, **kwargs)
2017-12-18 01:10:51 +01:00
self.discovery_seconds=discovery_seconds
2017-11-04 00:13:22 +01:00
self.env = Environment()
self.env.start()
self.refresh_devices()
def refresh_devices(self):
2018-06-06 20:09:18 +02:00
self.logger.info('Starting WeMo discovery')
self.env.discover(seconds=self.discovery_seconds)
self.devices = self.env.devices
def get_devices(self):
self.refresh_devices()
return Response(
2018-05-08 09:59:43 +02:00
output = { 'devices': [
{
'host': dev.host,
2018-05-08 09:59:43 +02:00
'name': dev.name,
'state': dev.get_state(),
'model': dev.model,
'serialnumber': dev.serialnumber,
}
for (name, dev) in self.devices.items()
2018-05-08 09:59:43 +02:00
] }
)
def _exec(self, method, device, *args, **kwargs):
if device not in self.devices:
self.refresh_devices()
if device not in self.devices:
raise RuntimeError('Device {} not found'.format(device))
2018-06-06 20:09:18 +02:00
self.logger.info('{} -> {}'.format(device, method))
dev = self.devices[device]
getattr(dev, method)(*args, **kwargs)
resp = {'device': device, 'state': dev.get_state()}
return Response(output=json.dumps(resp))
2017-11-04 00:13:22 +01:00
def on(self, device):
return self._exec('on', device)
2017-11-04 00:13:22 +01:00
def off(self, device):
return self._exec('off', device)
2017-11-04 00:13:22 +01:00
def toggle(self, device):
return self._exec('toggle', device)
2017-11-04 00:13:22 +01:00
# vim:sw=4:ts=4:et: