From 7f46d9e0f976d20e881e80bb90280cb4f7c9fb4f Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 23 Feb 2023 13:38:45 +1300 Subject: [PATCH] Fix multiple remote_receivers with triggers (#4477) --- esphome/components/remote_base/__init__.py | 9 ++++++--- esphome/components/remote_receiver/__init__.py | 4 +++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/esphome/components/remote_base/__init__.py b/esphome/components/remote_base/__init__.py index c3149ce430..c5c8921e20 100644 --- a/esphome/components/remote_base/__init__.py +++ b/esphome/components/remote_base/__init__.py @@ -79,7 +79,9 @@ def register_trigger(name, type, data_type): validator = automation.validate_automation( { cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(type), - cv.GenerateID(CONF_RECEIVER_ID): cv.use_id(RemoteReceiverBase), + cv.Optional(CONF_RECEIVER_ID): cv.invalid( + "This has been removed in ESPHome 2022.3.0 and the trigger attaches directly to the parent receiver." + ), } ) registerer = TRIGGER_REGISTRY.register(f"on_{name}", validator) @@ -87,7 +89,6 @@ def register_trigger(name, type, data_type): def decorator(func): async def new_func(config): var = cg.new_Pvariable(config[CONF_TRIGGER_ID]) - await register_listener(var, config) await coroutine(func)(var, config) await automation.build_automation(var, [(data_type, "x")], config) return var @@ -223,10 +224,12 @@ async def build_binary_sensor(full_config): async def build_triggers(full_config): + triggers = [] for key in TRIGGER_REGISTRY: for config in full_config.get(key, []): func = TRIGGER_REGISTRY[key][0] - await func(config) + triggers.append(await func(config)) + return triggers async def build_dumpers(config): diff --git a/esphome/components/remote_receiver/__init__.py b/esphome/components/remote_receiver/__init__.py index 253204bd1a..1ed9161ec7 100644 --- a/esphome/components/remote_receiver/__init__.py +++ b/esphome/components/remote_receiver/__init__.py @@ -56,7 +56,9 @@ async def to_code(config): for dumper in dumpers: cg.add(var.register_dumper(dumper)) - await remote_base.build_triggers(config) + triggers = await remote_base.build_triggers(config) + for trigger in triggers: + cg.add(var.register_listener(trigger)) await cg.register_component(var, config) cg.add(var.set_tolerance(config[CONF_TOLERANCE]))