KeyError: ' triggers' after upgrading to 2026.4.1

Greetings all,

I’m running HAOS 2026.3.4. When i perform an upgrade to 2026.4.1, my ha core check command throws this error: KeyError: ‘triggers’.

I’ve grepped through al the files but can’t find a reference to it.

I’ve tried saving my automations through the UI again, hoping it will auto correct. No succes.

Can someone help me to perform the upgrade again, but without errors?

Many thanks in advance.

Pre-upgrade: the command “ha core check” runs perfectly fine.
Post-upgrade: This error.

I’m getting the same error today.

Might want to post this here or add an issue: 2026.4: Infrared never left the chat

Post the error from the log please, not your abridged version.

1 Like

Pre update:

[core-ssh ~]$ ha core check
Processing… Done.

Command completed successfully.

Post update:

[core-ssh ~]$ ha core check
Processing… Done.

Error: Testing configuration at /config

ERROR:homeassistant.helpers.check_config:Unexpected error validating config

Traceback (most recent call last):

File “/usr/src/homeassistant/homeassistant/helpers/check_config.py”, line 217, in async_check_ha_config_file

await config_validator.async_validate_config(hass, config)

File “/usr/src/homeassistant/homeassistant/components/automation/config.py”, line 328, in async_validate_config

await _try_async_validate_config_item(hass, p_config)

File “/usr/src/homeassistant/homeassistant/components/automation/config.py”, line 306, in _try_async_validate_config_item

return await _async_validate_config_item(hass, config, False, True)

       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File “/usr/src/homeassistant/homeassistant/components/automation/config.py”, line 220, in _async_validate_config_item

automation_config[CONF_TRIGGERS] = await async_validate_trigger_config(

                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    hass, validated_config[CONF_TRIGGERS]

    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

)

^

File “/usr/src/homeassistant/homeassistant/helpers/trigger.py”, line 1212, in async_validate_trigger_config

platform_domain, platform = await _async_get_trigger_platform(hass, trigger_key)

                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File “/usr/src/homeassistant/homeassistant/helpers/trigger.py”, line 1200, in _async_get_trigger_platform

await _register_trigger_platform(hass, platform, platform_module)

File “/usr/src/homeassistant/homeassistant/helpers/trigger.py”, line 205, in _register_trigger_platform

triggers = hass.data[TRIGGERS]

           ~~~~~~~~~^^^^^^^^^^

KeyError: ‘triggers’

Failed config

automation:

- Unexpected error calling config validator: 'triggers'

- [{'id': '1772958162883', 'alias': 'Droger Automatisch Uitschakelen', 'mode': 'single', 'triggers': [{'platform': 'numeric_state', 'entity_id': 'sensor.droogtrommel_vermogen', 'above': 10, 'id': 'gestart', 'for': '00:01:00'}, {'platform': 'numeric_state', 'entity_id': 'sensor.droogtrommel_vermogen', 'below': 4, 'id': 'klaar', 'for': '00:05:00'}], 'actions': [{'choose': [{'conditions': [{'condition': 'trigger', 'id': 'gestart'}, {'condition': 'state', 'entity_id': 'switch.droogtrommel', 'state': 'on'}], 'sequence': [{'target': {'entity_id': 'input_boolean.droger_actief'}, 'action': 'input_boolean.turn_on'}]}, {'conditions': [{'condition': 'trigger', 'id': 'klaar'}, {'condition': 'state', 'entity_id': 'input_boolean.droger_actief', 'state': 'on'}, {'condition': 'state', 'entity_id': 'switch.droogtrommel', 'state': 'on'}], 'sequence': [{'target': {'entity_id': 'switch.droogtrommel'}, 'action': 'switch.turn_off'}, {'target': {'entity_id': 'input_boolean.droger_actief'}, 'action': 'input_boolean.turn_off'}, {'data': {'title': 'Droger klaar!', 'message': 'De droger is klaar.'}, 'action': 'notify.familie'}]}]}], 'conditions': []}, {'id': '1772960697194', 'alias': 'Wasmachine Automatisch Uitschakelen', 'trigger': [{'platform': 'numeric_state', 'entity_id': 'sensor.wasmachine_vermogen', 'above': 10, 'id': 'gestart', 'for': '00:01:00'}, {'platform': 'numeric_state', 'entity_id': 'sensor.wasmachine_vermogen', 'below': 4, 'id': 'klaar', 'for': '00:00:15'}], 'condition': [], 'action': [{'choose': [{'conditions': [{'condition': 'trigger', 'id': 'gestart'}, {'condition': 'state', 'entity_id': 'switch.wasmachine', 'state': 'on'}], 'sequence': [{'service': 'input_boolean.turn_on', 'target': {'entity_id': 'input_boolean.wasmachine_actief'}}]}, {'conditions': [{'condition': 'trigger', 'id': 'klaar'}, {'condition': 'state', 'entity_id': 'input_boolean.wasmachine_actief', 'state': 'on'}, {'condition': 'state', 'entity_id': 'switch.wasmachine', 'state': 'on'}], 'sequence': [{'service': 'switch.turn_off', 'target': {'entity_id': 'switch.wasmachine'}}, {'service': 'input_boolean.turn_off', 'target': {'entity_id': 'input_boolean.wasmachine_actief'}}, {'service': 'notify.familie', 'data': {'title': 'Wasmachine klaar!', 'message': 'De wasmachine is klaar.'}}]}]}], 'mode': 'single'}, {'id': '1773838684136', 'alias': 'Presence verlichting + SONOS + weltrusten', 'triggers': [{'entity_id': ['person.leslie_de_groot', 'person.esther_de_groot'], 'from': 'not_home', 'to': 'home', 'id': 'thuis', 'trigger': 'state'}, {'entity_id': ['person.leslie_de_groot', 'person.esther_de_groot'], 'from': 'home', 'to': 'not_home', 'for': '00:00:15', 'id': 'weg', 'trigger': 'state'}, {'at': '03:00:00', 'id': 'nacht', 'trigger': 'time'}], 'conditions': [], 'actions': [{'choose': [{'conditions': [{'condition': 'trigger', 'id': 'thuis'}, {'condition': 'template', 'value_template': "{{ states.person\n   | selectattr('state', 'eq', 'home')\n   | list\n   | count == 1 }}\n"}], 'sequence': [{'if': [{'condition': 'state', 'entity_id': 'light.woonkamer', 'state': 'off'}], 'then': [{'data': {'group_name': 'Woonkamer', 'scene_name': 'filament'}, 'action': 'hue.hue_activate_scene'}]}, {'target': {'entity_id': ['media_player.keuken_wsb', 'media_player.slaapkamer_wsb', 'media_player.woonkamer_wsb']}, 'data': {'volume_level': 0.3}, 'action': 'media_player.volume_set'}, {'if': [{'condition': 'template', 'value_template': "{{ not is_state_attr('media_player.woonkamer_wsb', 'group_members', ['media_player.keuken_wsb','media_player.dressoir_wsb']) }}\n"}], 'then': [{'target': {'entity_id': 'media_player.woonkamer_wsb'}, 'data': {'group_members': ['media_player.keuken_wsb']}, 'action': 'media_player.join'}]}]}, {'conditions': [{'condition': 'trigger', 'id': 'weg'}, {'condition': 'template', 'value_template': "{{ states.person\n   | selectattr('state', 'eq', 'home')\n   | list\n   | count == 0 }}\n"}], 'sequence': [{'target': {'entity_id': ['light.woonkamer', 'light.slaapkamer']}, 'action': 'light.turn_off'}, {'target': {'device_id': ['28b41e081520c3bb215ceddcca86d864', 'fda4c14be16f4a32a303fd84d03be43f']}, 'action': 'remote.turn_off'}, {'target': {'entity_id': 'media_player.lg_webos_tv_2'}, 'action': 'media_player.turn_off'}, {'target': {'entity_id': ['media_player.keuken_wsb', 'media_player.slaapkamer_wsb', 'media_player.woonkamer_wsb']}, 'action': 'media_player.media_stop', 'data': {}}]}, {'conditions': [{'condition': 'trigger', 'id': 'nacht'}], 'sequence': [{'target': {'entity_id': ['light.woonkamer', 'light.slaapkamer']}, 'action': 'light.turn_off'}, {'target': {'entity_id': 'media_player.lg_webos_tv_2'}, 'action': 'media_player.turn_off'}, {'target': {'entity_id': ['media_player.keuken_wsb', 'media_player.slaapkamer_wsb', 'media_player.woonkamer_wsb']}, 'action': 'media_player.media_stop', 'data': {}}]}]}], 'mode': 'single'}, {'id': '1775214060676', 'alias': 'Gang Motion', 'use_blueprint': {'path': 'motion/motion_light.yaml', 'input': {'motion_sensor': 'binary_sensor.gang_motion_sensor_beweging', 'light_target': {'entity_id': 'light.gang'}, 'ruimte_naam': 'Gang', 'master_switch': 'input_boolean.gang_motion_master_switch'}}}, {'id': '1775214624881', 'alias': 'Wasruimte motion', 'use_blueprint': {'path': 'motion/motion_light.yaml', 'input': {'motion_sensor': 'binary_sensor.wasruimte_beweging_2', 'light_target': {'entity_id': 'light.wasruimte_2'}, 'ruimte_naam': 'Wasruimte', 'master_switch': 'input_boolean.wasruimte_motion_master_switch', 'sleep_enabled': False}}}, {'id': '1775218740871', 'alias': 'Batterij meldingen PRO', 'triggers': [{'entity_id': ['sensor.wasruimte_batterij', 'sensor.eettafel_schakelaar_batterij', 'sensor.woonkamer_buitendeur_batterij', 'sensor.woonkamer_intercom_batterij', 'sensor.leslie_schakelaar_batterij', 'sensor.keuken_schakelaar_batterij', 'sensor.gang_motion_sensor_batterij', 'sensor.esther_schakelaar_batterij'], 'trigger': 'state'}], 'conditions': [{'condition': 'template', 'value_template': "{{ trigger.to_state is not none and\n   trigger.to_state.state not in ['unknown','unavailable','none'] }}\n"}, {'condition': 'template', 'value_template': '{{ this.attributes.last_triggered is none or\n   (now() - this.attributes.last_triggered).total_seconds() > 86400 }}\n'}], 'actions': [{'variables': {'kritisch': "{% set ns = namespace(v=[]) %} {% for e in [\n  'sensor.wasruimte_batterij',\n  'sensor.eettafel_schakelaar_batterij',\n  'sensor.woonkamer_buitendeur_batterij',\n  'sensor.woonkamer_intercom_batterij',\n  'sensor.leslie_schakelaar_batterij',\n  'sensor.keuken_schakelaar_batterij',\n  'sensor.gang_motion_sensor_batterij',\n  'sensor.esther_schakelaar_batterij'\n] %} {% set val = states(e) | replace('%','') | float(100) %} {% if val <= 10 %}\n  {% set ns.v = ns.v + [(state_attr(e,'friendly_name') or e) ~ ' (' ~ (val|int) ~ '%)'] %}\n{% endif %} {% endfor %} {{ ns.v }}\n", 'laag': "{% set ns = namespace(v=[]) %} {% for e in [\n  'sensor.wasruimte_batterij',\n  'sensor.eettafel_schakelaar_batterij',\n  'sensor.woonkamer_buitendeur_batterij',\n  'sensor.woonkamer_intercom_batterij',\n  'sensor.leslie_schakelaar_batterij',\n  'sensor.keuken_schakelaar_batterij',\n  'sensor.gang_motion_sensor_batterij',\n  'sensor.esther_schakelaar_batterij'\n] %} {% set val = states(e) | replace('%','') | float(100) %} {% if val > 10 and val <= 15 %}\n  {% set ns.v = ns.v + [(state_attr(e,'friendly_name') or e) ~ ' (' ~ (val|int) ~ '%)'] %}\n{% endif %} {% endfor %} {{ ns.v }}\n"}}, {'choose': [{'conditions': [{'condition': 'template', 'value_template': '{{ kritisch | count > 0 }}'}], 'sequence': [{'data': {'title': '🔴 Batterijen kritiek', 'message': "- {{ kritisch | join('\\n- ') }}\n"}, 'action': 'notify.familie'}]}, {'conditions': [{'condition': 'template', 'value_template': '{{ laag | count > 0 }}'}], 'sequence': [{'data': {'title': '🟠 Batterijen laag', 'message': "- {{ laag | join('\\n- ') }}\n"}, 'action': 'notify.familie'}]}]}], 'mode': 'single'}]

Successful config (partial)

automation:

And this one:

Logger: py.warnings
Bron: components/image/init.py:16
Eerst voorgekomen: 10:48:23 (1 gebeurtenis)
Laatst gelogd: 10:48:23

/usr/local/lib/python3.14/site-packages/rich/segment.py:547: SyntaxWarning: ‘return’ in a ‘finally’ block return

It looks like you have been editing your automation file manually and failed

to expand on @Hellis81’s comment, your 2nd automation isn’t properly formatted for UI use, it’s formatted for yaml use. The automation itself looks fine but it should have been updated to the new keys, which would have been automatic if you saved the automation from the UI.

You can likely rectify this by just changing trigger: to triggers: in your 2nd automation.

Regardless, there does seem to be a bug somewhere because the legacy keys should still work or should be translated to the new keys under the hood.

I’ve re-saved all the automations in the UI. Same error persists.

I’m not as knowledgeable as Petro. But something tells me the issue is at the line before triggers:.

If you have access to the automations.yaml file then open it and search for triggers: and check the line above which should be the end of the previous automation.
What I expect you will find is in some automation the actions: has been deleted which means you will see a pattern like this:

triggers:
...
...
conditions:
..
actions:
...
...
triggers:
...
...
conditions:
..
triggers:         # note here the missing action above.
...
...
conditions:
..
actions:
...

Did you change the fields I suggested?

I’ll try this right now.

Pre upgrade

[core-ssh ~]$ ha core restart && ha core check
Processing... Done.

Command completed successfully.
Processing... Done.

Command completed successfully.
[core-ssh ~]$ ha core update
Processing... Done.

Command completed successfully.

I’ve tried another check, just in case:

[core-ssh ~]$ ha core restart && ha core check
Processing... Done.

Command completed successfully.
Processing... Done.

Error: Testing configuration at /config

ERROR:homeassistant.helpers.check_config:Unexpected error validating config

Traceback (most recent call last):

  File "/usr/src/homeassistant/homeassistant/helpers/check_config.py", line 217, in async_check_ha_config_file

    await config_validator.async_validate_config(hass, config)

  File "/usr/src/homeassistant/homeassistant/components/automation/config.py", line 328, in async_validate_config

    await _try_async_validate_config_item(hass, p_config)

  File "/usr/src/homeassistant/homeassistant/components/automation/config.py", line 306, in _try_async_validate_config_item

    return await _async_validate_config_item(hass, config, False, True)

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/src/homeassistant/homeassistant/components/automation/config.py", line 220, in _async_validate_config_item

    automation_config[CONF_TRIGGERS] = await async_validate_trigger_config(

                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        hass, validated_config[CONF_TRIGGERS]

        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    )

    ^

  File "/usr/src/homeassistant/homeassistant/helpers/trigger.py", line 1212, in async_validate_trigger_config

    platform_domain, platform = await _async_get_trigger_platform(hass, trigger_key)

                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/src/homeassistant/homeassistant/helpers/trigger.py", line 1200, in _async_get_trigger_platform

    await _register_trigger_platform(hass, platform, platform_module)

  File "/usr/src/homeassistant/homeassistant/helpers/trigger.py", line 205, in _register_trigger_platform

    triggers = hass.data[TRIGGERS]

               ~~~~~~~~~^^^^^^^^^^

KeyError: 'triggers'

Failed config

  automation: 

    - Unexpected error calling config validator: 'triggers'

    - [{'id': '1772958162883', 'alias': 'Droger Automatisch Uitschakelen', 'mode': 'single', 'triggers': [{'platform': 'numeric_state', 'entity_id': 'sensor.droogtrommel_vermogen', 'above': 10, 'id': 'gestart', 'for': '00:01:00'}, {'platform': 'numeric_state', 'entity_id': 'sensor.droogtrommel_vermogen', 'below': 4, 'id': 'klaar', 'for': '00:05:00'}], 'actions': [{'choose': [{'conditions': [{'condition': 'trigger', 'id': 'gestart'}, {'condition': 'state', 'entity_id': 'switch.droogtrommel', 'state': 'on'}], 'sequence': [{'target': {'entity_id': 'input_boolean.droger_actief'}, 'action': 'input_boolean.turn_on'}]}, {'conditions': [{'condition': 'trigger', 'id': 'klaar'}, {'condition': 'state', 'entity_id': 'input_boolean.droger_actief', 'state': 'on'}, {'condition': 'state', 'entity_id': 'switch.droogtrommel', 'state': 'on'}], 'sequence': [{'target': {'entity_id': 'switch.droogtrommel'}, 'action': 'switch.turn_off'}, {'target': {'entity_id': 'input_boolean.droger_actief'}, 'action': 'input_boolean.turn_off'}, {'data': {'title': 'Droger klaar!', 'message': 'De droger is klaar.'}, 'action': 'notify.familie'}]}]}], 'conditions': []}, {'id': '1772960697194', 'alias': 'Wasmachine Automatisch Uitschakelen', 'trigger': [{'platform': 'numeric_state', 'entity_id': 'sensor.wasmachine_vermogen', 'above': 10, 'id': 'gestart', 'for': '00:01:00'}, {'platform': 'numeric_state', 'entity_id': 'sensor.wasmachine_vermogen', 'below': 4, 'id': 'klaar', 'for': '00:00:15'}], 'condition': [], 'action': [{'choose': [{'conditions': [{'condition': 'trigger', 'id': 'gestart'}, {'condition': 'state', 'entity_id': 'switch.wasmachine', 'state': 'on'}], 'sequence': [{'service': 'input_boolean.turn_on', 'target': {'entity_id': 'input_boolean.wasmachine_actief'}}]}, {'conditions': [{'condition': 'trigger', 'id': 'klaar'}, {'condition': 'state', 'entity_id': 'input_boolean.wasmachine_actief', 'state': 'on'}, {'condition': 'state', 'entity_id': 'switch.wasmachine', 'state': 'on'}], 'sequence': [{'service': 'switch.turn_off', 'target': {'entity_id': 'switch.wasmachine'}}, {'service': 'input_boolean.turn_off', 'target': {'entity_id': 'input_boolean.wasmachine_actief'}}, {'service': 'notify.familie', 'data': {'title': 'Wasmachine klaar!', 'message': 'De wasmachine is klaar.'}}]}]}], 'mode': 'single'}, {'id': '1773838684136', 'alias': 'Presence verlichting + SONOS + weltrusten', 'triggers': [{'entity_id': ['person.leslie_de_groot', 'person.esther_de_groot'], 'from': 'not_home', 'to': 'home', 'id': 'thuis', 'trigger': 'state'}, {'entity_id': ['person.leslie_de_groot', 'person.esther_de_groot'], 'from': 'home', 'to': 'not_home', 'for': '00:00:15', 'id': 'weg', 'trigger': 'state'}, {'at': '03:00:00', 'id': 'nacht', 'trigger': 'time'}], 'conditions': [], 'actions': [{'choose': [{'conditions': [{'condition': 'trigger', 'id': 'thuis'}, {'condition': 'template', 'value_template': "{{ states.person\n   | selectattr('state', 'eq', 'home')\n   | list\n   | count == 1 }}\n"}], 'sequence': [{'if': [{'condition': 'state', 'entity_id': 'light.woonkamer', 'state': 'off'}], 'then': [{'data': {'group_name': 'Woonkamer', 'scene_name': 'filament'}, 'action': 'hue.hue_activate_scene'}]}, {'target': {'entity_id': ['media_player.keuken_wsb', 'media_player.slaapkamer_wsb', 'media_player.woonkamer_wsb']}, 'data': {'volume_level': 0.3}, 'action': 'media_player.volume_set'}, {'if': [{'condition': 'template', 'value_template': "{{ not is_state_attr('media_player.woonkamer_wsb', 'group_members', ['media_player.keuken_wsb','media_player.dressoir_wsb']) }}\n"}], 'then': [{'target': {'entity_id': 'media_player.woonkamer_wsb'}, 'data': {'group_members': ['media_player.keuken_wsb']}, 'action': 'media_player.join'}]}]}, {'conditions': [{'condition': 'trigger', 'id': 'weg'}, {'condition': 'template', 'value_template': "{{ states.person\n   | selectattr('state', 'eq', 'home')\n   | list\n   | count == 0 }}\n"}], 'sequence': [{'target': {'entity_id': ['light.woonkamer', 'light.slaapkamer']}, 'action': 'light.turn_off'}, {'target': {'device_id': ['28b41e081520c3bb215ceddcca86d864', 'fda4c14be16f4a32a303fd84d03be43f']}, 'action': 'remote.turn_off'}, {'target': {'entity_id': 'media_player.lg_webos_tv_2'}, 'action': 'media_player.turn_off'}, {'target': {'entity_id': ['media_player.keuken_wsb', 'media_player.slaapkamer_wsb', 'media_player.woonkamer_wsb']}, 'action': 'media_player.media_stop', 'data': {}}]}, {'conditions': [{'condition': 'trigger', 'id': 'nacht'}], 'sequence': [{'target': {'entity_id': ['light.woonkamer', 'light.slaapkamer']}, 'action': 'light.turn_off'}, {'target': {'entity_id': 'media_player.lg_webos_tv_2'}, 'action': 'media_player.turn_off'}, {'target': {'entity_id': ['media_player.keuken_wsb', 'media_player.slaapkamer_wsb', 'media_player.woonkamer_wsb']}, 'action': 'media_player.media_stop', 'data': {}}]}]}], 'mode': 'single'}, {'id': '1775214060676', 'alias': 'Gang Motion', 'use_blueprint': {'path': 'motion/motion_light.yaml', 'input': {'motion_sensor': 'binary_sensor.gang_motion_sensor_beweging', 'light_target': {'entity_id': 'light.gang'}, 'ruimte_naam': 'Gang', 'master_switch': 'input_boolean.gang_motion_master_switch'}}}, {'id': '1775214624881', 'alias': 'Wasruimte motion', 'use_blueprint': {'path': 'motion/motion_light.yaml', 'input': {'motion_sensor': 'binary_sensor.wasruimte_beweging_2', 'light_target': {'entity_id': 'light.wasruimte_2'}, 'ruimte_naam': 'Wasruimte', 'master_switch': 'input_boolean.wasruimte_motion_master_switch', 'sleep_enabled': False}}}, {'id': '1775218740871', 'alias': 'Batterij meldingen PRO', 'triggers': [{'entity_id': ['sensor.wasruimte_batterij', 'sensor.eettafel_schakelaar_batterij', 'sensor.woonkamer_buitendeur_batterij', 'sensor.woonkamer_intercom_batterij', 'sensor.leslie_schakelaar_batterij', 'sensor.keuken_schakelaar_batterij', 'sensor.gang_motion_sensor_batterij', 'sensor.esther_schakelaar_batterij'], 'trigger': 'state'}], 'conditions': [{'condition': 'template', 'value_template': "{{ trigger.to_state is not none and\n   trigger.to_state.state not in ['unknown','unavailable','none'] }}\n"}, {'condition': 'template', 'value_template': '{{ this.attributes.last_triggered is none or\n   (now() - this.attributes.last_triggered).total_seconds() > 86400 }}\n'}], 'actions': [{'variables': {'kritisch': "{% set ns = namespace(v=[]) %} {% for e in [\n  'sensor.wasruimte_batterij',\n  'sensor.eettafel_schakelaar_batterij',\n  'sensor.woonkamer_buitendeur_batterij',\n  'sensor.woonkamer_intercom_batterij',\n  'sensor.leslie_schakelaar_batterij',\n  'sensor.keuken_schakelaar_batterij',\n  'sensor.gang_motion_sensor_batterij',\n  'sensor.esther_schakelaar_batterij'\n] %} {% set val = states(e) | replace('%','') | float(100) %} {% if val <= 10 %}\n  {% set ns.v = ns.v + [(state_attr(e,'friendly_name') or e) ~ ' (' ~ (val|int) ~ '%)'] %}\n{% endif %} {% endfor %} {{ ns.v }}\n", 'laag': "{% set ns = namespace(v=[]) %} {% for e in [\n  'sensor.wasruimte_batterij',\n  'sensor.eettafel_schakelaar_batterij',\n  'sensor.woonkamer_buitendeur_batterij',\n  'sensor.woonkamer_intercom_batterij',\n  'sensor.leslie_schakelaar_batterij',\n  'sensor.keuken_schakelaar_batterij',\n  'sensor.gang_motion_sensor_batterij',\n  'sensor.esther_schakelaar_batterij'\n] %} {% set val = states(e) | replace('%','') | float(100) %} {% if val > 10 and val <= 15 %}\n  {% set ns.v = ns.v + [(state_attr(e,'friendly_name') or e) ~ ' (' ~ (val|int) ~ '%)'] %}\n{% endif %} {% endfor %} {{ ns.v }}\n"}}, {'choose': [{'conditions': [{'condition': 'template', 'value_template': '{{ kritisch | count > 0 }}'}], 'sequence': [{'data': {'title': '🔴 Batterijen kritiek', 'message': "- {{ kritisch | join('\\n- ') }}\n"}, 'action': 'notify.familie'}]}, {'conditions': [{'condition': 'template', 'value_template': '{{ laag | count > 0 }}'}], 'sequence': [{'data': {'title': '🟠 Batterijen laag', 'message': "- {{ laag | join('\\n- ') }}\n"}, 'action': 'notify.familie'}]}]}], 'mode': 'single'}]



Successful config (partial)

  automation:

I will try to fix it by using the advice from @petro

[core-ssh ~]$ ha core restart && ha core check
Processing... Done.

Command completed successfully.
Processing... Done.

Error: Testing configuration at /config

ERROR:homeassistant.helpers.check_config:Unexpected error validating config

Traceback (most recent call last):

  File "/usr/src/homeassistant/homeassistant/helpers/check_config.py", line 217, in async_check_ha_config_file

    await config_validator.async_validate_config(hass, config)

  File "/usr/src/homeassistant/homeassistant/components/automation/config.py", line 328, in async_validate_config

    await _try_async_validate_config_item(hass, p_config)

  File "/usr/src/homeassistant/homeassistant/components/automation/config.py", line 306, in _try_async_validate_config_item

    return await _async_validate_config_item(hass, config, False, True)

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/src/homeassistant/homeassistant/components/automation/config.py", line 220, in _async_validate_config_item

    automation_config[CONF_TRIGGERS] = await async_validate_trigger_config(

                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        hass, validated_config[CONF_TRIGGERS]

        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    )

    ^

  File "/usr/src/homeassistant/homeassistant/helpers/trigger.py", line 1212, in async_validate_trigger_config

    platform_domain, platform = await _async_get_trigger_platform(hass, trigger_key)

                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/src/homeassistant/homeassistant/helpers/trigger.py", line 1200, in _async_get_trigger_platform

    await _register_trigger_platform(hass, platform, platform_module)

  File "/usr/src/homeassistant/homeassistant/helpers/trigger.py", line 205, in _register_trigger_platform

    triggers = hass.data[TRIGGERS]

               ~~~~~~~~~^^^^^^^^^^

KeyError: 'triggers'

Failed config

  automation: 

    - Unexpected error calling config validator: 'triggers'

    - [{'id': '1772958162883', 'alias': 'Droger Automatisch Uitschakelen', 'triggers': [{'platform': 'numeric_state', 'entity_id': 'sensor.droogtrommel_vermogen', 'above': 10, 'id': 'gestart', 'for': '00:01:00'}, {'platform': 'numeric_state', 'entity_id': 'sensor.droogtrommel_vermogen', 'below': 4, 'id': 'klaar', 'for': '00:05:00'}], 'mode': 'single', 'actions': [{'choose': [{'conditions': [{'condition': 'trigger', 'id': 'gestart'}, {'condition': 'state', 'entity_id': 'switch.droogtrommel', 'state': 'on'}], 'sequence': [{'target': {'entity_id': 'input_boolean.droger_actief'}, 'action': 'input_boolean.turn_on'}]}, {'conditions': [{'condition': 'trigger', 'id': 'klaar'}, {'condition': 'state', 'entity_id': 'input_boolean.droger_actief', 'state': 'on'}, {'condition': 'state', 'entity_id': 'switch.droogtrommel', 'state': 'on'}], 'sequence': [{'target': {'entity_id': 'switch.droogtrommel'}, 'action': 'switch.turn_off'}, {'target': {'entity_id': 'input_boolean.droger_actief'}, 'action': 'input_boolean.turn_off'}, {'data': {'title': 'Droger klaar!', 'message': 'De droger is klaar.'}, 'action': 'notify.familie'}]}]}], 'conditions': []}, {'id': '1772960697194', 'alias': 'Wasmachine Automatisch Uitschakelen', 'triggers': [{'platform': 'numeric_state', 'entity_id': 'sensor.wasmachine_vermogen', 'above': 10, 'id': 'gestart', 'for': '00:01:00'}, {'platform': 'numeric_state', 'entity_id': 'sensor.wasmachine_vermogen', 'below': 4, 'id': 'klaar', 'for': '00:00:15'}], 'condition': [], 'action': [{'choose': [{'conditions': [{'condition': 'trigger', 'id': 'gestart'}, {'condition': 'state', 'entity_id': 'switch.wasmachine', 'state': 'on'}], 'sequence': [{'service': 'input_boolean.turn_on', 'target': {'entity_id': 'input_boolean.wasmachine_actief'}}]}, {'conditions': [{'condition': 'trigger', 'id': 'klaar'}, {'condition': 'state', 'entity_id': 'input_boolean.wasmachine_actief', 'state': 'on'}, {'condition': 'state', 'entity_id': 'switch.wasmachine', 'state': 'on'}], 'sequence': [{'service': 'switch.turn_off', 'target': {'entity_id': 'switch.wasmachine'}}, {'service': 'input_boolean.turn_off', 'target': {'entity_id': 'input_boolean.wasmachine_actief'}}, {'service': 'notify.familie', 'data': {'title': 'Wasmachine klaar!', 'message': 'De wasmachine is klaar.'}}]}]}], 'mode': 'single'}, {'id': '1773838684136', 'alias': 'Presence verlichting + SONOS + weltrusten', 'triggers': [{'entity_id': ['person.leslie_de_groot', 'person.esther_de_groot'], 'from': 'not_home', 'to': 'home', 'id': 'thuis', 'triggers': 'state'}, {'entity_id': ['person.leslie_de_groot', 'person.esther_de_groot'], 'from': 'home', 'to': 'not_home', 'for': '00:00:15', 'id': 'weg', 'triggers': 'state'}, {'at': '03:00:00', 'id': 'nacht', 'triggers': 'time'}], 'conditions': [], 'actions': [{'choose': [{'conditions': [{'condition': 'trigger', 'id': 'thuis'}, {'condition': 'template', 'value_template': "{{ states.person\n   | selectattr('state', 'eq', 'home')\n   | list\n   | count == 1 }}\n"}], 'sequence': [{'if': [{'condition': 'state', 'entity_id': 'light.woonkamer', 'state': 'off'}], 'then': [{'data': {'group_name': 'Woonkamer', 'scene_name': 'filament'}, 'action': 'hue.hue_activate_scene'}]}, {'target': {'entity_id': ['media_player.keuken_wsb', 'media_player.slaapkamer_wsb', 'media_player.woonkamer_wsb']}, 'data': {'volume_level': 0.3}, 'action': 'media_player.volume_set'}, {'if': [{'condition': 'template', 'value_template': "{{ not is_state_attr('media_player.woonkamer_wsb', 'group_members', ['media_player.keuken_wsb','media_player.dressoir_wsb']) }}\n"}], 'then': [{'target': {'entity_id': 'media_player.woonkamer_wsb'}, 'data': {'group_members': ['media_player.keuken_wsb']}, 'action': 'media_player.join'}]}]}, {'conditions': [{'condition': 'trigger', 'id': 'weg'}, {'condition': 'template', 'value_template': "{{ states.person\n   | selectattr('state', 'eq', 'home')\n   | list\n   | count == 0 }}\n"}], 'sequence': [{'target': {'entity_id': ['light.woonkamer', 'light.slaapkamer']}, 'action': 'light.turn_off'}, {'target': {'device_id': ['28b41e081520c3bb215ceddcca86d864', 'fda4c14be16f4a32a303fd84d03be43f']}, 'action': 'remote.turn_off'}, {'target': {'entity_id': 'media_player.lg_webos_tv_2'}, 'action': 'media_player.turn_off'}, {'target': {'entity_id': ['media_player.keuken_wsb', 'media_player.slaapkamer_wsb', 'media_player.woonkamer_wsb']}, 'action': 'media_player.media_stop', 'data': {}}]}, {'conditions': [{'condition': 'trigger', 'id': 'nacht'}], 'sequence': [{'target': {'entity_id': ['light.woonkamer', 'light.slaapkamer']}, 'action': 'light.turn_off'}, {'target': {'entity_id': 'media_player.lg_webos_tv_2'}, 'action': 'media_player.turn_off'}, {'target': {'entity_id': ['media_player.keuken_wsb', 'media_player.slaapkamer_wsb', 'media_player.woonkamer_wsb']}, 'action': 'media_player.media_stop', 'data': {}}]}]}], 'mode': 'single'}, {'id': '1775214060676', 'alias': 'Gang Motion', 'use_blueprint': {'path': 'motion/motion_light.yaml', 'input': {'motion_sensor': 'binary_sensor.gang_motion_sensor_beweging', 'light_target': {'entity_id': 'light.gang'}, 'ruimte_naam': 'Gang', 'master_switch': 'input_boolean.gang_motion_master_switch'}}}, {'id': '1775214624881', 'alias': 'Wasruimte motion', 'use_blueprint': {'path': 'motion/motion_light.yaml', 'input': {'motion_sensor': 'binary_sensor.wasruimte_beweging_2', 'light_target': {'entity_id': 'light.wasruimte_2'}, 'ruimte_naam': 'Wasruimte', 'master_switch': 'input_boolean.wasruimte_motion_master_switch', 'sleep_enabled': False}}}, {'id': '1775218740871', 'alias': 'Batterij meldingen PRO', 'triggers': [{'entity_id': ['sensor.wasruimte_batterij', 'sensor.eettafel_schakelaar_batterij', 'sensor.woonkamer_buitendeur_batterij', 'sensor.woonkamer_intercom_batterij', 'sensor.leslie_schakelaar_batterij', 'sensor.keuken_schakelaar_batterij', 'sensor.gang_motion_sensor_batterij', 'sensor.esther_schakelaar_batterij'], 'triggers': 'state'}], 'conditions': [{'condition': 'template', 'value_template': "{{ trigger.to_state is not none and\n   trigger.to_state.state not in ['unknown','unavailable','none'] }}\n"}, {'condition': 'template', 'value_template': '{{ this.attributes.last_triggered is none or\n   (now() - this.attributes.last_triggered).total_seconds() > 86400 }}\n'}], 'actions': [{'variables': {'kritisch': "{% set ns = namespace(v=[]) %} {% for e in [\n  'sensor.wasruimte_batterij',\n  'sensor.eettafel_schakelaar_batterij',\n  'sensor.woonkamer_buitendeur_batterij',\n  'sensor.woonkamer_intercom_batterij',\n  'sensor.leslie_schakelaar_batterij',\n  'sensor.keuken_schakelaar_batterij',\n  'sensor.gang_motion_sensor_batterij',\n  'sensor.esther_schakelaar_batterij'\n] %} {% set val = states(e) | replace('%','') | float(100) %} {% if val <= 10 %}\n  {% set ns.v = ns.v + [(state_attr(e,'friendly_name') or e) ~ ' (' ~ (val|int) ~ '%)'] %}\n{% endif %} {% endfor %} {{ ns.v }}\n", 'laag': "{% set ns = namespace(v=[]) %} {% for e in [\n  'sensor.wasruimte_batterij',\n  'sensor.eettafel_schakelaar_batterij',\n  'sensor.woonkamer_buitendeur_batterij',\n  'sensor.woonkamer_intercom_batterij',\n  'sensor.leslie_schakelaar_batterij',\n  'sensor.keuken_schakelaar_batterij',\n  'sensor.gang_motion_sensor_batterij',\n  'sensor.esther_schakelaar_batterij'\n] %} {% set val = states(e) | replace('%','') | float(100) %} {% if val > 10 and val <= 15 %}\n  {% set ns.v = ns.v + [(state_attr(e,'friendly_name') or e) ~ ' (' ~ (val|int) ~ '%)'] %}\n{% endif %} {% endfor %} {{ ns.v }}\n"}}, {'choose': [{'conditions': [{'condition': 'template', 'value_template': '{{ kritisch | count > 0 }}'}], 'sequence': [{'data': {'title': '🔴 Batterijen kritiek', 'message': "- {{ kritisch | join('\\n- ') }}\n"}, 'action': 'notify.familie'}]}, {'conditions': [{'condition': 'template', 'value_template': '{{ laag | count > 0 }}'}], 'sequence': [{'data': {'title': '🟠 Batterijen laag', 'message': "- {{ laag | join('\\n- ') }}\n"}, 'action': 'notify.familie'}]}]}], 'mode': 'single'}]



Successful config (partial)

  automation:

Running the json of the automation.yalm in a json validator gives this:

Right, the error though is showing code where it implicitly tries to get triggers from a dictionary. The key does not exist, so an exception is created.

So, what do I need to do, to resolve this exception?
And why does it come since 2026.4?

Is it possible the issue is in the custom made blueprint?
I’ve deleted all automations one by one, after the last one, the issue was gone.
However when I recreate the motion automations, the error comes back.

I don’t have a clue where to look.

Here is the blueprint:

blueprint:
  name: Motion Light
  description: Slimme motion verlichting met dag/avond/nacht + dimmen + notificatie
  domain: automation

  input:

    motion_sensor:
      name: Motion sensor
      selector:
        entity:
          domain: binary_sensor

    light_target:
      name: Licht
      selector:
        target:
          entity:
            domain: light

    ruimte_naam:
      name: Ruimte naam
      default: ""
      selector:
        text:

    master_switch:
      name: Master switch (optioneel)
      default: ""
      selector:
        entity:
          domain: input_boolean

    sleep_enabled:
      name: Nachtmodus inschakelen
      default: true
      selector:
        boolean:

    sleep_start:
      name: Begin van de nacht
      default: "22:00:00"
      selector:
        time:

    sleep_end:
      name: Eind van de nacht
      default: "06:00:00"
      selector:
        time:

    brightness_day:
      name: Helderheid dag (%)
      default: 100
      selector:
        number:
          min: 1
          max: 100

    brightness_evening:
      name: Helderheid avond (%)
      default: 30
      selector:
        number:
          min: 1
          max: 100

    brightness_night:
      name: Helderheid nacht (%)
      default: 10
      selector:
        number:
          min: 1
          max: 100

    brightness_dim:
      name: Dim niveau (%)
      default: 10
      selector:
        number:
          min: 1
          max: 100

    timeout_day:
      name: Timeout dag
      default: "00:01:30"
      selector:
        duration:

    timeout_night:
      name: Timeout nacht
      default: "00:00:45"
      selector:
        duration:

    dim_delay:
      name: Tijd na dimmen
      default: "00:00:30"
      selector:
        duration:

    notify_target:
      name: Notificatie service
      default: "notify.familie"
      selector:
        text:

trigger:
  - platform: state
    entity_id: !input motion_sensor
    to: "on"

mode: restart
max_exceeded: silent

variables:
  master_switch: !input master_switch
  notify_target: !input notify_target
  ruimte: !input ruimte_naam
  light_target_var: !input light_target

condition:
  - condition: template
    value_template: >
      {{ master_switch == "" or is_state(master_switch, 'on') }}

action:

  # 🚨 Notificatie als niemand thuis is
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ is_state('group.gezin', 'not_home') }}"
          - condition: template
            value_template: "{{ notify_target != '' }}"
        sequence:
          - service: "{{ notify_target }}"
            data:
              title: Beweging gedetecteerd!
              message: >
                {% if ruimte != "" %}
                  Beweging in de {{ ruimte }}
                {% else %}
                  Beweging gedetecteerd
                {% endif %}

  # 🧠 Logica bepalen
  - variables:
      sleep_enabled: !input sleep_enabled
      sleep_start: !input sleep_start
      sleep_end: !input sleep_end

      brightness_day: !input brightness_day
      brightness_evening: !input brightness_evening
      brightness_night: !input brightness_night
      brightness_dim: !input brightness_dim

      timeout_day: !input timeout_day
      timeout_night: !input timeout_night

      now_time: "{{ now().strftime('%H:%M:%S') }}"

      is_sleep: >
        {% if not sleep_enabled %}
          false
        {% elif sleep_start < sleep_end %}
          {{ sleep_start <= now_time < sleep_end }}
        {% else %}
          {{ now_time >= sleep_start or now_time < sleep_end }}
        {% endif %}

      brightness: >
        {% if sleep_enabled and is_sleep %}
          {{ brightness_night }}
        {% elif is_state('sun.sun', 'below_horizon') %}
          {{ brightness_evening }}
        {% else %}
          {{ brightness_day }}
        {% endif %}

      timeout: >
        {% if sleep_enabled and is_sleep %}
          {{ timeout_night }}
        {% else %}
          {{ timeout_day }}
        {% endif %}

  # 💡 Licht aan
  - service: light.turn_on
    target: !input light_target
    data:
      brightness_pct: "{{ brightness }}"
      transition: 0.3

  # ⏱️ Wachten tot geen beweging
  - wait_for_trigger:
      - platform: state
        entity_id: !input motion_sensor
        to: "off"
        for: "{{ timeout }}"
    continue_on_timeout: false

  # 🌙 Dimmen (altijd)
  - condition: template
    value_template: >
      {{ light_target_var.entity_id is defined and
         expand(light_target_var.entity_id)
         | selectattr('state','eq','on')
         | list
         | count > 0 }}

  - service: light.turn_on
    target: !input light_target
    data:
      brightness_pct: !input brightness_dim
      transition: 3

  - delay: !input dim_delay

  # 🔌 Uit
  - service: light.turn_off

Yes, it’s possible. If that’s the case, write up an issue attaching that blueprint. Blueprint keys should be translated from legacy keys (trigger, platform, etc) to the modern keys.

I’ve deleted all automations again, deleted the blueprint as well. ha core check, succesfull.

After that I’ve created a simple automation through the GUI:

[core-ssh config]$ ha core restart && ha core check
Processing... Done.

Command completed successfully.
Processing... Done.

Error: Testing configuration at /config

ERROR:homeassistant.helpers.check_config:Unexpected error validating config

Traceback (most recent call last):

  File "/usr/src/homeassistant/homeassistant/helpers/check_config.py", line 217, in async_check_ha_config_file

    await config_validator.async_validate_config(hass, config)

  File "/usr/src/homeassistant/homeassistant/components/automation/config.py", line 328, in async_validate_config

    await _try_async_validate_config_item(hass, p_config)

  File "/usr/src/homeassistant/homeassistant/components/automation/config.py", line 306, in _try_async_validate_config_item

    return await _async_validate_config_item(hass, config, False, True)

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/src/homeassistant/homeassistant/components/automation/config.py", line 220, in _async_validate_config_item

    automation_config[CONF_TRIGGERS] = await async_validate_trigger_config(

                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        hass, validated_config[CONF_TRIGGERS]

        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    )

    ^

  File "/usr/src/homeassistant/homeassistant/helpers/trigger.py", line 1212, in async_validate_trigger_config

    platform_domain, platform = await _async_get_trigger_platform(hass, trigger_key)

                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/src/homeassistant/homeassistant/helpers/trigger.py", line 1200, in _async_get_trigger_platform

    await _register_trigger_platform(hass, platform, platform_module)

  File "/usr/src/homeassistant/homeassistant/helpers/trigger.py", line 205, in _register_trigger_platform

    triggers = hass.data[TRIGGERS]

               ~~~~~~~~~^^^^^^^^^^

KeyError: 'triggers'

Failed config

  automation: 

    - Unexpected error calling config validator: 'triggers'

    - [{'id': '1775628451052', 'alias': 'Nieuwe automatisering', 'description': '', 'triggers': [{'type': 'motion', 'device_id': 'b10007edf44e61514887748bc4f9a5ee', 'entity_id': '49b3e0e2196e4e043fd9c80bebf17f1d', 'domain': 'binary_sensor', 'trigger': 'device'}], 'conditions': [], 'actions': [{'action': 'light.turn_on', 'metadata': {}, 'target': {'entity_id': 'light.gang'}, 'data': {}}], 'mode': 'single'}]



Successful config (partial)

  automation:

Can anyone guide me to the right direction? :grin:

I’ve created a new VM in Proxmox and I’ve completed a brand new HA OS Install 2026.4.1.
I did not restore a back-up, I’ve created a new automation. Same error.

P.S. I’ve made the automation only through the web interface, no YAML from my side :innocent:.