diff --git a/platypush/plugins/autoremote.py b/platypush/plugins/autoremote.py index 0d8742d1..ef9f219f 100644 --- a/platypush/plugins/autoremote.py +++ b/platypush/plugins/autoremote.py @@ -12,6 +12,10 @@ class AutoremotePlugin(Plugin): Android device that runs AutoRemote (https://joaoapps.com/autoremote/). You can also build custom actions to run on your Android device upon AutoRemote events using Tasker (https://tasker.joaoapps.com/). + + Requires: + + * **requests** (``pip install requests``) """ _AUTOREMOTE_BASE_URL = 'https://autoremotejoaomgcd.appspot.com' diff --git a/platypush/plugins/homeseer.py b/platypush/plugins/homeseer.py new file mode 100644 index 00000000..8d6e3d7d --- /dev/null +++ b/platypush/plugins/homeseer.py @@ -0,0 +1,101 @@ + +from platypush.plugins import Plugin, action + + +class HomeseerPlugin(Plugin): + """ + This plugin allows you interact with an existing HomeSeer setup, + query and control connected devices. + + Requires: + + * **pyhomeseer** (``pip install git+https://github.com/legrego/PyHomeSeer``) + """ + + def __init__(self, host, username=None, password=None, *args, **kwargs): + """ + :param host: IP or hostname of your HomeSeer hub + :type host: str + + :param username: HomeSeer username + :type username: str + + :param password: HomeSeer password + :type password: str + """ + + super().__init__(*args, **kwargs) + + self.host = host + self.username = username + self.password = password + self._client = None + + def _get_client(self): + from pyhomeseer.homeseer_client import HomeSeerClient + + if not self._client: + self._client = HomeSeerClient(host=self.host, + username=self.username, + password=self.password) + + return self._client + + + @action + def query_devices(self, ref=None, location=None): + """ + Get a list of devices connected to HomeSeer with their status + + :param ref: Device reference. If not set, all the devices will be queried + :type ref: int + + :param location: Device location. If not set, all the devices will be queried + :type location: str + """ + + client = self._get_client() + + if ref is not None: + devices = client.get_devices(ref=ref) + elif location is not None: + devices = client.get_devices(location=location) + else: + devices = client.get_devices() + + return [ + { + attr: getattr(dev, attr) + for attr in ['ref','name','location','value','status'] + } + for dev in devices + ] + + + @action + def control(self, ref, value=None, label=None): + """ + Control a HomeSeer connected device. + + :param ref: Device reference + :type ref: int + + :param value: If set, then control the device with this specific int value + :type value: int + + :param label: If set, then control the device with this specific label + (e.g. 'On' or 'Off') + :type label: str + """ + + if value is None and label is None: + raise RuntimeError('Please specify either value or label') + + client = self._get_client() + + if value is not None: + return client.control(ref=ref, value=value) + return client.control(ref=ref, label=label) + + +# vim:sw=4:ts=4:et: