ESPHome 2026.5.1
Loading...
Searching...
No Matches
lock.h
Go to the documentation of this file.
1#pragma once
2
6#include "esphome/core/log.h"
8#include <initializer_list>
9
10namespace esphome::lock {
11
12class Lock;
13
14#define LOG_LOCK(prefix, type, obj) \
15 if ((obj) != nullptr) { \
16 ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \
17 LOG_ENTITY_ICON(TAG, prefix, *(obj)); \
18 if ((obj)->traits.get_assumed_state()) { \
19 ESP_LOGCONFIG(TAG, "%s Assumed State: YES", prefix); \
20 } \
21 }
33const LogString *lock_state_to_string(LockState state);
34
36static constexpr size_t LOCK_STATE_STR_SIZE = 10;
37
39 public:
40 LockTraits() = default;
41
42 bool get_supports_open() const { return this->supports_open_; }
43 void set_supports_open(bool supports_open) { this->supports_open_ = supports_open; }
44 bool get_requires_code() const { return this->requires_code_; }
45 void set_requires_code(bool requires_code) { this->requires_code_ = requires_code; }
46 bool get_assumed_state() const { return this->assumed_state_; }
47 void set_assumed_state(bool assumed_state) { this->assumed_state_ = assumed_state; }
48
50 void set_supported_states(std::initializer_list<LockState> states) {
52 for (auto state : states) {
54 }
55 }
59
60 protected:
61 bool supports_open_{false};
62 bool requires_code_{false};
63 bool assumed_state_{false};
65};
66
79class LockCall {
80 public:
81 LockCall(Lock *parent) : parent_(parent) {}
82
86 LockCall &set_state(optional<LockState> state);
88 LockCall &set_state(const char *state);
89 LockCall &set_state(const std::string &state) { return this->set_state(state.c_str()); }
90
91 void perform();
92
93 const optional<LockState> &get_state() const;
94
95 protected:
96 void validate_();
97
98 Lock *const parent_;
99 optional<LockState> state_;
100};
101
112class Lock : public EntityBase {
113 public:
114 explicit Lock();
115
121
129
132
134
139 void lock();
144 void unlock();
149 void open();
150
155 template<typename F> void add_on_state_callback(F &&callback) {
156 this->state_callback_.add(std::forward<F>(callback));
157 }
158
159 protected:
160 friend LockCall;
161
164
171 virtual void open_latch() { unlock(); };
172
181 virtual void control(const LockCall &call) = 0;
182
186};
187
188} // namespace esphome::lock
Helper class to deduplicate items in a series of values.
Definition helpers.h:1833
This class is used to encode all control actions on a lock device.
Definition lock.h:79
LockCall & set_state(const std::string &state)
Definition lock.h:89
Lock *const parent_
Definition lock.h:98
const optional< LockState > & get_state() const
Definition lock.cpp:99
LockCall & set_state(LockState state)
Set the state of the lock device.
Definition lock.cpp:69
LockCall(Lock *parent)
Definition lock.h:81
optional< LockState > state_
Definition lock.h:99
Base class for all locks.
Definition lock.h:112
virtual void control(const LockCall &call)=0
Control the lock device, this is a virtual method that each lock integration must implement.
ESPPreferenceObject rtc_
Definition lock.h:185
Deduplicator< LockState > publish_dedup_
Definition lock.h:184
void set_state_(LockState state)
Helper for lock/unlock convenience methods.
Definition lock.cpp:23
virtual void open_latch()
Perform the open latch action with hardware.
Definition lock.h:171
LockCall make_call()
Make a lock device control call, this is used to control the lock device, see the LockCall descriptio...
Definition lock.cpp:21
void lock()
Turn this lock on.
Definition lock.cpp:29
LockTraits traits
Definition lock.h:133
void publish_state(LockState state)
Publish a state to the front-end from the back-end.
Definition lock.cpp:39
LockState state
The current reported state of the lock.
Definition lock.h:131
void unlock()
Turn this lock off.
Definition lock.cpp:30
LazyCallbackManager< void(LockState)> state_callback_
Definition lock.h:183
friend LockCall
Definition lock.h:160
void open()
Open (unlatch) this lock.
Definition lock.cpp:31
void add_on_state_callback(F &&callback)
Set callback for state changes.
Definition lock.h:155
bool get_requires_code() const
Definition lock.h:44
bool supports_state(LockState state) const
Definition lock.h:49
void set_assumed_state(bool assumed_state)
Definition lock.h:47
bool get_assumed_state() const
Definition lock.h:46
void set_supported_states_mask(uint8_t mask)
Definition lock.h:57
void set_requires_code(bool requires_code)
Definition lock.h:45
bool get_supports_open() const
Definition lock.h:42
void set_supports_open(bool supports_open)
Definition lock.h:43
void set_supported_states(std::initializer_list< LockState > states)
Definition lock.h:50
void add_supported_state(LockState state)
Definition lock.h:58
uint8_t get_supported_states_mask() const
Definition lock.h:56
uint8_t supported_states_mask_
Definition lock.h:64
bool state
Definition fan.h:2
const LogString * lock_state_to_string(LockState state)
Definition lock.cpp:16
LockState
Enum for all states a lock can be in.
Definition lock.h:23
@ LOCK_STATE_LOCKING
Definition lock.h:28
@ LOCK_STATE_NONE
Definition lock.h:24
@ LOCK_STATE_OPENING
Definition lock.h:30
@ LOCK_STATE_OPEN
Definition lock.h:31
@ LOCK_STATE_UNLOCKING
Definition lock.h:29
@ LOCK_STATE_JAMMED
Definition lock.h:27
@ LOCK_STATE_UNLOCKED
Definition lock.h:26
@ LOCK_STATE_LOCKED
Definition lock.h:25