Added HomeSeer plugin

This commit is contained in:
Fabio Manganiello 2018-12-28 09:55:09 +01:00
parent f9f43964a2
commit 699fa92c5e
2 changed files with 105 additions and 0 deletions

View file

@ -12,6 +12,10 @@ class AutoremotePlugin(Plugin):
Android device that runs AutoRemote (https://joaoapps.com/autoremote/). Android device that runs AutoRemote (https://joaoapps.com/autoremote/).
You can also build custom actions to run on your Android device upon You can also build custom actions to run on your Android device upon
AutoRemote events using Tasker (https://tasker.joaoapps.com/). AutoRemote events using Tasker (https://tasker.joaoapps.com/).
Requires:
* **requests** (``pip install requests``)
""" """
_AUTOREMOTE_BASE_URL = 'https://autoremotejoaomgcd.appspot.com' _AUTOREMOTE_BASE_URL = 'https://autoremotejoaomgcd.appspot.com'

View file

@ -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: