ESPHome 2025.5.0
Loading...
Searching...
No Matches
lock.h
Go to the documentation of this file.
1#pragma once
2
7#include "esphome/core/log.h"
8#include <set>
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().empty()) { \
19 ESP_LOGCONFIG(TAG, "%s Icon: '%s'", prefix, (obj)->get_icon().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
47 bool supports_state(LockState state) const { return supported_states_.count(state); }
48 std::set<LockState> get_supported_states() const { return supported_states_; }
49 void set_supported_states(std::set<LockState> states) { supported_states_ = std::move(states); }
51
52 protected:
53 bool supports_open_{false};
54 bool requires_code_{false};
55 bool assumed_state_{false};
57};
58
71class LockCall {
72 public:
73 LockCall(Lock *parent) : parent_(parent) {}
74
80 LockCall &set_state(const std::string &state);
81
82 void perform();
83
84 const optional<LockState> &get_state() const;
85
86 protected:
87 void validate_();
88
89 Lock *const parent_;
91};
92
103class Lock : public EntityBase {
104 public:
105 explicit Lock();
106
112
120
123
125
130 void lock();
135 void unlock();
140 void open();
141
146 void add_on_state_callback(std::function<void()> &&callback);
147
148 protected:
149 friend LockCall;
150
157 virtual void open_latch() { unlock(); };
158
167 virtual void control(const LockCall &call) = 0;
168
172};
173
174} // namespace lock
175} // namespace esphome
Helper class to deduplicate items in a series of values.
Definition helpers.h:517
This class is used to encode all control actions on a lock device.
Definition lock.h:71
Lock *const parent_
Definition lock.h:89
const optional< LockState > & get_state() const
Definition lock.cpp:104
LockCall & set_state(LockState state)
Set the state of the lock device.
Definition lock.cpp:78
LockCall(Lock *parent)
Definition lock.h:73
optional< LockState > state_
Definition lock.h:90
Base class for all locks.
Definition lock.h:103
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:171
Deduplicator< LockState > publish_dedup_
Definition lock.h:170
virtual void open_latch()
Perform the open latch action with hardware.
Definition lock.h:157
LockCall make_call()
Make a lock device control call, this is used to control the lock device, see the LockCall descriptio...
Definition lock.cpp:28
void lock()
Turn this lock on.
Definition lock.cpp:30
LockTraits traits
Definition lock.h:124
void publish_state(LockState state)
Publish a state to the front-end from the back-end.
Definition lock.cpp:48
void add_on_state_callback(std::function< void()> &&callback)
Set callback for state changes.
Definition lock.cpp:58
CallbackManager< void()> state_callback_
Definition lock.h:169
LockState state
The current reported state of the lock.
Definition lock.h:122
void unlock()
Turn this lock off.
Definition lock.cpp:35
friend LockCall
Definition lock.h:149
void open()
Open (unlatch) this lock.
Definition lock.cpp:40
bool get_requires_code() const
Definition lock.h:42
bool supports_state(LockState state) const
Definition lock.h:47
std::set< LockState > supported_states_
Definition lock.h:56
std::set< LockState > get_supported_states() const
Definition lock.h:48
void set_assumed_state(bool assumed_state)
Definition lock.h:45
bool get_assumed_state() const
Definition lock.h:44
void set_supported_states(std::set< LockState > states)
Definition lock.h:49
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 add_supported_state(LockState state)
Definition lock.h:50
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:9
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7