ESPHome 2026.11.0-dev
Loading...
Searching...
No Matches
alarm_control_panel.h
Go to the documentation of this file.
1#pragma once
2
5
8#include "esphome/core/log.h"
9
11
13 // Matches Home Assistant values
20};
21
23 public:
28
34
40 template<typename F> void add_on_state_callback(F &&callback) {
41 this->state_callback_.add(std::forward<F>(callback));
42 }
43
45 template<typename F> void add_on_cleared_callback(F &&callback) {
46 this->cleared_callback_.add(std::forward<F>(callback));
47 }
48
50 template<typename F> void add_on_chime_callback(F &&callback) {
51 this->chime_callback_.add(std::forward<F>(callback));
52 }
53
55 template<typename F> void add_on_ready_callback(F &&callback) {
56 this->ready_callback_.add(std::forward<F>(callback));
57 }
58
62 virtual uint32_t get_supported_features() const = 0;
63
67 virtual bool get_requires_code() const = 0;
68
72 virtual bool get_requires_code_to_arm() const = 0;
73
78 void arm_away(const char *code = nullptr);
79 void arm_away(const optional<std::string> &code) {
80 this->arm_away(code.has_value() ? code.value().c_str() : nullptr);
81 }
82
87 void arm_home(const char *code = nullptr);
88 void arm_home(const optional<std::string> &code) {
89 this->arm_home(code.has_value() ? code.value().c_str() : nullptr);
90 }
91
96 void arm_night(const char *code = nullptr);
97 void arm_night(const optional<std::string> &code) {
98 this->arm_night(code.has_value() ? code.value().c_str() : nullptr);
99 }
100
105 void arm_vacation(const char *code = nullptr);
106 void arm_vacation(const optional<std::string> &code) {
107 this->arm_vacation(code.has_value() ? code.value().c_str() : nullptr);
108 }
109
114 void arm_custom_bypass(const char *code = nullptr);
115 void arm_custom_bypass(const optional<std::string> &code) {
116 this->arm_custom_bypass(code.has_value() ? code.value().c_str() : nullptr);
117 }
118
123 void disarm(const char *code = nullptr);
124 void disarm(const optional<std::string> &code) { this->disarm(code.has_value() ? code.value().c_str() : nullptr); }
125
130
131 // is the state one of the armed states
136 auto state = this->get_state();
137 return this->is_state_armed(state) || state == ACP_STATE_PENDING || state == ACP_STATE_TRIGGERED;
138 }
139
140 protected:
142 // Helper to reduce code duplication for arm/disarm methods
143 void arm_with_code_(AlarmControlPanelCall &(AlarmControlPanelCall::*arm_method)(), const char *code);
144 // in order to store last panel state in flash
146 // current state
148 // the desired (or previous) state
150 // last time the state was updated
152 // the call control function
153 virtual void control(const AlarmControlPanelCall &call) = 0;
154 // state callback - passes the new state to listeners
156 // clear callback - fires when leaving TRIGGERED state
158 // chime callback
160 // ready callback
162};
163
164} // namespace esphome::alarm_control_panel
void add_on_state_callback(F &&callback)
Add a callback for when the state of the alarm_control_panel changes.
bool is_state_armed(AlarmControlPanelState state)
void arm_away(const optional< std::string > &code)
void arm_vacation(const char *code=nullptr)
arm the alarm in vacation mode
void add_on_cleared_callback(F &&callback)
Add a callback for when the state of the alarm_control_panel clears from triggered.
bool is_armed_pending_or_triggered()
Armed, pending (entry delay) or triggered; not ARMING (exit delay).
virtual uint32_t get_supported_features() const =0
A numeric representation of the supported features as per HomeAssistant.
void arm_custom_bypass(const char *code=nullptr)
arm the alarm in custom bypass mode
void arm_home(const char *code=nullptr)
arm the alarm in home mode
void arm_custom_bypass(const optional< std::string > &code)
AlarmControlPanelState get_state() const
Get the state.
void arm_home(const optional< std::string > &code)
LazyCallbackManager< void(AlarmControlPanelState)> state_callback_
void arm_with_code_(AlarmControlPanelCall &(AlarmControlPanelCall::*arm_method)(), const char *code)
virtual bool get_requires_code_to_arm() const =0
Returns if the alarm_control_panel requires a code to arm.
void disarm(const char *code=nullptr)
disarm the alarm
void arm_vacation(const optional< std::string > &code)
void add_on_ready_callback(F &&callback)
Add a callback for when a ready state changes.
void arm_night(const optional< std::string > &code)
virtual bool get_requires_code() const =0
Returns if the alarm_control_panel has a code.
void publish_state(AlarmControlPanelState state)
Set the state of the alarm_control_panel.
void arm_night(const char *code=nullptr)
arm the alarm in night mode
void add_on_chime_callback(F &&callback)
Add a callback for when a chime zone goes from closed to open.
void arm_away(const char *code=nullptr)
arm the alarm in away mode
AlarmControlPanelCall make_call()
Make a AlarmControlPanelCall.
virtual void control(const AlarmControlPanelCall &call)=0
void disarm(const optional< std::string > &code)
bool state
Definition fan.h:2
static void uint32_t