diff --git a/esphomeyaml/components/switch/gpio.py b/esphomeyaml/components/switch/gpio.py index fba4911557..f0f3c3515c 100644 --- a/esphomeyaml/components/switch/gpio.py +++ b/esphomeyaml/components/switch/gpio.py @@ -3,18 +3,27 @@ import voluptuous as vol from esphomeyaml import pins from esphomeyaml.components import switch import esphomeyaml.config_validation as cv -from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME, CONF_PIN -from esphomeyaml.cpp_generator import variable +from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME, CONF_PIN, CONF_RESTORE_MODE +from esphomeyaml.cpp_generator import add, variable from esphomeyaml.cpp_helpers import gpio_output_pin_expression, setup_component from esphomeyaml.cpp_types import App, Application, Component MakeGPIOSwitch = Application.struct('MakeGPIOSwitch') GPIOSwitch = switch.switch_ns.class_('GPIOSwitch', switch.Switch, Component) +GPIOSwitchRestoreMode = switch.switch_ns.enum('GPIOSwitchRestoreMode') + +RESTORE_MODES = { + 'RESTORE_DEFAULT_OFF': GPIOSwitchRestoreMode.GPIO_SWITCH_RESTORE_DEFAULT_OFF, + 'RESTORE_DEFAULT_ON': GPIOSwitchRestoreMode.GPIO_SWITCH_RESTORE_DEFAULT_ON, + 'ALWAYS_OFF': GPIOSwitchRestoreMode.GPIO_SWITCH_ALWAYS_OFF, + 'ALWAYS_ON': GPIOSwitchRestoreMode.GPIO_SWITCH_ALWAYS_ON, +} PLATFORM_SCHEMA = cv.nameable(switch.SWITCH_PLATFORM_SCHEMA.extend({ cv.GenerateID(): cv.declare_variable_id(GPIOSwitch), cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeGPIOSwitch), vol.Required(CONF_PIN): pins.gpio_output_pin_schema, + vol.Optional(CONF_RESTORE_MODE): cv.one_of(RESTORE_MODES, upper=True, space='_'), }).extend(cv.COMPONENT_SCHEMA.schema)) @@ -25,6 +34,9 @@ def to_code(config): make = variable(config[CONF_MAKE_ID], rhs) gpio = make.Pswitch_ + if CONF_RESTORE_MODE in config: + add(gpio.set_restore_mode(RESTORE_MODES[config[CONF_RESTORE_MODE]])) + switch.setup_switch(gpio, make.Pmqtt, config) setup_component(gpio, config) diff --git a/esphomeyaml/const.py b/esphomeyaml/const.py index e1715535be..76831a36f9 100644 --- a/esphomeyaml/const.py +++ b/esphomeyaml/const.py @@ -393,6 +393,7 @@ CONF_DATA_TEMPLATE = 'data_template' CONF_VARIABLES = 'variables' CONF_SERVICE = 'service' CONF_ENTITY_ID = 'entity_id' +CONF_RESTORE_MODE = 'restore_mode' ALLOWED_NAME_CHARS = u'abcdefghijklmnopqrstuvwxyz0123456789_' ARDUINO_VERSION_ESP32_DEV = 'https://github.com/platformio/platform-espressif32.git#feature/stage'