mirror of
https://github.com/esphome/esphome.git
synced 2025-07-29 06:36:45 +00:00
[lock] Tidy up template publish action and lockstate locations (#8729)
This commit is contained in:
parent
23fb1bed61
commit
b3400a1308
@ -31,6 +31,18 @@ LockCondition = lock_ns.class_("LockCondition", Condition)
|
|||||||
LockLockTrigger = lock_ns.class_("LockLockTrigger", automation.Trigger.template())
|
LockLockTrigger = lock_ns.class_("LockLockTrigger", automation.Trigger.template())
|
||||||
LockUnlockTrigger = lock_ns.class_("LockUnlockTrigger", automation.Trigger.template())
|
LockUnlockTrigger = lock_ns.class_("LockUnlockTrigger", automation.Trigger.template())
|
||||||
|
|
||||||
|
LockState = lock_ns.enum("LockState")
|
||||||
|
|
||||||
|
LOCK_STATES = {
|
||||||
|
"LOCKED": LockState.LOCK_STATE_LOCKED,
|
||||||
|
"UNLOCKED": LockState.LOCK_STATE_UNLOCKED,
|
||||||
|
"JAMMED": LockState.LOCK_STATE_JAMMED,
|
||||||
|
"LOCKING": LockState.LOCK_STATE_LOCKING,
|
||||||
|
"UNLOCKING": LockState.LOCK_STATE_UNLOCKING,
|
||||||
|
}
|
||||||
|
|
||||||
|
validate_lock_state = cv.enum(LOCK_STATES, upper=True)
|
||||||
|
|
||||||
LOCK_SCHEMA = (
|
LOCK_SCHEMA = (
|
||||||
cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA)
|
cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA)
|
||||||
.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)
|
.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)
|
||||||
@ -79,7 +91,7 @@ async def register_lock(var, config):
|
|||||||
|
|
||||||
LOCK_ACTION_SCHEMA = maybe_simple_id(
|
LOCK_ACTION_SCHEMA = maybe_simple_id(
|
||||||
{
|
{
|
||||||
cv.Required(CONF_ID): cv.use_id(Lock),
|
cv.GenerateID(CONF_ID): cv.use_id(Lock),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "esphome/core/component.h"
|
|
||||||
#include "esphome/core/automation.h"
|
|
||||||
#include "esphome/components/lock/lock.h"
|
#include "esphome/components/lock/lock.h"
|
||||||
|
#include "esphome/core/automation.h"
|
||||||
|
#include "esphome/core/component.h"
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace lock {
|
namespace lock {
|
||||||
@ -72,16 +72,5 @@ class LockUnlockTrigger : public Trigger<> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class LockPublishAction : public Action<Ts...> {
|
|
||||||
public:
|
|
||||||
LockPublishAction(Lock *a_lock) : lock_(a_lock) {}
|
|
||||||
TEMPLATABLE_VALUE(LockState, state)
|
|
||||||
|
|
||||||
void play(Ts... x) override { this->lock_->publish_state(this->state_.value(x...)); }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
Lock *lock_;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace lock
|
} // namespace lock
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
|
@ -17,17 +17,11 @@ from .. import template_ns
|
|||||||
|
|
||||||
TemplateLock = template_ns.class_("TemplateLock", lock.Lock, cg.Component)
|
TemplateLock = template_ns.class_("TemplateLock", lock.Lock, cg.Component)
|
||||||
|
|
||||||
LockState = lock.lock_ns.enum("LockState")
|
TemplateLockPublishAction = template_ns.class_(
|
||||||
|
"TemplateLockPublishAction",
|
||||||
LOCK_STATES = {
|
automation.Action,
|
||||||
"LOCKED": LockState.LOCK_STATE_LOCKED,
|
cg.Parented.template(TemplateLock),
|
||||||
"UNLOCKED": LockState.LOCK_STATE_UNLOCKED,
|
)
|
||||||
"JAMMED": LockState.LOCK_STATE_JAMMED,
|
|
||||||
"LOCKING": LockState.LOCK_STATE_LOCKING,
|
|
||||||
"UNLOCKING": LockState.LOCK_STATE_UNLOCKING,
|
|
||||||
}
|
|
||||||
|
|
||||||
validate_lock_state = cv.enum(LOCK_STATES, upper=True)
|
|
||||||
|
|
||||||
|
|
||||||
def validate(config):
|
def validate(config):
|
||||||
@ -66,7 +60,7 @@ async def to_code(config):
|
|||||||
|
|
||||||
if CONF_LAMBDA in config:
|
if CONF_LAMBDA in config:
|
||||||
template_ = await cg.process_lambda(
|
template_ = await cg.process_lambda(
|
||||||
config[CONF_LAMBDA], [], return_type=cg.optional.template(LockState)
|
config[CONF_LAMBDA], [], return_type=cg.optional.template(lock.LockState)
|
||||||
)
|
)
|
||||||
cg.add(var.set_state_lambda(template_))
|
cg.add(var.set_state_lambda(template_))
|
||||||
if CONF_UNLOCK_ACTION in config:
|
if CONF_UNLOCK_ACTION in config:
|
||||||
@ -88,17 +82,18 @@ async def to_code(config):
|
|||||||
|
|
||||||
@automation.register_action(
|
@automation.register_action(
|
||||||
"lock.template.publish",
|
"lock.template.publish",
|
||||||
lock.LockPublishAction,
|
TemplateLockPublishAction,
|
||||||
cv.Schema(
|
cv.maybe_simple_value(
|
||||||
{
|
{
|
||||||
cv.Required(CONF_ID): cv.use_id(lock.Lock),
|
cv.GenerateID(): cv.use_id(TemplateLock),
|
||||||
cv.Required(CONF_STATE): cv.templatable(validate_lock_state),
|
cv.Required(CONF_STATE): cv.templatable(lock.validate_lock_state),
|
||||||
}
|
},
|
||||||
|
key=CONF_STATE,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def lock_template_publish_to_code(config, action_id, template_arg, args):
|
async def lock_template_publish_to_code(config, action_id, template_arg, args):
|
||||||
paren = await cg.get_variable(config[CONF_ID])
|
var = cg.new_Pvariable(action_id, template_arg)
|
||||||
var = cg.new_Pvariable(action_id, template_arg, paren)
|
await cg.register_parented(var, config[CONF_ID])
|
||||||
template_ = await cg.templatable(config[CONF_STATE], args, LockState)
|
template_ = await cg.templatable(config[CONF_STATE], args, lock.LockState)
|
||||||
cg.add(var.set_state(template_))
|
cg.add(var.set_state(template_))
|
||||||
return var
|
return var
|
||||||
|
18
esphome/components/template/lock/automation.h
Normal file
18
esphome/components/template/lock/automation.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "template_lock.h"
|
||||||
|
|
||||||
|
#include "esphome/core/automation.h"
|
||||||
|
|
||||||
|
namespace esphome {
|
||||||
|
namespace template_ {
|
||||||
|
|
||||||
|
template<typename... Ts> class TemplateLockPublishAction : public Action<Ts...>, public Parented<TemplateLock> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(lock::LockState, state)
|
||||||
|
|
||||||
|
void play(Ts... x) override { this->parent_->publish_state(this->state_.value(x...)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace template_
|
||||||
|
} // namespace esphome
|
@ -27,9 +27,7 @@ lock:
|
|||||||
id: test_lock1
|
id: test_lock1
|
||||||
state: !lambda "return LOCK_STATE_UNLOCKED;"
|
state: !lambda "return LOCK_STATE_UNLOCKED;"
|
||||||
on_lock:
|
on_lock:
|
||||||
- lock.template.publish:
|
- lock.template.publish: LOCKED
|
||||||
id: test_lock1
|
|
||||||
state: !lambda "return LOCK_STATE_LOCKED;"
|
|
||||||
- platform: output
|
- platform: output
|
||||||
name: Generic Output Lock
|
name: Generic Output Lock
|
||||||
id: test_lock2
|
id: test_lock2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user