"""Support for ASUSWRT devices.""" import logging import voluptuous as vol from homeassistant.const import ( CONF_HOST, CONF_PASSWORD, CONF_USERNAME, CONF_PORT, CONF_MODE, CONF_PROTOCOL, ) from homeassistant.helpers import config_validation as cv from homeassistant.helpers.discovery import async_load_platform _LOGGER = logging.getLogger(__name__) CONF_PUB_KEY = "pub_key" CONF_REQUIRE_IP = "require_ip" CONF_SENSORS = "sensors" CONF_SSH_KEY = "ssh_key" DOMAIN = "asuswrt" DATA_ASUSWRT = DOMAIN DEFAULT_SSH_PORT = 22 SECRET_GROUP = "Password or SSH Key" SENSOR_TYPES = ["upload_speed", "download_speed", "download", "upload"] CONFIG_SCHEMA = vol.Schema( { DOMAIN: vol.Schema( { vol.Required(CONF_HOST): cv.string, vol.Required(CONF_USERNAME): cv.string, vol.Optional(CONF_PROTOCOL, default="ssh"): vol.In(["ssh", "telnet"]), vol.Optional(CONF_MODE, default="router"): vol.In(["router", "ap"]), vol.Optional(CONF_PORT, default=DEFAULT_SSH_PORT): cv.port, vol.Optional(CONF_REQUIRE_IP, default=True): cv.boolean, vol.Exclusive(CONF_PASSWORD, SECRET_GROUP): cv.string, vol.Exclusive(CONF_SSH_KEY, SECRET_GROUP): cv.isfile, vol.Exclusive(CONF_PUB_KEY, SECRET_GROUP): cv.isfile, vol.Optional(CONF_SENSORS): vol.All( cv.ensure_list, [vol.In(SENSOR_TYPES)] ), } ) }, extra=vol.ALLOW_EXTRA, ) async def async_setup(hass, config): """Set up the asuswrt component.""" from aioasuswrt.asuswrt import AsusWrt conf = config[DOMAIN] api = AsusWrt( conf[CONF_HOST], conf.get(CONF_PORT), conf.get(CONF_PROTOCOL) == "telnet", conf[CONF_USERNAME], conf.get(CONF_PASSWORD, ""), conf.get("ssh_key", conf.get("pub_key", "")), conf.get(CONF_MODE), conf.get(CONF_REQUIRE_IP), ) await api.connection.async_connect() if not api.is_connected: _LOGGER.error("Unable to setup asuswrt component") return False hass.data[DATA_ASUSWRT] = api hass.async_create_task( async_load_platform( hass, "sensor", DOMAIN, config[DOMAIN].get(CONF_SENSORS), config ) ) hass.async_create_task( async_load_platform(hass, "device_tracker", DOMAIN, {}, config) ) return True