ESPHome 2025.12.0-dev
Loading...
Searching...
No Matches
alarm_control_panel.cpp
Go to the documentation of this file.
4
5#include <utility>
6
9#include "esphome/core/log.h"
10
11namespace esphome {
12namespace alarm_control_panel {
13
14static const char *const TAG = "alarm_control_panel";
15
17
19 switch (state) {
25 return true;
26 default:
27 return false;
28 }
29};
30
32 this->last_update_ = millis();
33 if (state != this->current_state_) {
34 auto prev_state = this->current_state_;
35 ESP_LOGD(TAG, "Set state to: %s, previous: %s", LOG_STR_ARG(alarm_control_panel_state_to_string(state)),
36 LOG_STR_ARG(alarm_control_panel_state_to_string(prev_state)));
37 this->current_state_ = state;
38 this->state_callback_.call();
39#if defined(USE_ALARM_CONTROL_PANEL) && defined(USE_CONTROLLER_REGISTRY)
41#endif
42 if (state == ACP_STATE_TRIGGERED) {
43 this->triggered_callback_.call();
44 } else if (state == ACP_STATE_ARMING) {
45 this->arming_callback_.call();
46 } else if (state == ACP_STATE_PENDING) {
47 this->pending_callback_.call();
48 } else if (state == ACP_STATE_ARMED_HOME) {
49 this->armed_home_callback_.call();
50 } else if (state == ACP_STATE_ARMED_NIGHT) {
51 this->armed_night_callback_.call();
52 } else if (state == ACP_STATE_ARMED_AWAY) {
53 this->armed_away_callback_.call();
54 } else if (state == ACP_STATE_DISARMED) {
55 this->disarmed_callback_.call();
56 }
57
58 if (prev_state == ACP_STATE_TRIGGERED) {
59 this->cleared_callback_.call();
60 }
61 if (state == this->desired_state_) {
62 // only store when in the desired state
63 this->pref_.save(&state);
64 }
65 }
66}
67
68void AlarmControlPanel::add_on_state_callback(std::function<void()> &&callback) {
69 this->state_callback_.add(std::move(callback));
70}
71
72void AlarmControlPanel::add_on_triggered_callback(std::function<void()> &&callback) {
73 this->triggered_callback_.add(std::move(callback));
74}
75
76void AlarmControlPanel::add_on_arming_callback(std::function<void()> &&callback) {
77 this->arming_callback_.add(std::move(callback));
78}
79
80void AlarmControlPanel::add_on_armed_home_callback(std::function<void()> &&callback) {
81 this->armed_home_callback_.add(std::move(callback));
82}
83
84void AlarmControlPanel::add_on_armed_night_callback(std::function<void()> &&callback) {
85 this->armed_night_callback_.add(std::move(callback));
86}
87
88void AlarmControlPanel::add_on_armed_away_callback(std::function<void()> &&callback) {
89 this->armed_away_callback_.add(std::move(callback));
90}
91
92void AlarmControlPanel::add_on_pending_callback(std::function<void()> &&callback) {
93 this->pending_callback_.add(std::move(callback));
94}
95
96void AlarmControlPanel::add_on_disarmed_callback(std::function<void()> &&callback) {
97 this->disarmed_callback_.add(std::move(callback));
98}
99
100void AlarmControlPanel::add_on_cleared_callback(std::function<void()> &&callback) {
101 this->cleared_callback_.add(std::move(callback));
102}
103
104void AlarmControlPanel::add_on_chime_callback(std::function<void()> &&callback) {
105 this->chime_callback_.add(std::move(callback));
106}
107
108void AlarmControlPanel::add_on_ready_callback(std::function<void()> &&callback) {
109 this->ready_callback_.add(std::move(callback));
110}
111
113 auto call = this->make_call();
114 call.arm_away();
115 if (code.has_value())
116 call.set_code(code.value());
117 call.perform();
118}
119
121 auto call = this->make_call();
122 call.arm_home();
123 if (code.has_value())
124 call.set_code(code.value());
125 call.perform();
126}
127
129 auto call = this->make_call();
130 call.arm_night();
131 if (code.has_value())
132 call.set_code(code.value());
133 call.perform();
134}
135
137 auto call = this->make_call();
138 call.arm_vacation();
139 if (code.has_value())
140 call.set_code(code.value());
141 call.perform();
142}
143
145 auto call = this->make_call();
146 call.arm_custom_bypass();
147 if (code.has_value())
148 call.set_code(code.value());
149 call.perform();
150}
151
153 auto call = this->make_call();
154 call.disarm();
155 if (code.has_value())
156 call.set_code(code.value());
157 call.perform();
158}
159
160} // namespace alarm_control_panel
161} // namespace esphome
static void notify_alarm_control_panel_update(alarm_control_panel::AlarmControlPanel *obj)
bool save(const T *src)
Definition preferences.h:21
void add_on_triggered_callback(std::function< void()> &&callback)
Add a callback for when the state of the alarm_control_panel chanes to triggered.
void add_on_state_callback(std::function< void()> &&callback)
Add a callback for when the state of the alarm_control_panel changes.
bool is_state_armed(AlarmControlPanelState state)
void add_on_pending_callback(std::function< void()> &&callback)
Add a callback for when the state of the alarm_control_panel changes to pending.
void add_on_armed_night_callback(std::function< void()> &&callback)
Add a callback for when the state of the alarm_control_panel changes to armed_night.
void add_on_armed_home_callback(std::function< void()> &&callback)
Add a callback for when the state of the alarm_control_panel changes to armed_home.
void arm_vacation(optional< std::string > code=nullopt)
arm the alarm in vacation mode
void arm_home(optional< std::string > code=nullopt)
arm the alarm in home mode
void arm_away(optional< std::string > code=nullopt)
arm the alarm in away mode
void arm_night(optional< std::string > code=nullopt)
arm the alarm in night mode
void add_on_armed_away_callback(std::function< void()> &&callback)
Add a callback for when the state of the alarm_control_panel changes to armed_away.
void arm_custom_bypass(optional< std::string > code=nullopt)
arm the alarm in custom bypass mode
void publish_state(AlarmControlPanelState state)
Set the state of the alarm_control_panel.
void disarm(optional< std::string > code=nullopt)
disarm the alarm
void add_on_ready_callback(std::function< void()> &&callback)
Add a callback for when a ready state changes.
void add_on_cleared_callback(std::function< void()> &&callback)
Add a callback for when the state of the alarm_control_panel clears from triggered.
void add_on_disarmed_callback(std::function< void()> &&callback)
Add a callback for when the state of the alarm_control_panel changes to disarmed.
void add_on_chime_callback(std::function< void()> &&callback)
Add a callback for when a chime zone goes from closed to open.
void add_on_arming_callback(std::function< void()> &&callback)
Add a callback for when the state of the alarm_control_panel chanes to arming.
AlarmControlPanelCall make_call()
Make a AlarmControlPanelCall.
bool has_value() const
Definition optional.h:92
value_type const & value() const
Definition optional.h:94
bool state
Definition fan.h:0
const LogString * alarm_control_panel_state_to_string(AlarmControlPanelState state)
Returns a string representation of the state.
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
uint32_t IRAM_ATTR HOT millis()
Definition core.cpp:30