Zum Inhalt springen
Alles Automatisch
Automationen

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.

Wenn
  • Last Activities: Attribut „last_activities“ ändert sich

Nur wenn
  • Mindestens eine neue Aktivität vorhanden

    Ein Template ist wahr

Dann
  • 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. 1

    Das brauchst du

    • SensorGerät
    • Zahlenwert-EingabeHelfer
    • Text-EingabeHelfer
    • ZählerHelfer
  2. 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: single
    

    Aus meinem Home Assistant, Stand 30. April 2026.