"""Support for Eufy devices.""" import lakeside import voluptuous as vol from homeassistant.const import ( CONF_ACCESS_TOKEN, CONF_ADDRESS, CONF_DEVICES, CONF_NAME, CONF_PASSWORD, CONF_TYPE, CONF_USERNAME, Platform, ) from homeassistant.core import HomeAssistant from homeassistant.helpers import discovery import homeassistant.helpers.config_validation as cv from homeassistant.helpers.typing import ConfigType DOMAIN = "eufy" DEVICE_SCHEMA = vol.Schema( { vol.Required(CONF_ADDRESS): cv.string, vol.Required(CONF_ACCESS_TOKEN): cv.string, vol.Required(CONF_TYPE): cv.string, vol.Optional(CONF_NAME): cv.string, } ) CONFIG_SCHEMA = vol.Schema( { DOMAIN: vol.Schema( { vol.Optional(CONF_DEVICES, default=[]): vol.All( cv.ensure_list, [DEVICE_SCHEMA] ), vol.Inclusive(CONF_USERNAME, "authentication"): cv.string, vol.Inclusive(CONF_PASSWORD, "authentication"): cv.string, } ) }, extra=vol.ALLOW_EXTRA, ) PLATFORMS = { "T1011": Platform.LIGHT, "T1012": Platform.LIGHT, "T1013": Platform.LIGHT, "T1201": Platform.SWITCH, "T1202": Platform.SWITCH, "T1203": Platform.SWITCH, "T1211": Platform.SWITCH, } def setup(hass: HomeAssistant, config: ConfigType) -> bool: """Set up Eufy devices.""" if CONF_USERNAME in config[DOMAIN] and CONF_PASSWORD in config[DOMAIN]: data = lakeside.get_devices( config[DOMAIN][CONF_USERNAME], config[DOMAIN][CONF_PASSWORD] ) for device in data: kind = device["type"] if kind not in PLATFORMS: continue discovery.load_platform(hass, PLATFORMS[kind], DOMAIN, device, config) for device_info in config[DOMAIN][CONF_DEVICES]: kind = device_info["type"] if kind not in PLATFORMS: continue device = {} device["address"] = device_info["address"] device["code"] = device_info["access_token"] device["type"] = device_info["type"] device["name"] = device_info["name"] discovery.load_platform(hass, PLATFORMS[kind], DOMAIN, device, config) return True