Fix HKC device triggers (#75371)
parent
219d1a8a1e
commit
630f731020
|
@ -16,7 +16,7 @@ from homeassistant.components.automation import (
|
||||||
)
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.const import CONF_DEVICE_ID, CONF_DOMAIN, CONF_PLATFORM, CONF_TYPE
|
from homeassistant.const import CONF_DEVICE_ID, CONF_DOMAIN, CONF_PLATFORM, CONF_TYPE
|
||||||
from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback
|
from homeassistant.core import CALLBACK_TYPE, HassJob, HomeAssistant, callback
|
||||||
from homeassistant.helpers.typing import ConfigType
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
from .const import DOMAIN, KNOWN_DEVICES, TRIGGERS
|
from .const import DOMAIN, KNOWN_DEVICES, TRIGGERS
|
||||||
|
@ -86,13 +86,13 @@ class TriggerSource:
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
trigger_data = automation_info["trigger_data"]
|
trigger_data = automation_info["trigger_data"]
|
||||||
|
job = HassJob(action)
|
||||||
|
|
||||||
|
@callback
|
||||||
def event_handler(char):
|
def event_handler(char):
|
||||||
if config[CONF_SUBTYPE] != HK_TO_HA_INPUT_EVENT_VALUES[char["value"]]:
|
if config[CONF_SUBTYPE] != HK_TO_HA_INPUT_EVENT_VALUES[char["value"]]:
|
||||||
return
|
return
|
||||||
self._hass.async_create_task(
|
self._hass.async_run_hass_job(job, {"trigger": {**trigger_data, **config}})
|
||||||
action({"trigger": {**trigger_data, **config}})
|
|
||||||
)
|
|
||||||
|
|
||||||
trigger = self._triggers[config[CONF_TYPE], config[CONF_SUBTYPE]]
|
trigger = self._triggers[config[CONF_TYPE], config[CONF_SUBTYPE]]
|
||||||
iid = trigger["characteristic"]
|
iid = trigger["characteristic"]
|
||||||
|
@ -231,11 +231,11 @@ async def async_setup_triggers_for_entry(hass: HomeAssistant, config_entry):
|
||||||
|
|
||||||
def async_fire_triggers(conn: HKDevice, events: dict[tuple[int, int], Any]):
|
def async_fire_triggers(conn: HKDevice, events: dict[tuple[int, int], Any]):
|
||||||
"""Process events generated by a HomeKit accessory into automation triggers."""
|
"""Process events generated by a HomeKit accessory into automation triggers."""
|
||||||
|
trigger_sources: dict[str, TriggerSource] = conn.hass.data[TRIGGERS]
|
||||||
for (aid, iid), ev in events.items():
|
for (aid, iid), ev in events.items():
|
||||||
if aid in conn.devices:
|
if aid in conn.devices:
|
||||||
device_id = conn.devices[aid]
|
device_id = conn.devices[aid]
|
||||||
if device_id in conn.hass.data[TRIGGERS]:
|
if source := trigger_sources.get(device_id):
|
||||||
source = conn.hass.data[TRIGGERS][device_id]
|
|
||||||
source.fire(iid, ev)
|
source.fire(iid, ev)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue