1
0
mirror of https://github.com/esphome/esphome.git synced 2025-10-31 23:21:54 +00:00
This commit is contained in:
J. Nick Koston
2025-10-26 15:05:31 -07:00
parent 61796c672b
commit c061c9dbfe

View File

@@ -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)