mirror of
https://github.com/esphome/esphome.git
synced 2026-02-08 00:31:58 +00:00
[safe_mode] Conditionally compile callback when on_safe_mode is configured (#13136)
This commit is contained in:
@@ -59,9 +59,11 @@ async def to_code(config):
|
||||
var = cg.new_Pvariable(config[CONF_ID])
|
||||
await cg.register_component(var, config)
|
||||
|
||||
for conf in config.get(CONF_ON_SAFE_MODE, []):
|
||||
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
||||
await automation.build_automation(trigger, [], conf)
|
||||
if on_safe_mode_config := config.get(CONF_ON_SAFE_MODE):
|
||||
cg.add_define("USE_SAFE_MODE_CALLBACK")
|
||||
for conf in on_safe_mode_config:
|
||||
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
||||
await automation.build_automation(trigger, [], conf)
|
||||
|
||||
condition = var.should_enter_safe_mode(
|
||||
config[CONF_NUM_ATTEMPTS],
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
#pragma once
|
||||
#include "esphome/core/defines.h"
|
||||
|
||||
#ifdef USE_SAFE_MODE_CALLBACK
|
||||
#include "safe_mode.h"
|
||||
|
||||
#include "esphome/core/automation.h"
|
||||
|
||||
namespace esphome {
|
||||
namespace safe_mode {
|
||||
namespace esphome::safe_mode {
|
||||
|
||||
class SafeModeTrigger : public Trigger<> {
|
||||
public:
|
||||
@@ -13,5 +15,6 @@ class SafeModeTrigger : public Trigger<> {
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace safe_mode
|
||||
} // namespace esphome
|
||||
} // namespace esphome::safe_mode
|
||||
|
||||
#endif // USE_SAFE_MODE_CALLBACK
|
||||
|
||||
@@ -13,8 +13,7 @@
|
||||
#include <esp_ota_ops.h>
|
||||
#endif
|
||||
|
||||
namespace esphome {
|
||||
namespace safe_mode {
|
||||
namespace esphome::safe_mode {
|
||||
|
||||
static const char *const TAG = "safe_mode";
|
||||
|
||||
@@ -126,7 +125,9 @@ bool SafeModeComponent::should_enter_safe_mode(uint8_t num_attempts, uint32_t en
|
||||
|
||||
ESP_LOGW(TAG, "SAFE MODE IS ACTIVE");
|
||||
|
||||
#ifdef USE_SAFE_MODE_CALLBACK
|
||||
this->safe_mode_callback_.call();
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -157,5 +158,4 @@ void SafeModeComponent::on_safe_shutdown() {
|
||||
this->clean_rtc();
|
||||
}
|
||||
|
||||
} // namespace safe_mode
|
||||
} // namespace esphome
|
||||
} // namespace esphome::safe_mode
|
||||
|
||||
@@ -5,8 +5,7 @@
|
||||
#include "esphome/core/helpers.h"
|
||||
#include "esphome/core/preferences.h"
|
||||
|
||||
namespace esphome {
|
||||
namespace safe_mode {
|
||||
namespace esphome::safe_mode {
|
||||
|
||||
/// SafeModeComponent provides a safe way to recover from repeated boot failures
|
||||
class SafeModeComponent : public Component {
|
||||
@@ -25,9 +24,11 @@ class SafeModeComponent : public Component {
|
||||
|
||||
void on_safe_shutdown() override;
|
||||
|
||||
#ifdef USE_SAFE_MODE_CALLBACK
|
||||
void add_on_safe_mode_callback(std::function<void()> &&callback) {
|
||||
this->safe_mode_callback_.add(std::move(callback));
|
||||
}
|
||||
#endif
|
||||
|
||||
protected:
|
||||
void write_rtc_(uint32_t val);
|
||||
@@ -43,11 +44,12 @@ class SafeModeComponent : public Component {
|
||||
uint8_t safe_mode_num_attempts_{0};
|
||||
// Larger objects at the end
|
||||
ESPPreferenceObject rtc_;
|
||||
#ifdef USE_SAFE_MODE_CALLBACK
|
||||
CallbackManager<void()> safe_mode_callback_{};
|
||||
#endif
|
||||
|
||||
static const uint32_t ENTER_SAFE_MODE_MAGIC =
|
||||
0x5afe5afe; ///< a magic number to indicate that safe mode should be entered on next boot
|
||||
};
|
||||
|
||||
} // namespace safe_mode
|
||||
} // namespace esphome
|
||||
} // namespace esphome::safe_mode
|
||||
|
||||
@@ -100,6 +100,7 @@
|
||||
#define USE_OUTPUT
|
||||
#define USE_POWER_SUPPLY
|
||||
#define USE_QR_CODE
|
||||
#define USE_SAFE_MODE_CALLBACK
|
||||
#define USE_SELECT
|
||||
#define USE_SENSOR
|
||||
#define USE_STATUS_LED
|
||||
|
||||
Reference in New Issue
Block a user