Beide Wege waren leider Sackgassen, mein Fehler. type_debug gibt es in Home Assistant gar nicht als Filter, daher die Meldung. Und from_json bringt nichts, weil last_activities bei dir schon eine echte Liste ist. Das eigentliche Problem ist, dass in den Einträgen das Feld startTime als datetime-Objekt steckt, und repeat.for_each frisst nur saubere Listen aus Strings und Zahlen. Genau daran bricht es ab.
Die Lösung steht in der aktuellen Version der Automation auf der Seite: eine Variable acts, die die Liste vor der Schleife neu aufbaut und nur die vier Felder behaelt, die wir brauchen. Schau, dass dein variables:-Block genau so aussieht:
1variables:
2 start_last_id: "{{ states('input_text.garmin_last_logged_activity_id') | int(0) }}"
3 acts: >-
4 {% set raw = state_attr('sensor.last_activities', 'last_activities') | default([]) %}
5 {% set ns = namespace(items=[]) %}
6 {% for x in raw %}
7 {% set ns.items = ns.items + [{
8 'activityId': x.activityId | int(0),
9 'activityType': x.activityType | default(''),
10 'distance': x.distance | float(0),
11 'duration': x.duration | float(0)
12 }] %}
13 {% endfor %}
14 {{ ns.items }}
In der Schleife dann for_each: "{{ acts }}" nutzen, statt direkt auf den Sensor zuzugreifen. Damit fliegt das datetime-Objekt schon vor der Schleife raus und der for_each-Fehler ist weg. Am saubersten ist es, wenn du die komplette Automation aus dem Beitrag Garmin Fitness Dashboard nochmal frisch reinkopierst und nur deine Entity-IDs anpasst. Wichtig ist auch das mode: queued oben, sonst gehen schnelle Folge-Syncs verloren.