Zum Inhalt springen
Alles Automatisch

DashboardÜbersicht

Fitness

Dashboard-View 'Fitness' mit 29 Karten. Teil des Haupt-Dashboards.

So übernimmst du sie

Zwei Schritte, dann läuft sie bei dir.

  1. 1

    Das brauchst du

    • SensorGerät
    • Zahlenwert-EingabeHelfer
    • ZählerHelfer
  2. 2

    Einfügen

    Dashboard öffnenDashboard bearbeitenRaw-Konfigurationseditor

    Der Raw-Konfigurationseditor ersetzt das ganze Dashboard. Für eine einzelne Karte stattdessen eine Karte hinzufügen und dort den YAML-Code einfügen.

    Übersicht: Fitness
    # Entity-IDs sind anonymisiert. Ersetze sie durch deine eigenen.
    # Beispiel: light.dein_wohnzimmer_licht -> light.wohnzimmer_deckenlampe
    title: Fitness
    type: sections
    max_columns: 3
    path: fitness
    icon: mdi:bicycle-penny-farthing
    subview: false
    sections:
    - type: grid
      columns: 2
      cards:
      - type: heading
        heading: Ziele & Fortschritt
      - type: gauge
        entity: sensor.garmin_skating_year_progress
        name: Skating-Ziel 2026
        unit: '%'
        min: 0
        max: 100
        severity:
          green: 75
          yellow: 50
          red: 0
      - type: entity
        entity: input_number.garmin_skate_year_km
        name: Kilometer (Jahr)
        icon: mdi:map-marker-distance
        grid_options:
          columns: 6
          rows: 2
      - type: entity
        entity: input_number.garmin_skate_year_min
        name: Minuten (Jahr)
        icon: mdi:clock-time-eight-outline
        grid_options:
          columns: 6
          rows: 2
      - type: custom:mushroom-template-card
        primary: '{% set projected = states(''sensor.garmin_skating_projection_2025'') | float(0) %}{% set goal = states(''input_number.garmin_skating_jahresziel'')
          | float(2026) %}{% if projected >= goal %}Ziel wird erreicht!{% elif projected > 0 %}Prognose: {{ projected | round(0)
          }} km{% else %}Keine Daten{% endif %}'
        secondary: 'Ziel: {{ states(''input_number.garmin_skating_jahresziel'') | int(0) }} km'
        icon: mdi:trending-up
        layout: vertical
        entity: sensor.garmin_skating_projection_2025
        tap_action:
          action: more-info
      - type: custom:mushroom-template-card
        primary: '{% set chrono = states(''sensor.garmin_chronological_age'') | float(0) %}{% set fitness = states(''sensor.garmin_fitness_age'')
          | float(0) %}{% set diff = (chrono - fitness) | round(1) %}Biologisch {{ diff }} Jahre jünger'
        secondary: 'Fitness Age: {{ states(''sensor.garmin_fitness_age'') | float(0) | round(1) }} | Alter: {{ states(''sensor.garmin_chronological_age'')
          }}'
        icon: mdi:heart-pulse
        layout: vertical
        entity: sensor.garmin_fitness_age
        tap_action:
          action: more-info
        icon_color: red
        grid_options:
          columns: 6
          rows: 2
    - type: grid
      cards:
      - type: heading
        heading: Letzte Aktivitäten
      - type: entities
        entities:
        - type: custom:template-entity-row
          entity: sensor.last_activities
          name: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 0 %}{%
            set a = acts[0] %}{{ a.activityName }} ({{ (a.startTime | string)[:10] | replace(''-'', ''.'') }}){% else %}---{% endif
            %}'
          state: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 0 %}{%
            set a = acts[0] %}{{ (a.distance / 1000) | round(1, default=0) }} km | {{ (a.duration / 60) | round(0, default=0)
            }} min | {{ a.calories | round(0, default=0) }} kcal{% else %}---{% endif %}'
          icon: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 0 %}{%
            set a = acts[0] %}{% set t = a.activityName | lower %}{% if ''skat'' in t or ''inline'' in t %}mdi:rollerblade{% elif
            ''tennis'' in t %}mdi:tennis{% elif ''run'' in t or ''gehen'' in t %}mdi:run-fast{% else %}mdi:bike{% endif %}{% else
            %}mdi:help-circle{% endif %}'
        - type: custom:template-entity-row
          entity: sensor.last_activities
          name: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 1 %}{%
            set a = acts[1] %}{{ a.activityName }} ({{ (a.startTime | string)[:10] | replace(''-'', ''.'') }}){% else %}---{% endif
            %}'
          state: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 1 %}{%
            set a = acts[1] %}{{ (a.distance / 1000) | round(1, default=0) }} km | {{ (a.duration / 60) | round(0, default=0)
            }} min | {{ a.calories | round(0, default=0) }} kcal{% else %}---{% endif %}'
          icon: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 1 %}{%
            set a = acts[1] %}{% set t = a.activityName | lower %}{% if ''skat'' in t or ''inline'' in t %}mdi:rollerblade{% elif
            ''tennis'' in t %}mdi:tennis{% elif ''run'' in t or ''gehen'' in t %}mdi:run-fast{% else %}mdi:bike{% endif %}{% else
            %}mdi:help-circle{% endif %}'
        - type: custom:template-entity-row
          entity: sensor.last_activities
          name: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 2 %}{%
            set a = acts[2] %}{{ a.activityName }} ({{ (a.startTime | string)[:10] | replace(''-'', ''.'') }}){% else %}---{% endif
            %}'
          state: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 2 %}{%
            set a = acts[2] %}{{ (a.distance / 1000) | round(1, default=0) }} km | {{ (a.duration / 60) | round(0, default=0)
            }} min | {{ a.calories | round(0, default=0) }} kcal{% else %}---{% endif %}'
          icon: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 2 %}{%
            set a = acts[2] %}{% set t = a.activityName | lower %}{% if ''skat'' in t or ''inline'' in t %}mdi:rollerblade{% elif
            ''tennis'' in t %}mdi:tennis{% elif ''run'' in t or ''gehen'' in t %}mdi:run-fast{% else %}mdi:bike{% endif %}{% else
            %}mdi:help-circle{% endif %}'
        - type: custom:template-entity-row
          entity: sensor.last_activities
          name: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 3 %}{%
            set a = acts[3] %}{{ a.activityName }} ({{ (a.startTime | string)[:10] | replace(''-'', ''.'') }}){% else %}---{% endif
            %}'
          state: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 3 %}{%
            set a = acts[3] %}{{ (a.distance / 1000) | round(1, default=0) }} km | {{ (a.duration / 60) | round(0, default=0)
            }} min | {{ a.calories | round(0, default=0) }} kcal{% else %}---{% endif %}'
          icon: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 3 %}{%
            set a = acts[3] %}{% set t = a.activityName | lower %}{% if ''skat'' in t or ''inline'' in t %}mdi:rollerblade{% elif
            ''tennis'' in t %}mdi:tennis{% elif ''run'' in t or ''gehen'' in t %}mdi:run-fast{% else %}mdi:bike{% endif %}{% else
            %}mdi:help-circle{% endif %}'
        - type: custom:template-entity-row
          entity: sensor.last_activities
          name: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 4 %}{%
            set a = acts[4] %}{{ a.activityName }} ({{ (a.startTime | string)[:10] | replace(''-'', ''.'') }}){% else %}---{% endif
            %}'
          state: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 4 %}{%
            set a = acts[4] %}{{ (a.distance / 1000) | round(1, default=0) }} km | {{ (a.duration / 60) | round(0, default=0)
            }} min | {{ a.calories | round(0, default=0) }} kcal{% else %}---{% endif %}'
          icon: '{% set acts = state_attr(''sensor.last_activities'', ''last_activities'') | reverse | list %}{% if acts and acts|length > 4 %}{%
            set a = acts[4] %}{% set t = a.activityName | lower %}{% if ''skat'' in t or ''inline'' in t %}mdi:rollerblade{% elif
            ''tennis'' in t %}mdi:tennis{% elif ''run'' in t or ''gehen'' in t %}mdi:run-fast{% else %}mdi:bike{% endif %}{% else
            %}mdi:help-circle{% endif %}'
      - type: custom:mushroom-template-card
        primary: 'Highlight der Woche: {{ state_attr(''sensor.garmin_weekly_highlight'', ''activityName'') }}'
        secondary: '{{ state_attr(''sensor.garmin_weekly_highlight'', ''distance'') }} km - {{ state_attr(''sensor.garmin_weekly_highlight'',
          ''duration'') }} min - {{ state_attr(''sensor.garmin_weekly_highlight'', ''calories'') }} kcal'
        icon: mdi:star-shooting
        layout: vertical
        tap_action:
          action: more-info
        entity: sensor.garmin_weekly_highlight
        grid_options:
          columns: 6
          rows: 2
      - type: custom:mushroom-template-card
        primary: '{% set total_min = states(''input_number.garmin_skate_year_min'') | float(0) + states(''input_number.garmin_tennis_year_min'')
          | float(0) + states(''input_number.garmin_bike_year_min'') | float(0) %}{{ total_min | round(0) }} min Sport'
        secondary: '{% set sessions = states(''counter.garmin_skate_sessions'') | int(0) + states(''counter.garmin_tennis_sessions'')
          | int(0) + states(''counter.garmin_bike_sessions'') | int(0) %}{{ sessions }} Einheiten in {{ now().year }}'
        icon: mdi:trophy-outline
        layout: vertical
        icon_color: amber
        tap_action:
          action: none
        grid_options:
          columns: 6
          rows: 2
    - type: grid
      cards:
      - type: heading
        heading: Skating Minuten (letzte 30 Tage)
        heading_style: title
      - chart_type: bar
        period: day
        type: statistics-graph
        entities:
        - sensor.garmin_skating_min_month
        days_to_show: 30
        stat_types:
        - max
        hide_legend: true
        logarithmic_scale: false
      - type: custom:mushroom-template-card
        primary: '{% set km = states(''input_number.garmin_skate_year_km'') | float(0) %}{% if km > 1300 %}Fast Rom erreicht!{%
          elif km > 700 %}Bis München!{% elif km > 400 %}Hannover incoming{% else %}Lokalrunde{% endif %}'
        secondary: '{{ states(''input_number.garmin_skate_year_km'') | float(0) | round(1) }} km dieses Jahr · Ziel: {{ states(''input_number.garmin_skating_jahresziel'')
          | int(0) }} km'
        icon: mdi:earth
        tap_action:
          action: more-info
        entity: input_number.garmin_skate_year_km
        grid_options:
          columns: 12
          rows: 2
        multiline_secondary: false
        layout: vertical
        fill_container: false
        badge_icon: ''
        badge_color: ''
    - type: grid
      cards:
      - type: heading
        heading: Skating
      - type: custom:mushroom-template-card
        primary: '{{ states(''input_number.garmin_skate_month_km'') }}'
        icon: mdi:calendar-month
        entity: input_number.garmin_skate_month_km
        layout: vertical
        tap_action:
          action: more-info
        multiline_secondary: false
        secondary: Skating km (Monat)
      - type: custom:mushroom-template-card
        primary: '{{ states(''input_number.garmin_skate_year_km'') }}'
        icon: mdi:calendar
        entity: input_number.garmin_skate_year_km
        layout: vertical
        secondary: Skating km (Jahr)
        tap_action:
          action: more-info
      - type: custom:mushroom-template-card
        icon: mdi:clock-outline
        entity: sensor.garmin_skating_min_month
        primary: '{{ states(''sensor.garmin_skating_min_month'') }}'
        secondary: Minuten (Monat)
        tap_action:
          action: more-info
        layout: vertical
      - type: custom:mushroom-template-card
        icon: mdi:clock-time-four-outline
        entity: input_number.garmin_skate_year_min
        layout: vertical
        primary: '{{ states(''input_number.garmin_skate_year_min'') }}'
        secondary: Minuten (Jahr)
        tap_action:
          action: more-info
      - type: custom:mushroom-template-card
        icon: mdi:counter
        entity: counter.garmin_skate_sessions
        layout: vertical
        primary: '{{ states(''counter.garmin_skate_sessions'') }}'
        secondary: Einheiten (Jahr)
        tap_action:
          action: more-info
        icon_color: teal
    - type: grid
      cards:
      - type: heading
        heading: Tennis
      - type: custom:mushroom-template-card
        icon: mdi:calendar-month
        entity: input_number.garmin_tennis_month_km
        layout: vertical
        primary: '{{ states(''input_number.garmin_tennis_month_km'') }}'
        secondary: Tennis km (Monat)
        tap_action:
          action: more-info
      - type: custom:mushroom-template-card
        icon: mdi:calendar
        entity: input_number.garmin_tennis_year_km
        layout: vertical
        primary: '{{ states(''input_number.garmin_tennis_year_km'') }}'
        secondary: Tennis km (Jahr)
        tap_action:
          action: more-info
      - type: custom:mushroom-template-card
        icon: mdi:clock-outline
        entity: input_number.garmin_tennis_month_min
        primary: '{{ states(''input_number.garmin_tennis_month_min'') }}'
        secondary: Minuten (Monat)
        tap_action:
          action: more-info
        layout: vertical
      - type: custom:mushroom-template-card
        icon: mdi:clock-time-four-outline
        entity: input_number.garmin_tennis_year_min
        layout: vertical
        primary: '{{ states(''input_number.garmin_tennis_year_min'') }}'
        secondary: Minuten (Jahr)
        tap_action:
          action: more-info
      - type: custom:mushroom-template-card
        icon: mdi:counter
        entity: counter.garmin_tennis_sessions
        layout: vertical
        primary: '{{ states(''counter.garmin_tennis_sessions'') }}'
        secondary: Einheiten (Jahr)
        tap_action:
          action: more-info
        icon_color: orange
    - type: grid
      cards:
      - type: heading
        heading: Radfahren
      - type: custom:mushroom-template-card
        icon: mdi:calendar-month
        entity: input_number.garmin_bike_month_km
        layout: vertical
        primary: '{{ states(''input_number.garmin_bike_month_km'') }}'
        secondary: Bike km (Monat)
        tap_action:
          action: more-info
      - type: custom:mushroom-template-card
        icon: mdi:calendar
        entity: input_number.garmin_bike_year_km
        layout: vertical
        primary: '{{ states(''input_number.garmin_bike_year_km'') }}'
        secondary: Bike km (Jahr)
        tap_action:
          action: more-info
      - type: custom:mushroom-template-card
        icon: mdi:clock-outline
        entity: input_number.garmin_bike_month_min
        layout: vertical
        primary: '{{ states(''input_number.garmin_bike_month_min'') }}'
        secondary: Minuten (Monat)
        tap_action:
          action: more-info
      - type: custom:mushroom-template-card
        icon: mdi:clock-time-four-outline
        entity: input_number.garmin_bike_year_min
        layout: vertical
        primary: '{{ states(''input_number.garmin_bike_year_min'') }}'
        secondary: Minuten (Jahr)
        tap_action:
          action: more-info
      - type: custom:mushroom-template-card
        icon: mdi:counter
        entity: counter.garmin_bike_sessions
        layout: vertical
        primary: '{{ states(''counter.garmin_bike_sessions'') }}'
        secondary: Einheiten (Jahr)
        tap_action:
          action: more-info
        icon_color: green
    cards: []
    

    Aus meinem Home Assistant, Stand 15. März 2026.