77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
"""
|
|
Infrared component for ESPHome.
|
|
|
|
WARNING: This component is EXPERIMENTAL. The API (both Python configuration
|
|
and C++ interfaces) may change at any time without following the normal
|
|
breaking changes policy. Use at your own risk.
|
|
|
|
Once the API is considered stable, this warning will be removed.
|
|
"""
|
|
|
|
import esphome.codegen as cg
|
|
import esphome.config_validation as cv
|
|
from esphome.const import CONF_ID
|
|
from esphome.core import CORE, coroutine_with_priority
|
|
from esphome.core.entity_helpers import setup_entity
|
|
from esphome.coroutine import CoroPriority
|
|
from esphome.types import ConfigType
|
|
|
|
CODEOWNERS = ["@kbx81"]
|
|
AUTO_LOAD = ["remote_base"]
|
|
|
|
IS_PLATFORM_COMPONENT = True
|
|
|
|
infrared_ns = cg.esphome_ns.namespace("infrared")
|
|
Infrared = infrared_ns.class_("Infrared", cg.EntityBase, cg.Component)
|
|
InfraredCall = infrared_ns.class_("InfraredCall")
|
|
InfraredTraits = infrared_ns.class_("InfraredTraits")
|
|
|
|
CONF_INFRARED_ID = "infrared_id"
|
|
CONF_SUPPORTS_TRANSMITTER = "supports_transmitter"
|
|
CONF_SUPPORTS_RECEIVER = "supports_receiver"
|
|
|
|
|
|
def infrared_schema(class_: type[cg.MockObjClass]) -> cv.Schema:
|
|
"""Create a schema for an infrared platform.
|
|
|
|
:param class_: The infrared class to use for this schema.
|
|
:return: An extended schema for infrared configuration.
|
|
"""
|
|
entity_schema = cv.ENTITY_BASE_SCHEMA.extend(cv.COMPONENT_SCHEMA)
|
|
return entity_schema.extend(
|
|
{
|
|
cv.GenerateID(): cv.declare_id(class_),
|
|
}
|
|
)
|
|
|
|
|
|
@setup_entity("infrared")
|
|
async def setup_infrared_core_(var: cg.Pvariable, config: ConfigType) -> None:
|
|
"""Set up core infrared configuration."""
|
|
|
|
|
|
async def register_infrared(var: cg.Pvariable, config: ConfigType) -> None:
|
|
"""Register an infrared device with the core."""
|
|
cg.add_define("USE_IR_RF")
|
|
await cg.register_component(var, config)
|
|
await setup_infrared_core_(var, config)
|
|
cg.add(cg.App.register_infrared(var))
|
|
CORE.register_platform_component("infrared", var)
|
|
|
|
|
|
async def new_infrared(config: ConfigType, *args) -> cg.Pvariable:
|
|
"""Create a new Infrared instance.
|
|
|
|
:param config: Configuration dictionary.
|
|
:param args: Additional arguments to pass to new_Pvariable.
|
|
:return: The created Infrared instance.
|
|
"""
|
|
var = cg.new_Pvariable(config[CONF_ID], *args)
|
|
await register_infrared(var, config)
|
|
return var
|
|
|
|
|
|
@coroutine_with_priority(CoroPriority.CORE)
|
|
async def to_code(config: ConfigType) -> None:
|
|
cg.add_global(infrared_ns.using)
|