Read the celebration payload from trigger.event.data
HA event triggers expose the payload as trigger.event.data, not trigger.payload; fix the blueprint, its tests, and the README examples, with a regression guard.
This commit is contained in:
@@ -60,7 +60,7 @@ triggers:
|
|||||||
event_type: nestquest_child_day_complete
|
event_type: nestquest_child_day_complete
|
||||||
conditions:
|
conditions:
|
||||||
- condition: template
|
- condition: template
|
||||||
value_template: "{{ trigger.payload.child_name == 'Declan' }}"
|
value_template: "{{ trigger.event.data.child_name == 'Declan' }}"
|
||||||
actions:
|
actions:
|
||||||
- action: notify.mobile_app_declans_phone
|
- action: notify.mobile_app_declans_phone
|
||||||
data:
|
data:
|
||||||
@@ -134,7 +134,7 @@ day-rollover time.
|
|||||||
# afternoon_reminder: afternoon_time 15:00, same notify target
|
# afternoon_reminder: afternoon_time 15:00, same notify target
|
||||||
# end_of_day_report: report_time 20:00, send_even_when_clear false, same target
|
# end_of_day_report: report_time 20:00, send_even_when_clear false, same target
|
||||||
# day_complete_celebration: input_text.nestquest_last_celebrated,
|
# day_complete_celebration: input_text.nestquest_last_celebrated,
|
||||||
# celebration_message "Legendary! {{ trigger.payload.child_name }} cleared every quest today!"
|
# celebration_message "Legendary! {{ trigger.event.data.child_name }} cleared every quest today!"
|
||||||
#
|
#
|
||||||
# Every blueprint has its own send/celebrate toggle input; turn an
|
# Every blueprint has its own send/celebrate toggle input; turn an
|
||||||
# automation off entirely from HA's automation menu.
|
# automation off entirely from HA's automation menu.
|
||||||
|
|||||||
@@ -34,9 +34,9 @@ blueprint:
|
|||||||
name: Celebration message
|
name: Celebration message
|
||||||
description: >-
|
description: >-
|
||||||
The message sent when a child clears every quest today. May
|
The message sent when a child clears every quest today. May
|
||||||
use the event payload: trigger.payload.child_name,
|
use the event payload: trigger.event.data.child_name,
|
||||||
trigger.payload.quests_due and trigger.payload.quests_completed.
|
trigger.event.data.quests_due and trigger.event.data.quests_completed.
|
||||||
default: "Legendary! {{ trigger.payload.child_name }} cleared every quest today!"
|
default: "Legendary! {{ trigger.event.data.child_name }} cleared every quest today!"
|
||||||
selector:
|
selector:
|
||||||
text: {}
|
text: {}
|
||||||
celebrate:
|
celebrate:
|
||||||
@@ -80,7 +80,7 @@ conditions:
|
|||||||
# reads as '' and celebrates.
|
# reads as '' and celebrates.
|
||||||
- condition: template
|
- condition: template
|
||||||
value_template: >-
|
value_template: >-
|
||||||
{{ (trigger.payload.child_id ~ ':' ~ now().strftime('%Y-%m-%d'))
|
{{ (trigger.event.data.child_id ~ ':' ~ now().strftime('%Y-%m-%d'))
|
||||||
not in ((states(last_celebrated_helper) or '')
|
not in ((states(last_celebrated_helper) or '')
|
||||||
.split(',')
|
.split(',')
|
||||||
| select('ne', '')
|
| select('ne', '')
|
||||||
@@ -106,4 +106,4 @@ actions:
|
|||||||
{%- set ns.entries = ns.entries + [entry] -%}
|
{%- set ns.entries = ns.entries + [entry] -%}
|
||||||
{%- endif -%}
|
{%- endif -%}
|
||||||
{%- endfor -%}
|
{%- endfor -%}
|
||||||
{{ (ns.entries + [trigger.payload.child_id ~ ':' ~ today]) | join(',') }}
|
{{ (ns.entries + [trigger.event.data.child_id ~ ':' ~ today]) | join(',') }}
|
||||||
@@ -65,14 +65,17 @@ def stamp_value_template(bp: dict) -> str:
|
|||||||
|
|
||||||
|
|
||||||
def trigger_payload(child_id: int, child_name: str) -> dict:
|
def trigger_payload(child_id: int, child_name: str) -> dict:
|
||||||
"""A nestquest_child_day_complete trigger payload fixture."""
|
"""A nestquest_child_day_complete trigger fixture: HA exposes an
|
||||||
|
event trigger's payload as trigger.event.data."""
|
||||||
return {
|
return {
|
||||||
"payload": {
|
"event": {
|
||||||
"child_id": child_id,
|
"data": {
|
||||||
"child_name": child_name,
|
"child_id": child_id,
|
||||||
"quests_due": 3,
|
"child_name": child_name,
|
||||||
"quests_completed": 3,
|
"quests_due": 3,
|
||||||
"occurred_at": "2026-09-19T15:00:00+00:00",
|
"quests_completed": 3,
|
||||||
|
"occurred_at": "2026-09-19T15:00:00+00:00",
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,3 +297,17 @@ def test_every_blueprint_event_reference_is_real() -> None:
|
|||||||
assert celebration()["triggers"][0]["event_type"] == (
|
assert celebration()["triggers"][0]["event_type"] == (
|
||||||
"nestquest_child_day_complete"
|
"nestquest_child_day_complete"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_celebration_uses_the_event_trigger_data_path() -> None:
|
||||||
|
"""HA exposes an event trigger's payload as trigger.event.data —
|
||||||
|
never trigger.payload (Codex review regression)."""
|
||||||
|
bp = celebration()
|
||||||
|
for value in iter_strings(bp):
|
||||||
|
assert "trigger.payload" not in value, value
|
||||||
|
default_message = bp["blueprint"]["input"]["celebration_message"][
|
||||||
|
"default"
|
||||||
|
]
|
||||||
|
assert "trigger.event.data.child_name" in default_message
|
||||||
|
for condition in celebration_conditions(bp):
|
||||||
|
assert "trigger.payload" not in condition["value_template"]
|
||||||
|
|||||||
Reference in New Issue
Block a user