77 lines
2.2 KiB
Python
77 lines
2.2 KiB
Python
"""
|
|
Support for Plum Lightpad switches.
|
|
|
|
For more details about this component, please refer to the documentation at
|
|
https://home-assistant.io/components/plum_lightpad
|
|
"""
|
|
import asyncio
|
|
import logging
|
|
|
|
import voluptuous as vol
|
|
|
|
from homeassistant.const import (
|
|
CONF_PASSWORD, CONF_USERNAME, EVENT_HOMEASSISTANT_STOP)
|
|
from homeassistant.helpers import discovery
|
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
|
import homeassistant.helpers.config_validation as cv
|
|
|
|
REQUIREMENTS = ['plumlightpad==0.0.11']
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
DOMAIN = 'plum_lightpad'
|
|
|
|
CONFIG_SCHEMA = vol.Schema({
|
|
DOMAIN: vol.Schema({
|
|
vol.Required(CONF_USERNAME): cv.string,
|
|
vol.Required(CONF_PASSWORD): cv.string,
|
|
}),
|
|
}, extra=vol.ALLOW_EXTRA)
|
|
|
|
PLUM_DATA = 'plum'
|
|
|
|
|
|
async def async_setup(hass, config):
|
|
"""Plum Lightpad Platform initialization."""
|
|
from plumlightpad import Plum
|
|
|
|
conf = config[DOMAIN]
|
|
plum = Plum(conf[CONF_USERNAME], conf[CONF_PASSWORD])
|
|
|
|
hass.data[PLUM_DATA] = plum
|
|
|
|
def cleanup(event):
|
|
"""Clean up resources."""
|
|
plum.cleanup()
|
|
|
|
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, cleanup)
|
|
|
|
cloud_web_sesison = async_get_clientsession(hass, verify_ssl=True)
|
|
await plum.loadCloudData(cloud_web_sesison)
|
|
|
|
async def new_load(device):
|
|
"""Load light and sensor platforms when LogicalLoad is detected."""
|
|
await asyncio.wait([
|
|
hass.async_create_task(
|
|
discovery.async_load_platform(
|
|
hass, 'light', DOMAIN,
|
|
discovered=device, hass_config=conf))
|
|
])
|
|
|
|
async def new_lightpad(device):
|
|
"""Load light and binary sensor platforms when Lightpad detected."""
|
|
await asyncio.wait([
|
|
hass.async_create_task(
|
|
discovery.async_load_platform(
|
|
hass, 'light', DOMAIN,
|
|
discovered=device, hass_config=conf))
|
|
])
|
|
|
|
device_web_session = async_get_clientsession(hass, verify_ssl=False)
|
|
hass.async_create_task(
|
|
plum.discover(hass.loop,
|
|
loadListener=new_load, lightpadListener=new_lightpad,
|
|
websession=device_web_session))
|
|
|
|
return True
|