ESPHome 2026.1.0-dev
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 if (!(obj)->get_icon_ref().empty()) { \
18 ESP_LOGCONFIG(TAG, "%s Icon: '%s'", prefix, (obj)->get_icon_ref().c_str()); \
19 } \
20 if ((obj)->traits.get_assumed_state()) { \
21 ESP_LOGCONFIG(TAG, "%s Assumed State: YES", prefix); \
22 } \
23 }
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
88 LockCall &set_state(const std::string &state);
89
90 void perform();
91
92 const optional<LockState> &get_state() const;
93
94 protected:
95 void validate_();
96
97 Lock *const parent_;
99};
100
111class Lock : public EntityBase {
112 public:
113 explicit Lock();
114
120
128
131
133
138 void lock();
143 void unlock();
148 void open();
149
154 void add_on_state_callback(std::function<void()> &&callback);
155
156 protected:
157 friend LockCall;
158
165 virtual void open_latch() { unlock(); };
166
175 virtual void control(const LockCall &call) = 0;
176
180};
181
182} // namespace esphome::lock
Helper class to deduplicate items in a series of values.
Definition helpers.h:1074
This class is used to encode all control actions on a lock device.
Definition lock.h:79
Lock *const parent_
Definition lock.h:97
const optional< LockState > & get_state() const
Definition lock.cpp:107
LockCall & set_state(LockState state)
Set the state of the lock device.
Definition lock.cpp:81
LockCall(Lock *parent)
Definition lock.h:81
optional< LockState > state_
Definition lock.h:98
Base class for all locks.
Definition lock.h:111
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:179
Deduplicator< LockState > publish_dedup_
Definition lock.h:178
virtual void open_latch()
Perform the open latch action with hardware.
Definition lock.h:165
LockCall make_call()
Make a lock device control call, this is used to control the lock device, see the LockCall descriptio...
Definition lock.cpp:29
void lock()
Turn this lock on.
Definition lock.cpp:31
LockTraits traits
Definition lock.h:132
void publish_state(LockState state)
Publish a state to the front-end from the back-end.
Definition lock.cpp:49
void add_on_state_callback(std::function< void()> &&callback)
Set callback for state changes.
Definition lock.cpp:62
LockState state
The current reported state of the lock.
Definition lock.h:130
void unlock()
Turn this lock off.
Definition lock.cpp:36
LazyCallbackManager< void()> state_callback_
Definition lock.h:177
friend LockCall
Definition lock.h:157
void open()
Open (unlatch) this lock.
Definition lock.cpp:41
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:0
const LogString * lock_state_to_string(LockState state)
Definition lock.cpp:10
LockState
Enum for all states a lock can be in.
Definition lock.h:25
@ LOCK_STATE_LOCKING
Definition lock.h:30
@ LOCK_STATE_NONE
Definition lock.h:26
@ LOCK_STATE_UNLOCKING
Definition lock.h:31
@ LOCK_STATE_JAMMED
Definition lock.h:29
@ LOCK_STATE_UNLOCKED
Definition lock.h:28
@ LOCK_STATE_LOCKED
Definition lock.h:27