"""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