ESPHome 2025.12.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 {
11namespace lock {
12
13class Lock;
14
15#define LOG_LOCK(prefix, type, obj) \
16 if ((obj) != nullptr) { \
17 ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \
18 if (!(obj)->get_icon_ref().empty()) { \
19 ESP_LOGCONFIG(TAG, "%s Icon: '%s'", prefix, (obj)->get_icon_ref().c_str()); \
20 } \
21 if ((obj)->traits.get_assumed_state()) { \
22 ESP_LOGCONFIG(TAG, "%s Assumed State: YES", prefix); \
23 } \
24 }
35
37 public:
38 LockTraits() = default;
39
40 bool get_supports_open() const { return this->supports_open_; }
41 void set_supports_open(bool supports_open) { this->supports_open_ = supports_open; }
42 bool get_requires_code() const { return this->requires_code_; }
43 void set_requires_code(bool requires_code) { this->requires_code_ = requires_code; }
44 bool get_assumed_state() const { return this->assumed_state_; }
45 void set_assumed_state(bool assumed_state) { this->assumed_state_ = assumed_state; }
46
48 void set_supported_states(std::initializer_list<LockState> states) {
50 for (auto state : states) {
52 }
53 }
57
58 protected:
59 bool supports_open_{false};
60 bool requires_code_{false};
61 bool assumed_state_{false};
63};
64
77class LockCall {
78 public:
79 LockCall(Lock *parent) : parent_(parent) {}
80
86 LockCall &set_state(const std::string &state);
87
88 void perform();
89
90 const optional<LockState> &get_state() const;
91
92 protected:
93 void validate_();
94
95 Lock *const parent_;
97};
98
109class Lock : public EntityBase {
110 public:
111 explicit Lock();
112
118
126
129
131
136 void lock();
141 void unlock();
146 void open();
147
152 void add_on_state_callback(std::function<void()> &&callback);
153
154 protected:
155 friend LockCall;
156
163 virtual void open_latch() { unlock(); };
164
173 virtual void control(const LockCall &call) = 0;
174
178};
179
180} // namespace lock
181} // namespace esphome
Helper class to deduplicate items in a series of values.
Definition helpers.h:890
This class is used to encode all control actions on a lock device.
Definition lock.h:77
Lock *const parent_
Definition lock.h:95
const optional< LockState > & get_state() const
Definition lock.cpp:109
LockCall & set_state(LockState state)
Set the state of the lock device.
Definition lock.cpp:83
LockCall(Lock *parent)
Definition lock.h:79
optional< LockState > state_
Definition lock.h:96
Base class for all locks.
Definition lock.h:109
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:177
Deduplicator< LockState > publish_dedup_
Definition lock.h:176
virtual void open_latch()
Perform the open latch action with hardware.
Definition lock.h:163
LockCall make_call()
Make a lock device control call, this is used to control the lock device, see the LockCall descriptio...
Definition lock.cpp:30
void lock()
Turn this lock on.
Definition lock.cpp:32
LockTraits traits
Definition lock.h:130
void publish_state(LockState state)
Publish a state to the front-end from the back-end.
Definition lock.cpp:50
void add_on_state_callback(std::function< void()> &&callback)
Set callback for state changes.
Definition lock.cpp:63
CallbackManager< void()> state_callback_
Definition lock.h:175
LockState state
The current reported state of the lock.
Definition lock.h:128
void unlock()
Turn this lock off.
Definition lock.cpp:37
friend LockCall
Definition lock.h:155
void open()
Open (unlatch) this lock.
Definition lock.cpp:42
bool get_requires_code() const
Definition lock.h:42
bool supports_state(LockState state) const
Definition lock.h:47
void set_assumed_state(bool assumed_state)
Definition lock.h:45
bool get_assumed_state() const
Definition lock.h:44
void set_supported_states_mask(uint8_t mask)
Definition lock.h:55
void set_requires_code(bool requires_code)
Definition lock.h:43
bool get_supports_open() const
Definition lock.h:40
void set_supports_open(bool supports_open)
Definition lock.h:41
void set_supported_states(std::initializer_list< LockState > states)
Definition lock.h:48
void add_supported_state(LockState state)
Definition lock.h:56
uint8_t get_supported_states_mask() const
Definition lock.h:54
uint8_t supported_states_mask_
Definition lock.h:62
bool state
Definition fan.h:0
LockState
Enum for all states a lock can be in.
Definition lock.h:26
@ LOCK_STATE_LOCKING
Definition lock.h:31
@ LOCK_STATE_NONE
Definition lock.h:27
@ LOCK_STATE_UNLOCKING
Definition lock.h:32
@ LOCK_STATE_JAMMED
Definition lock.h:30
@ LOCK_STATE_UNLOCKED
Definition lock.h:29
@ LOCK_STATE_LOCKED
Definition lock.h:28
const char * lock_state_to_string(LockState state)
Definition lock.cpp:11
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7