core/homeassistant/components/streamlabswater/__init__.py

85 lines
2.3 KiB
Python

"""Support for Streamlabs Water Monitor devices."""
import logging
import voluptuous as vol
from homeassistant.const import CONF_API_KEY
from homeassistant.helpers import discovery
import homeassistant.helpers.config_validation as cv
DOMAIN = 'streamlabswater'
_LOGGER = logging.getLogger(__name__)
ATTR_AWAY_MODE = 'away_mode'
SERVICE_SET_AWAY_MODE = 'set_away_mode'
AWAY_MODE_AWAY = 'away'
AWAY_MODE_HOME = 'home'
STREAMLABSWATER_COMPONENTS = [
'sensor', 'binary_sensor'
]
CONF_LOCATION_ID = "location_id"
CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema({
vol.Required(CONF_API_KEY): cv.string,
vol.Optional(CONF_LOCATION_ID): cv.string
})
}, extra=vol.ALLOW_EXTRA)
SET_AWAY_MODE_SCHEMA = vol.Schema({
vol.Required(ATTR_AWAY_MODE): vol.In([AWAY_MODE_AWAY, AWAY_MODE_HOME])
})
def setup(hass, config):
"""Set up the streamlabs water component."""
from streamlabswater import streamlabswater
conf = config[DOMAIN]
api_key = conf.get(CONF_API_KEY)
location_id = conf.get(CONF_LOCATION_ID)
client = streamlabswater.StreamlabsClient(api_key)
locations = client.get_locations().get('locations')
if locations is None:
_LOGGER.error("Unable to retrieve locations. Verify API key")
return False
if location_id is None:
location = locations[0]
location_id = location['locationId']
_LOGGER.info("Streamlabs Water Monitor auto-detected location_id=%s",
location_id)
else:
location = next((
l for l in locations if location_id == l['locationId']), None)
if location is None:
_LOGGER.error("Supplied location_id is invalid")
return False
location_name = location['name']
hass.data[DOMAIN] = {
'client': client,
'location_id': location_id,
'location_name': location_name
}
for component in STREAMLABSWATER_COMPONENTS:
discovery.load_platform(hass, component, DOMAIN, {}, config)
def set_away_mode(service):
"""Set the StreamLabsWater Away Mode."""
away_mode = service.data.get(ATTR_AWAY_MODE)
client.update_location(location_id, away_mode)
hass.services.register(
DOMAIN, SERVICE_SET_AWAY_MODE, set_away_mode,
schema=SET_AWAY_MODE_SCHEMA)
return True