Configurable OTA Safe Mode (#1393)

This commit is contained in:
Alex 2020-12-01 17:41:39 -05:00 committed by GitHub
parent 7ff3f752e2
commit 3afb564a48
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 12 additions and 3 deletions

View file

@ -1,6 +1,9 @@
import esphome.codegen as cg import esphome.codegen as cg
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome.const import CONF_ID, CONF_PASSWORD, CONF_PORT, CONF_SAFE_MODE from esphome.const import (
CONF_ID, CONF_NUM_ATTEMPTS, CONF_PASSWORD,
CONF_PORT, CONF_REBOOT_TIMEOUT, CONF_SAFE_MODE
)
from esphome.core import CORE, coroutine_with_priority from esphome.core import CORE, coroutine_with_priority
CODEOWNERS = ['@esphome/core'] CODEOWNERS = ['@esphome/core']
@ -14,6 +17,8 @@ CONFIG_SCHEMA = cv.Schema({
cv.Optional(CONF_SAFE_MODE, default=True): cv.boolean, cv.Optional(CONF_SAFE_MODE, default=True): cv.boolean,
cv.SplitDefault(CONF_PORT, esp8266=8266, esp32=3232): cv.port, cv.SplitDefault(CONF_PORT, esp8266=8266, esp32=3232): cv.port,
cv.Optional(CONF_PASSWORD, default=''): cv.string, cv.Optional(CONF_PASSWORD, default=''): cv.string,
cv.Optional(CONF_REBOOT_TIMEOUT, default='5min'): cv.positive_time_period_milliseconds,
cv.Optional(CONF_NUM_ATTEMPTS, default='10'): cv.positive_not_null_int
}).extend(cv.COMPONENT_SCHEMA) }).extend(cv.COMPONENT_SCHEMA)
@ -26,7 +31,7 @@ def to_code(config):
yield cg.register_component(var, config) yield cg.register_component(var, config)
if config[CONF_SAFE_MODE]: if config[CONF_SAFE_MODE]:
cg.add(var.start_safe_mode()) cg.add(var.start_safe_mode(config[CONF_NUM_ATTEMPTS], config[CONF_REBOOT_TIMEOUT]))
if CORE.is_esp8266: if CORE.is_esp8266:
cg.add_library('Update', None) cg.add_library('Update', None)

View file

@ -47,7 +47,7 @@ class OTAComponent : public Component {
/// Manually set the port OTA should listen on. /// Manually set the port OTA should listen on.
void set_port(uint16_t port); void set_port(uint16_t port);
void start_safe_mode(uint8_t num_attempts = 10, uint32_t enable_time = 120000); void start_safe_mode(uint8_t num_attempts, uint32_t enable_time);
// ========== INTERNAL METHODS ========== // ========== INTERNAL METHODS ==========
// (In most use cases you won't need these) // (In most use cases you won't need these)

View file

@ -154,6 +154,8 @@ ota:
safe_mode: True safe_mode: True
password: 'superlongpasswordthatnoonewillknow' password: 'superlongpasswordthatnoonewillknow'
port: 3286 port: 3286
reboot_timeout: 2min
num_attempts: 5
logger: logger:
baud_rate: 0 baud_rate: 0

View file

@ -40,6 +40,7 @@ uart:
ota: ota:
safe_mode: True safe_mode: True
port: 3286 port: 3286
num_attempts: 15
logger: logger:
level: DEBUG level: DEBUG

View file

@ -204,6 +204,7 @@ uart:
ota: ota:
safe_mode: True safe_mode: True
port: 3286 port: 3286
reboot_timeout: 15min
logger: logger:
hardware_uart: UART1 hardware_uart: UART1