AutomationGarmin
Neue Aktivität protokollieren
Wertet neue Garmin-Aktivitäten aus und schreibt km, Minuten und Sessions in input_number/counter Helfer. Prüft per Activity-ID ob die Aktivität bereits geloggt wurde.
So läuft die Automation ab
In Worten statt YAML. Hat ein Schritt in meiner Config einen Namen, steht er oben und grau darunter, was technisch passiert.
Last Activities: Attribut „last_activities“ ändert sich
Mindestens eine neue Aktivität vorhanden
Ein Template ist wahr
1.Aktivitätenliste laden
2.Alle neuen Aktivitäten verarbeiten
Wiederholen: Für jeden Eintrag
Variablen für diese Aktivität setzen
Nur verarbeiten wenn ID neuer als letzte geloggte
Aktivität ist neu
Werte je nach Aktivitätstyp akkumulieren
Tennis
Garmin Tennis Month Km Wert setzen
Garmin Tennis Year Km Wert setzen
Garmin Tennis Month Min Wert setzen
Garmin Tennis Year Min Wert setzen
Garmin Tennis Sessions hochzählen
Radfahren
Garmin Bike Month Km Wert setzen
Garmin Bike Year Km Wert setzen
Garmin Bike Month Min Wert setzen
Garmin Bike Year Min Wert setzen
Garmin Bike Sessions hochzählen
Skating
Garmin Skate Month Km Wert setzen
Garmin Skate Year Km Wert setzen
Garmin Skate Month Min Wert setzen
Garmin Skate Year Min Wert setzen
Garmin Skate Sessions hochzählen
Geloggte ID auf diese Aktivität setzen
Aktion input_text.set_value für Garmin Last Logged Activity Id
So übernimmst du sie
Zwei Schritte, dann läuft sie bei dir.
- 1
Das brauchst du
- SensorGerät
- Zahlenwert-EingabeHelfer
- Text-EingabeHelfer
- ZählerHelfer
- 2
Einfügen
EinstellungenAutomationen & SzenenAutomation erstellenNeue Automation erstellen
Oben rechts über die drei Punkte „In YAML bearbeiten“ wählen, alles markieren, den Text von unten einfügen und speichern.
Garmin · Neue Aktivität protokollieren# Entity-IDs sind anonymisiert. Ersetze sie durch deine eigenen. # Beispiel: light.dein_wohnzimmer_licht -> light.wohnzimmer_deckenlampe # Garmin - Neue Aktivität protokollieren # Verarbeitet ALLE neuen Garmin-Aktivitäten per Repeat-Schleife. # Liest die Liste, prüft jede gegen die letzte geloggte ID, # und akkumuliert km/min/sessions für Tennis, Radfahren und Skating. id: garmin_neue_aktivitaet_protokollieren alias: "Garmin - Neue Aktivität protokollieren" description: >- Verarbeitet ALLE neuen Garmin-Aktivitäten per Repeat-Schleife. Liest die Liste von hinten (neueste zuerst), prüft jede gegen die letzte geloggte ID und akkumuliert km/min/sessions für Tennis, Radfahren und Skating. # Ausloser: Wann wird die Automation gestartet? triggers: # Sensor für letzte Aktivitäten ändert sich - entity_id: sensor.last_activities attribute: last_activities trigger: state # Bedingungen: Nur ausführen wenn... conditions: - condition: template alias: Mindestens eine neue Aktivität vorhanden value_template: >- {% set acts = state_attr('sensor.last_activities', 'last_activities') | default([], true) %} {% set last_id = states('input_text.garmin_last_logged_activity_id') | int(0) %} {% set newest_id = acts[-1].activityId | int(0) if acts | length > 0 else 0 %} {{ newest_id > last_id }} # Aktionen: Was passiert? actions: # Aktivitätenliste in Variable laden - alias: Aktivitätenliste laden variables: activities: >- {{ state_attr('sensor.last_activities', 'last_activities') | default([], true) }} # Alle neuen Aktivitäten per for_each verarbeiten - alias: Alle neuen Aktivitäten verarbeiten repeat: for_each: "{{ activities }}" sequence: # Variablen für diese Aktivität setzen - alias: Variablen für diese Aktivität setzen variables: activity: "{{ repeat.item }}" act_id: "{{ repeat.item.activityId | int(0) }}" last_id: "{{ states('input_text.garmin_last_logged_activity_id') | int(0) }}" typekey: "{{ repeat.item.activityType | default('') }}" km: "{{ (repeat.item.distance | float(0)) / 1000 }}" mins: "{{ ((repeat.item.duration | float(0)) / 60) | round(0) }}" # Nur verarbeiten wenn ID neuer als letzte geloggte. # Ein condition-Step würde die gesamte Automation abbrechen, # daher wird choose ohne default verwendet (überspringt unbekannte Typen). - alias: Nur verarbeiten wenn ID neuer als letzte geloggte choose: - alias: Aktivität ist neu conditions: - condition: template value_template: "{{ act_id > last_id }}" sequence: # Werte je nach Aktivitätstyp akkumulieren - alias: Werte je nach Aktivitätstyp akkumulieren choose: # Tennis - alias: Tennis conditions: - condition: template value_template: "{{ typekey == 'tennis_v2' }}" sequence: - action: input_number.set_value target: entity_id: input_number.garmin_tennis_month_km data: value: "{{ (states('input_number.garmin_tennis_month_km') | float(0) + km | float(0)) | round(2) }}" - action: input_number.set_value target: entity_id: input_number.garmin_tennis_year_km data: value: "{{ (states('input_number.garmin_tennis_year_km') | float(0) + km | float(0)) | round(2) }}" - action: input_number.set_value target: entity_id: input_number.garmin_tennis_month_min data: value: "{{ (states('input_number.garmin_tennis_month_min') | float(0) + mins | float(0)) | round(0) }}" - action: input_number.set_value target: entity_id: input_number.garmin_tennis_year_min data: value: "{{ (states('input_number.garmin_tennis_year_min') | float(0) + mins | float(0)) | round(0) }}" - action: counter.increment target: entity_id: counter.garmin_tennis_sessions # Radfahren (cycling oder e_bike_fitness) - alias: Radfahren conditions: - condition: or conditions: - condition: template value_template: "{{ typekey == 'cycling' }}" - condition: template value_template: "{{ typekey == 'e_bike_fitness' }}" sequence: - action: input_number.set_value target: entity_id: input_number.garmin_bike_month_km data: value: "{{ (states('input_number.garmin_bike_month_km') | float(0) + km | float(0)) | round(2) }}" - action: input_number.set_value target: entity_id: input_number.garmin_bike_year_km data: value: "{{ (states('input_number.garmin_bike_year_km') | float(0) + km | float(0)) | round(2) }}" - action: input_number.set_value target: entity_id: input_number.garmin_bike_month_min data: value: "{{ (states('input_number.garmin_bike_month_min') | float(0) + mins | float(0)) | round(0) }}" - action: input_number.set_value target: entity_id: input_number.garmin_bike_year_min data: value: "{{ (states('input_number.garmin_bike_year_min') | float(0) + mins | float(0)) | round(0) }}" - action: counter.increment target: entity_id: counter.garmin_bike_sessions # Skating - alias: Skating conditions: - condition: template value_template: "{{ typekey == 'inline_skating' }}" sequence: - action: input_number.set_value target: entity_id: input_number.garmin_skate_month_km data: value: "{{ (states('input_number.garmin_skate_month_km') | float(0) + km | float(0)) | round(2) }}" - action: input_number.set_value target: entity_id: input_number.garmin_skate_year_km data: value: "{{ (states('input_number.garmin_skate_year_km') | float(0) + km | float(0)) | round(2) }}" - action: input_number.set_value target: entity_id: input_number.garmin_skate_month_min data: value: "{{ (states('input_number.garmin_skate_month_min') | float(0) + mins | float(0)) | round(0) }}" - action: input_number.set_value target: entity_id: input_number.garmin_skate_year_min data: value: "{{ (states('input_number.garmin_skate_year_min') | float(0) + mins | float(0)) | round(0) }}" - action: counter.increment target: entity_id: counter.garmin_skate_sessions # Geloggte ID auf diese Aktivität setzen - alias: Geloggte ID auf diese Aktivität setzen action: input_text.set_value target: entity_id: input_text.garmin_last_logged_activity_id data: value: "{{ act_id }}" mode: singleAus meinem Home Assistant, Stand 30. April 2026.
