import voluptuous as vol import esphomeyaml.config_validation as cv from esphomeyaml.const import CONF_DNS1, CONF_DNS2, CONF_GATEWAY, CONF_HOSTNAME, CONF_ID, \ CONF_MANUAL_IP, CONF_PASSWORD, CONF_SSID, CONF_STATIC_IP, CONF_SUBNET, CONF_WIFI from esphomeyaml.helpers import App, MockObj, Pvariable, StructInitializer, add CONFIG_SCHEMA = cv.ID_SCHEMA.extend({ cv.GenerateID(CONF_WIFI): cv.register_variable_id, vol.Required(CONF_SSID): cv.ssid, vol.Optional(CONF_PASSWORD): cv.string, vol.Optional(CONF_MANUAL_IP): vol.Schema({ vol.Required(CONF_STATIC_IP): cv.ipv4, vol.Required(CONF_GATEWAY): cv.ipv4, vol.Required(CONF_SUBNET): cv.ipv4, vol.Inclusive(CONF_DNS1, 'dns'): cv.ipv4, vol.Inclusive(CONF_DNS2, 'dns'): cv.ipv4, }), vol.Optional(CONF_HOSTNAME): cv.hostname, }) IPAddress = MockObj('IPAddress') def safe_ip(ip): if ip is None: return None return IPAddress(*ip.args) def to_code(config): rhs = App.init_wifi(config[CONF_SSID], config.get(CONF_PASSWORD)) wifi = Pvariable('WiFiComponent', config[CONF_ID], rhs) if CONF_MANUAL_IP in config: manual_ip = config[CONF_MANUAL_IP] exp = StructInitializer( 'ManualIP', ('static_ip', safe_ip(manual_ip[CONF_STATIC_IP])), ('gateway', safe_ip(manual_ip[CONF_GATEWAY])), ('subnet', safe_ip(manual_ip[CONF_SUBNET])), ('dns1', safe_ip(manual_ip.get(CONF_DNS1))), ('dns2', safe_ip(manual_ip.get(CONF_DNS2))), ) add(wifi.set_manual_ip(exp)) if CONF_HOSTNAME in config: add(wifi.set_hostname(config[CONF_HOSTNAME]))