Added HomeSeer plugin
This commit is contained in:
parent
f9f43964a2
commit
699fa92c5e
2 changed files with 105 additions and 0 deletions
|
@ -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'
|
||||
|
|
101
platypush/plugins/homeseer.py
Normal file
101
platypush/plugins/homeseer.py
Normal 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:
|
Loading…
Reference in a new issue