mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	on_boot and on_shutdown triggers
This commit is contained in:
		| @@ -8,19 +8,21 @@ import voluptuous as vol | |||||||
| from voluptuous.humanize import humanize_error | from voluptuous.humanize import humanize_error | ||||||
|  |  | ||||||
| import esphomeyaml.config_validation as cv | import esphomeyaml.config_validation as cv | ||||||
| from esphomeyaml import core, yaml_util | from esphomeyaml import core, yaml_util, automation | ||||||
| from esphomeyaml.const import CONF_BOARD, CONF_BOARD_FLASH_MODE, CONF_ESPHOMEYAML, \ | from esphomeyaml.const import CONF_BOARD, CONF_BOARD_FLASH_MODE, CONF_ESPHOMEYAML, \ | ||||||
|     CONF_LIBRARY_URI, \ |     CONF_LIBRARY_URI, CONF_NAME, CONF_PLATFORM, CONF_SIMPLIFY, CONF_USE_BUILD_FLAGS, CONF_WIFI, \ | ||||||
|     CONF_NAME, CONF_PLATFORM, CONF_SIMPLIFY, CONF_USE_BUILD_FLAGS, CONF_WIFI, ESP_PLATFORMS, \ |     ESP_PLATFORMS, ESP_PLATFORM_ESP32, ESP_PLATFORM_ESP8266, CONF_ON_BOOT, CONF_TRIGGER_ID, \ | ||||||
|     ESP_PLATFORM_ESP32, ESP_PLATFORM_ESP8266 |     CONF_PRIORITY, CONF_ON_SHUTDOWN | ||||||
| from esphomeyaml.core import ESPHomeYAMLError | from esphomeyaml.core import ESPHomeYAMLError | ||||||
| from esphomeyaml.helpers import App, add, color | from esphomeyaml.helpers import App, add, color, esphomelib_ns, Pvariable, NoArg, const_char_p | ||||||
|  |  | ||||||
| _LOGGER = logging.getLogger(__name__) | _LOGGER = logging.getLogger(__name__) | ||||||
|  |  | ||||||
| DEFAULT_LIBRARY_URI = u'https://github.com/OttoWinter/esphomelib.git#v1.6.2' | DEFAULT_LIBRARY_URI = u'https://github.com/OttoWinter/esphomelib.git#v1.6.2' | ||||||
|  |  | ||||||
| BUILD_FLASH_MODES = ['qio', 'qout', 'dio', 'dout'] | BUILD_FLASH_MODES = ['qio', 'qout', 'dio', 'dout'] | ||||||
|  | StartupTrigger = esphomelib_ns.StartupTrigger | ||||||
|  | ShutdownTrigger = esphomelib_ns.ShutdownTrigger | ||||||
|  |  | ||||||
| CORE_SCHEMA = vol.Schema({ | CORE_SCHEMA = vol.Schema({ | ||||||
|     vol.Required(CONF_NAME): cv.valid_name, |     vol.Required(CONF_NAME): cv.valid_name, | ||||||
| @@ -30,6 +32,13 @@ CORE_SCHEMA = vol.Schema({ | |||||||
|     vol.Optional(CONF_SIMPLIFY, default=True): cv.boolean, |     vol.Optional(CONF_SIMPLIFY, default=True): cv.boolean, | ||||||
|     vol.Optional(CONF_USE_BUILD_FLAGS, default=True): cv.boolean, |     vol.Optional(CONF_USE_BUILD_FLAGS, default=True): cv.boolean, | ||||||
|     vol.Optional(CONF_BOARD_FLASH_MODE): vol.All(vol.Lower, cv.one_of(*BUILD_FLASH_MODES)), |     vol.Optional(CONF_BOARD_FLASH_MODE): vol.All(vol.Lower, cv.one_of(*BUILD_FLASH_MODES)), | ||||||
|  |     vol.Optional(CONF_ON_BOOT): vol.All(cv.ensure_list, [automation.AUTOMATION_SCHEMA.extend({ | ||||||
|  |         cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(StartupTrigger), | ||||||
|  |         vol.Optional(CONF_PRIORITY): vol.Coerce(float), | ||||||
|  |     })]), | ||||||
|  |     vol.Optional(CONF_ON_SHUTDOWN): vol.All(cv.ensure_list, [automation.AUTOMATION_SCHEMA.extend({ | ||||||
|  |         cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(ShutdownTrigger), | ||||||
|  |     })]), | ||||||
| }) | }) | ||||||
|  |  | ||||||
| REQUIRED_COMPONENTS = [ | REQUIRED_COMPONENTS = [ | ||||||
| @@ -43,6 +52,15 @@ _ALL_COMPONENTS = [] | |||||||
| def core_to_code(config): | def core_to_code(config): | ||||||
|     add(App.set_name(config[CONF_NAME])) |     add(App.set_name(config[CONF_NAME])) | ||||||
|  |  | ||||||
|  |     for conf in config.get(CONF_ON_BOOT, []): | ||||||
|  |         rhs = App.register_component(StartupTrigger.new(conf.get(CONF_PRIORITY))) | ||||||
|  |         trigger = Pvariable(conf[CONF_TRIGGER_ID], rhs) | ||||||
|  |         automation.build_automation(trigger, NoArg, conf) | ||||||
|  |  | ||||||
|  |     for conf in config.get(CONF_ON_SHUTDOWN, []): | ||||||
|  |         trigger = Pvariable(conf[CONF_TRIGGER_ID], ShutdownTrigger.new()) | ||||||
|  |         automation.build_automation(trigger, const_char_p, conf) | ||||||
|  |  | ||||||
|  |  | ||||||
| def get_component(domain): | def get_component(domain): | ||||||
|     if domain in _COMPONENT_CACHE: |     if domain in _COMPONENT_CACHE: | ||||||
|   | |||||||
| @@ -231,6 +231,9 @@ CONF_CLOSE_ACTION = 'close_action' | |||||||
| CONF_STOP_ACTION = 'stop_action' | CONF_STOP_ACTION = 'stop_action' | ||||||
| CONF_DOMAIN = 'domain' | CONF_DOMAIN = 'domain' | ||||||
| CONF_OPTIMISTIC = 'optimistic' | CONF_OPTIMISTIC = 'optimistic' | ||||||
|  | CONF_ON_BOOT = 'on_boot' | ||||||
|  | CONF_ON_SHUTDOWN = 'on_shutdown' | ||||||
|  | CONF_PRIORITY = 'priority' | ||||||
|  |  | ||||||
| ESP32_BOARDS = [ | ESP32_BOARDS = [ | ||||||
|     'featheresp32', 'node32s', 'espea32', 'firebeetle32', 'esp32doit-devkit-v1', |     'featheresp32', 'node32s', 'espea32', 'firebeetle32', 'esp32doit-devkit-v1', | ||||||
|   | |||||||
| @@ -534,6 +534,7 @@ std_string = std_ns.string | |||||||
| uint8 = global_ns.namespace('uint8_t') | uint8 = global_ns.namespace('uint8_t') | ||||||
| uint16 = global_ns.namespace('uint16_t') | uint16 = global_ns.namespace('uint16_t') | ||||||
| uint32 = global_ns.namespace('uint32_t') | uint32 = global_ns.namespace('uint32_t') | ||||||
|  | const_char_p = global_ns.namespace('const char *') | ||||||
| NAN = global_ns.namespace('NAN') | NAN = global_ns.namespace('NAN') | ||||||
| esphomelib_ns = global_ns  # using namespace esphomelib; | esphomelib_ns = global_ns  # using namespace esphomelib; | ||||||
| NoArg = esphomelib_ns.NoArg | NoArg = esphomelib_ns.NoArg | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user