New apps Added
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
"""Purpose-specific triggers for the HA automation editor (2026.7+).
|
||||
|
||||
HA 2026.7 made intent-based ("purpose-specific") triggers the default
|
||||
automation UI, and they are extensible by integrations: this module
|
||||
contributes building blocks like *"A maintenance task became overdue"* so
|
||||
users never have to know our entity naming or bus-event names.
|
||||
|
||||
The triggers are state-based on the per-task ENUM sensors
|
||||
(``ok / due_soon / overdue / triggered / archived``). ``triggers.yaml``
|
||||
narrows the UI entity picker to this integration's sensors; at runtime the
|
||||
DomainSpec matches ENUM sensors within the chosen target (our task sensors
|
||||
are the only ENUM entities this integration provides — the summary and
|
||||
document-storage sensors carry different device classes).
|
||||
|
||||
Compatibility: cores as old as our 2025.7 minimum DO import this module at
|
||||
component load (trigger platforms are processed eagerly), but the intent
|
||||
framework's building blocks (``helpers.automation.DomainSpec``, the trigger
|
||||
factories) only exist on recent cores — hence the import guard, which turns
|
||||
this module into a no-op (zero registered triggers) instead of a logged
|
||||
ImportError on every boot.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from .const import MaintenanceStatus
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from homeassistant.helpers.trigger import Trigger
|
||||
|
||||
try: # pragma: no cover - exercised only on cores without the framework
|
||||
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
||||
from homeassistant.components.sensor import SensorDeviceClass
|
||||
from homeassistant.helpers.automation import DomainSpec
|
||||
from homeassistant.helpers.trigger import make_entity_target_state_trigger
|
||||
except ImportError: # pragma: no cover - only on cores without the framework
|
||||
TRIGGERS: dict[str, type[Trigger]] = {}
|
||||
else:
|
||||
_TASK_SENSOR_SPECS: dict[str, DomainSpec] = {
|
||||
SENSOR_DOMAIN: DomainSpec(device_class=SensorDeviceClass.ENUM),
|
||||
}
|
||||
|
||||
TRIGGERS = {
|
||||
"task_became_overdue": make_entity_target_state_trigger(_TASK_SENSOR_SPECS, MaintenanceStatus.OVERDUE),
|
||||
"task_became_due_soon": make_entity_target_state_trigger(_TASK_SENSOR_SPECS, MaintenanceStatus.DUE_SOON),
|
||||
"sensor_trigger_activated": make_entity_target_state_trigger(_TASK_SENSOR_SPECS, MaintenanceStatus.TRIGGERED),
|
||||
"task_became_ok": make_entity_target_state_trigger(_TASK_SENSOR_SPECS, MaintenanceStatus.OK),
|
||||
}
|
||||
|
||||
|
||||
async def async_get_triggers(hass: HomeAssistant) -> dict[str, type[Trigger]]:
|
||||
"""Return the triggers for maintenance tasks."""
|
||||
return TRIGGERS
|
||||
Reference in New Issue
Block a user