Your state is based off an attribute that won't have a value, and you haven't supplied a default.
I would move the large template into a variable so that it is rendered immediately after the trigger and supply a default for h so it doesn't fail on the first run:
- triggers:
- trigger: time_pattern
seconds: "/1"
- trigger: event
event_type: "oplaad_matrix_update"
- trigger: homeassistant
event: start
variables:
actief: |
{# 1. HAAL GEHEUGEN OP ZONDER 'THIS' #}
{% set h = state_attr('sensor.ai_oplaad_master_matrix', 'actief')|default([],true) %}
{# 2. VERWERK DATA #}
{% if trigger.platform == 'event' and trigger.event.event_type == 'oplaad_matrix_update' %}
{% set d = trigger.event.data %}
{% if d.actie == 'add' %}
{% set n = {
'id': d.id | string,
'naam': d.naam | string if d.naam else 'LADER',
'start': d.start | int,
'eind': d.eind | int } %}
{{ ([n] + (h | rejectattr('id', 'eq', n.id) | list)) | list }}
{% elif d.actie == 'del' %}
{{ h | rejectattr('id', 'eq', d.id | string) | list }}
{% elif d.actie == 'reset' %}
{{ [] }}
{% else %} {{ h }} {% endif %}
{% else %}
{# Seconde-tik of start: behoud de lijst #}
{{ h }}
{% endif %}
sensor:
- name: "AI Oplaad Master Matrix"
unique_id: ai_oplaad_master_matrix
icon: mdi:matrix
# De status telt simpelweg het aantal laders in de lijst
state: >
{{ actief | count if actief is list else 0 }}
attributes:
actief: "{{ actief }}"
spreuken: |
{{- ["Matrix motor v_8.7 online",
"Systeem reanimatie voltooid",
"Wachten op Bart..."] }}