Kompaktes Dashboard mit Templates für alle Elemente

Liebe Community,
ich möchte euch hier mein Dashboard zeigen. Ich weiß, es gibt bereits ziemlich viele veröffentlichte Dashboards. Hier sind MEINE Schwerpunkte bei der Entwicklung:

  1. Ich wollte auf der ersten Dashboardseite einen gesamten Überblick bekommen.
  2. Ich bediene unseren HA in der Regel per Handy. Dabei sind die großzügigen Standardkarten sehr lästig, weil sie zu viel Platz einnehmen. Ich wollte aber auch nicht auf den Komfort dieser Karten verzichten.
  3. Auf jedem Dashboard gibt es extrem viele Karten, die sich außer verschiedener Entitäten oder Texte/Icons nicht unterscheiden.
  4. Ich möchte, dass auch Personen, die sich mit der Erstellung von Dashboards etc. nicht auskennen, unseren HA anpassen können.

Herausgekommen ist ein kompaktes Dashboard, dessen Elemente mittels der declutterung-card definiert sind. Dabei sind Aussehen und Funktionalität für jeden Elementtyp in Templates abgelegt und in den Karten wird das dann etwa so angewendet:

type: custom:vertical-stack-in-card
cards:
  - type: custom:decluttering-card
    template: title_template
    variables:
      - title: Erdgeschoß
  - type: custom:decluttering-card
    template: subtitle_template
    variables:
      - subtitle: Wohnzimmer
      - icon: mdi:sofa
      - feuchtigkeitssensor: sensor.heizung_wohnzimmer_int0000007_luftfeuchtigkeit
      - temperatursensor: sensor.heizung_wohnzimmer_int0000007_temperatur
  - type: custom:layout-card
    layout_type: custom:grid-layout
    layout:
      grid-template-columns: 1fr 1fr
      grid-template-rows: 1fr
      margin: 0px 0px 0px 0px
    cards:
      - type: custom:decluttering-card
        template: licht_template
        variables:
          - name: Ambientlicht
          - icon: mdi:lamps
          - entity: switch.wohnzimmer_ambientlicht
      - type: custom:decluttering-card
        template: licht_template
        variables:
          - name: Lichterkette
          - icon: mdi:string-lights
          - entity: switch.steckdose_7
      - type: custom:decluttering-card
        template: rollladen_template
        variables:
          - name: Rollladen
          - entity: cover.wohnzimmer_rollladen
      - type: custom:decluttering-card
        template: climate_template
        variables:
          - name: Thermostat
          - entity: climate.heizung_wohnzimmer_int0000007
    card_mod:
      style: |
        :host {
          --grid-card-gap: 4px !important;
        }

Durch die Templates habe ich hunderte von Codezeilen gespart, die sonst immer wider per cut and paste vervielfältigt wurden. Außerden habe ich eine einzige Stelle - im Template - um alle Instanzen zu verändern.
Und das sieht bei mir so aus:


Auf dem Handy sind die 4 Spalten untereinander und auf dem Tablet sind je 2 nebeneinander.
Für Titel (“Erdgeschoß”), Untertitel (“Wohnzimmer”) und Entitäten gibt es jeweils Templates.
Für alle Entitäten habe ich die mushroom-template-card genutzt. Sie erhält als Parameter nur: Namen, Icon, Entität. Das dynamische Verhalten ist komplett in den Templates enthalten!
Ich bin davon ausgegangen, dass die meisten Entitäten in der Regel wie Toggles benutzt werden (an/aus, auf/zu etc.).

      tap_action:
        action: toggle
      hold_action:
        action: more-info

Über die hold_action kann ich die Entität dann komfortabel komplett bedienen.

Im zweiten Dashboard können Szenarien aktiviert werden:

Das dritte Dashboard hat 3 Bereichsseiten und erlaubt die Einzelbedienung von Entitäten (auch aus Gruppen) sowie die Erstellung von Zeitplänen mittels scheduler-card - alles per UI!



Das vierte Dashboard dient der Überwachung der wesentlichen Aktivitäten:

Und zuletzt noch das Dashboard der Wärmepumpe:

So, das war’s :slight_smile: . Evtl. kann sich ja jemand Ideen davon abgreifen. Auf jeden Fall hatte ich hier im Forum, aber auch in anderen, tolle Hilfe bekommen, wenn es mal klemmte.
Auf Wunsch kann ich gerne die YAML-Definition incl. Templates zur Verfügung stellen.

9 „Gefällt mir“

Sehr angenehm anzuschauen.

1 „Gefällt mir“

Gefällt mir sehr gut. Clean und aufgeräumt. Danke fürs teilen!

1 „Gefällt mir“

Hallo Werner,
ich habe dein Dashboard gesehen und bin gerade dabei ein paar Sachen nachzubauen.
Wäre dir sehr dankbar, wenn du deine YAML-Definition incl. Templates zur Verfügung stellen könntest.
Gruß Micha

Habs Dir per PN zugeschickt. Viel Vergnügen …

Hallo Werner, deine YAML / Templates Datei(en) würden mich auch interessieren. Bin auf der Suche nach einem kompakten Dashboard und deins gefällt mir sehr gut.

Danke, Gruß Michael

Hallo Werner, deine YAML / Templates Datei(en) würden mich auch interessieren. Bin auf der Suche nach einem kompakten Dashboard und deins gefällt mir sehr gut.

Danke für das große Interesse !!!
Ich versuche einfach mal, hier die YAML des gesamten Desktops gezippt einzustellen. Ich habe mir auch schon den Vorschlag von dp20eic , das alles als Git-Repository zur Verfügung zu stellen angesehen, aber das ist mir dann doch zu aufwändig.
Im Anhang also die YAML.
Als Theme habe ich “Catppuccin Mocha” verwendet. Die Karten sind oft Mushroomcards und natürlich ist auch die decluttering-card, sowie die “power-flow-card-plus” dabei. Ich denke, was sonst noch verwendet wurde, werden euch die Fehlermeldungen sagen.
Für diejenigen, die gerade erste Gehversuche in HA machen, folgender Hinweis:
Um ein “Test-Dashboard” zu erhalten, könnt ihr dieses in “Einstellungen->Dashboards” hinzufügen. Um mein YAML dort einzufügen, klickt ihr auf den Stift rechts oben (Bearbeiten) und dann auf die drei Pünktchen rechts oben. Wählt "Raw-Konfigurationeditor aus. Ihr seht das YAML-Textfeld, in dem noch quasi nichts drin stehen sollte. Löscht den Inhalt und ersetzt ihn durch copy/paste mit meinem Inhalt. Abspeichern und die Fehlermeldungen bezüglich undefinierter Karten bearbeiten, indem ihr sie aus HACS ladet.

Main Dashboard.yaml (104,4 KB)

1 „Gefällt mir“

Hi Werner,

ich habe das mal geladen und finde es grundsätzlich klasse. Nutzt mir nur nichts, wenn ich je nach Zustand ein anderes ICON oder BADGE nutzen möchte. Finde jedenfalls nicht raus, ob bzw. wie das geht.

Hast Du eine Ahnung?

Hallo Roberto,
ich habe die ganze Aussehenslogik ja in den decluttering-Templates untergebracht, da ich für gleichartige Devices (Rollläden etc.) gleichartiges Aussehen und Verhalten haben wollte.

Die Templates müssen (leider) zu Beginn des view-YAMLs stehen. Hast Du da mal reingeschaut?

Ich schlage folgende Vorgehensweise vor, damit Du da langsam reinkommst:

  • Erzeuge einen komplett neuen Testview.
  • Gehe in raw-bearbeiten und ersetze den dortigen Code mit meinem und speichere es ab.
  • Lösche alle Tab-Views außer “Info”.
  • Lösche in diesem View alle Karten und Badges.
  • Erzeuge über das Pluszeichewn eine neue Karte und im Dialog kannst Du ganz unten “eine benutzerdefinierte Karte“ auswählen.
  • Im YAML-Code trage bitte folgendes ein und speichere es ab.:
type: custom:vertical-stack-in-card 
cards:
  - type: custom:decluttering-card
    template:   
  - type: custom:decluttering-card
    template: subtitle_ohne_badges_template
    variables:
      - title: Erdgeschoß
    variables:
      - subtitle: Treppenhaus
      - icon: mdi:stairs
  - type: grid
    columns: 2
    square: false
    cards:
      - type: custom:decluttering-card
        template: rollladen_template
        variables:
          - name: Rollladen
          - entity: cover.treppenhaus_rollladen
      - type: custom:decluttering-card
        template: licht_template
        variables:
          - name: Lampignons
          - icon: mdi:string-lights
          - entity: switch.steckdose_8
    card_mod:
      style: |
        :host {
          --grid-card-gap: 4px !important;
        }


Du musst da nur die beiden Entitäten durch eine Deiner Rollläden und eins Deiner Lichter ersetzen.Da dürfte ansonsten nichts mehr fehlen, um eine Anzeige zu bekommen. Dann kannst Du ja nach und nach etwas dazu nehmen, bis Du Dich an die Herangehensweise gewöhnt hast. Im “rollladen_template” findest Du auch, wie Du das Icon und die Icon-Farbe dynamisch änderst bzw. die actions nutzt.
Noch was vergessen: Du musst natürlich die mushroom-cards und die decluttering-card installiert haben, da mein Dashboard fundamental darauf aufbaut.
Viel Glück und melde Dich ruhig, wenn Du weitere Unterstützung brauchst.
Werner

Danke, habe es aber mittlerweile selber raus…. :zany_face:

decluttering_templates:
  mushroom_template:
    default:
      - icon: mdi:comment-question
      - my_secondary: ''
      - my_badge: mdi:lightbulb-outline
      - my_off_icon: mdi:floor-lamp-outline
      - my_on_icon: mdi:floor-lamp
      - my_contact_entity: mdi:window-closed-variant
      - my_contact: mdi:window-closed-variant
      - my_motion: mdi:motion-sensor
      - my_motion_entity: mdi:motion-sensor
    card:
      type: custom:mushroom-template-card
      entity: '[[entity]]'
      primary: '[[name]]'
      icon: |
        {% if is_state('[[entity]]', 'on') %}
          {{ "[[my_on_icon]]" }}
        {% else %}
          {{ "[[my_off_icon]]" }}
        {% endif %}         
      badge_icon: |
        {% if is_state('[[my_contact_entity]]', 'on') %}
           {{ "[[my_contact]]" }}
        {% elif is_state('[[my_motion_entity]]', 'on') %}
           {{ "[[my_motion]]" }}
        {% elif is_state('[[entity]]', 'on') %}
           {{ "[[my_badge]]" }}             
        {% else %}
           {{ "[[]]" }}           
        {% endif %}  
      badge_color: red
      icon_color: |
        {% if is_state('[[entity]]', 'on') %}
          #FFC106
        {% else %}
          blue
        {% endif %}
      secondary: |
        {{ "[[my_secondary]]" }} 
      tap_action:
        action: toggle
      hold_action:
        action: more-info
      vertical: true
      card_mod:
        style:
          ha-tile-info$: |
            .primary {
              font-size: 14px !important;
            } 
            .secondary {
              font-size: 10px !important;
            }

So rufe ich das dann auf…

type: custom:decluttering-card
template: mushroom_template
variables:
  - entity: light.zb_licht_wohnzimmer
  - name: Stehlampe
  - my_secondary: ""
  - my_badge: mdi:lightbulb-on-90
  - my_off_icon: mdi:floor-lamp-outline
  - my_on_icon: mdi:floor-lamp
  - my_contact_entity: mdi:window-closed-variant
  - my_contact: mdi:window-open-variant
  - my_motion: mdi:motion-sensor
  - my_motion_entity: mdi:motion-sensor

Hallo WernerM,

Du hast mich da auf etwas gebracht. Habe mal meine beiden Thermometeransichten “decluttert”.

Ich habe den Code je Ansicht von 628 Zeilen auf 88 reduzieren können. Der Wahnsinn!! Und Änderungen passieren Zentral und man muss nicht alles einzeln ändern.

Danke für den Denkanstoß!!! :+1:

Ist alles in einer custom:swipe-card, sonst bräuchte es zuviel Platz.

  
type: custom:swipe-card
card_width: 184px
start_card: 2
show:
  graph: true
  labels: false
parameters:
  spaceBetween: -10
  effect: coverflow
  grabCursor: true
  centeredSlides: true
  slidesPerView: 2
  autoHeight: true
  loop: true
  coverflowEffect:
    rotate: 50
    stretch: 0
    depth: 100
    modifier: 1
    slideShadows: true
  pagination:
    type: NONE
  type: vertical-stack
cards:
  - type: custom:decluttering-card
    template: temperatur_template
    variables:
      - entity_temperatur: sensor.bt_kueche_temperature
      - entity_feuchtigkeit: sensor.bt_kueche_humidity
      - entity_battery: sensor.bt_kueche_batterie
      - my_heading: Kochen

So werden die einzelnen Thermometer an das Template übergeben und fertig. Sehr übersichtlich!!!

1 „Gefällt mir“

Hallo RobertoCravallo,
sehr schöne und ausführliche Anwendung der Templates. :+1: Hab mir direkt auch aus Deinem Code was abgegriffen.
Ich habe übrigens inzwischen auch decluttering Templates in Benutzung, die selbst decluttering_cards benutzen. Also eine geschachtelte Anwendung, hier z.B. in einem Popup:

  battery_popup_template:
    variables:
      - entity
      - titel
    card:
      type: custom:vertical-stack-in-card
      cards:
        - type: custom:decluttering-card
          template: popup_title_template
          variables:
            - title: '[[titel]]'
          tap_action:
            action: fire-dom-event
            browser_mod:
              service: browser_mod.close_popup
        - type: entities
          entities:
            - type: custom:template-entity-row
              entity: '[[entity]]'
              name: Ladestatus
              state: |
                {% set s = states('[[entity]]') %}
                {% set prozent = '' %}
                {% if s == 'on' %}
                  {% set state = 'niedrig' %}
                {% elif s == 'off' %}
                  {% set state = 'normal' %}
                {% else %}
                  {% set state = s | int(0) %}
                  {% set prozent = '%' %}
                {% endif %}
                {{ state }} {{ prozent }}
            - type: custom:template-entity-row
              name: Batterietyp
              icon: mdi:battery
              state: >
                {% set type =
                states['[[entity]]'].attributes.battery_type_and_quantity 
                                      or 'unbekannt' %} 
                {{ type }}
            - type: custom:template-entity-row
              name: Betriebsspannung
              icon: mdi:flash
              state: >
                {% set entityId = '[[entity]]' %}  

                {% set spannung = 'unbekannt' %}  

                {% set unit = '' %}


                {% set name = entityId.split('.')[-1] %}  

                {% set s1 =
                name.replace('_battery_plus_low','_betriebsspannung') %} 

                {% set s2 = s1.replace('_battery_plus','_betriebsspannung') %}

                {% set spannung_entity = 'sensor.' ~ s2 %} 

                {% if states(spannung_entity) not in
                ['unknown','unavailable','none'] %}
                  {% set spannung = states(spannung_entity) %}
                  {% set unit = state_attr(spannung_entity,'unit_of_measurement') %}
                {% endif %}  

                {{ spannung }} {{ unit }}

Damit habe ich es dann endlich geschafft, so etwas wie ein “more-info” mit setzbaren Sensoren selbst zu machen.
Bei Deiner Anwendung kommt mir sofort der Gedanke, die ganze swipe-card als Template zu machen, und als Parameter eine oder mehrere Liste(n) zu übergeben. Das werde ich irgendwann mal ausprobieren …