mirror of
https://github.com/esphome/esphome.git
synced 2025-11-01 07:31:51 +00:00
wip
This commit is contained in:
@@ -5,6 +5,7 @@ import esphome.config_validation as cv
|
|||||||
from esphome.const import (
|
from esphome.const import (
|
||||||
CONF_DAY,
|
CONF_DAY,
|
||||||
CONF_HOUR,
|
CONF_HOUR,
|
||||||
|
CONF_ID,
|
||||||
CONF_INITIAL_VALUE,
|
CONF_INITIAL_VALUE,
|
||||||
CONF_LAMBDA,
|
CONF_LAMBDA,
|
||||||
CONF_MINUTE,
|
CONF_MINUTE,
|
||||||
@@ -25,14 +26,23 @@ CODEOWNERS = ["@rfdarter"]
|
|||||||
TemplateDate = template_ns.class_(
|
TemplateDate = template_ns.class_(
|
||||||
"TemplateDate", datetime.DateEntity, cg.PollingComponent
|
"TemplateDate", datetime.DateEntity, cg.PollingComponent
|
||||||
)
|
)
|
||||||
|
StatelessTemplateDate = template_ns.class_(
|
||||||
|
"StatelessTemplateDate", datetime.DateEntity, cg.PollingComponent
|
||||||
|
)
|
||||||
|
|
||||||
TemplateTime = template_ns.class_(
|
TemplateTime = template_ns.class_(
|
||||||
"TemplateTime", datetime.TimeEntity, cg.PollingComponent
|
"TemplateTime", datetime.TimeEntity, cg.PollingComponent
|
||||||
)
|
)
|
||||||
|
StatelessTemplateTime = template_ns.class_(
|
||||||
|
"StatelessTemplateTime", datetime.TimeEntity, cg.PollingComponent
|
||||||
|
)
|
||||||
|
|
||||||
TemplateDateTime = template_ns.class_(
|
TemplateDateTime = template_ns.class_(
|
||||||
"TemplateDateTime", datetime.DateTimeEntity, cg.PollingComponent
|
"TemplateDateTime", datetime.DateTimeEntity, cg.PollingComponent
|
||||||
)
|
)
|
||||||
|
StatelessTemplateDateTime = template_ns.class_(
|
||||||
|
"StatelessTemplateDateTime", datetime.DateTimeEntity, cg.PollingComponent
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def validate(config):
|
def validate(config):
|
||||||
@@ -99,15 +109,30 @@ CONFIG_SCHEMA = cv.All(
|
|||||||
|
|
||||||
|
|
||||||
async def to_code(config):
|
async def to_code(config):
|
||||||
var = await datetime.new_datetime(config)
|
|
||||||
|
|
||||||
if CONF_LAMBDA in config:
|
if CONF_LAMBDA in config:
|
||||||
|
# Use new_lambda_pvariable to create either Template* or StatelessTemplate*
|
||||||
template_ = await cg.process_lambda(
|
template_ = await cg.process_lambda(
|
||||||
config[CONF_LAMBDA], [], return_type=cg.optional.template(cg.ESPTime)
|
config[CONF_LAMBDA], [], return_type=cg.optional.template(cg.ESPTime)
|
||||||
)
|
)
|
||||||
cg.add(var.set_template(template_))
|
# Determine the appropriate stateless class based on type
|
||||||
|
if config[CONF_TYPE] == "DATE":
|
||||||
|
stateless_class = StatelessTemplateDate
|
||||||
|
elif config[CONF_TYPE] == "TIME":
|
||||||
|
stateless_class = StatelessTemplateTime
|
||||||
|
else: # DATETIME
|
||||||
|
stateless_class = StatelessTemplateDateTime
|
||||||
|
|
||||||
|
var = automation.new_lambda_pvariable(
|
||||||
|
config[CONF_ID], template_, stateless_class
|
||||||
|
)
|
||||||
|
# Manually register as datetime since we didn't use new_datetime
|
||||||
|
await datetime.register_datetime(var, config)
|
||||||
|
await cg.register_component(var, config)
|
||||||
else:
|
else:
|
||||||
|
# No lambda - just create the base template datetime
|
||||||
|
var = await datetime.new_datetime(config)
|
||||||
|
await cg.register_component(var, config)
|
||||||
|
|
||||||
cg.add(var.set_optimistic(config[CONF_OPTIMISTIC]))
|
cg.add(var.set_optimistic(config[CONF_OPTIMISTIC]))
|
||||||
cg.add(var.set_restore_value(config[CONF_RESTORE_VALUE]))
|
cg.add(var.set_restore_value(config[CONF_RESTORE_VALUE]))
|
||||||
|
|
||||||
@@ -146,5 +171,3 @@ async def to_code(config):
|
|||||||
[(cg.ESPTime, "x")],
|
[(cg.ESPTime, "x")],
|
||||||
config[CONF_SET_ACTION],
|
config[CONF_SET_ACTION],
|
||||||
)
|
)
|
||||||
|
|
||||||
await cg.register_component(var, config)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user