Skip to content

Dashboard

Diese Seite beschreibt alle dashboard-weiten Konfigurationsobjekte.

DashboardConfig

Feld Typ Default Bedeutung
schemaVersion Int 1 Versionsmarker für das JSON-Schema
dashboard DashboardMetaConfig leer mit Defaults Titel, Layout, Gruppen und Tabs
defaults DashboardDefaultsConfig leer mit Defaults globale Request-Defaults und Shared-Status-Requests
widgets List<WidgetConfig> [] alle Widgets des Dashboards

DashboardMetaConfig

Feld Typ Default Bedeutung
title String "Smart Home" Haupttitel im Dashboard
subtitle String? null optionales Metadatum; wird aktuell nicht als eigener Untertitel im App-Header gerendert
layout DashboardLayoutConfig siehe unten globale Grid-Parameter
defaultTabId String? null bevorzugter Start-Tab
groups List<DashboardGroupConfig> [] optisch zusammenhängende Gruppen
tabs List<DashboardTabConfig> [] optionale Reiter

Hinweis:

  • die App zeigt im Kopfbereich aktuell den Titel und direkt darunter eine kompakte Statuszeile
  • diese Statuszeile enthält Datum + Uhrzeit der letzten Aktualisierung sowie Online oder die aktuelle Fehleranzahl
  • subtitle bleibt aus Kompatibilitätsgründen im Schema erhalten, wird aber nicht separat angezeigt

DashboardLayoutConfig

Feld Typ Default Bedeutung
portraitColumns Int 4 Spaltenzahl im Hochformat
landscapeColumns Int 6 Spaltenzahl im Querformat
spacingDp Int 14 Abstand zwischen Rasterzellen
contentPaddingDp Int 16 Aussenabstand um den Dashboard-Inhalt
cornerRadiusDp Int 24 Eckenradius der Widget-Karten

Hinweis:

  • die Spaltenzahl wird zur Laufzeit mindestens auf 1 begrenzt
  • der Zellwert wird aus Bildschirmbreite, Spaltenzahl und spacingDp berechnet

DashboardGroupConfig

Feld Typ Default Bedeutung
id String kein Default eindeutige Gruppen-ID
title String? null optionale Gruppenüberschrift
order Int 0 Sortierung innerhalb eines Tabs
widthColumns Int? null Breite der Gruppe in Raster-Spalten; ohne Wert nutzt die Gruppe die konfigurierten Landscape-Spalten
expandable Boolean false zeigt die Gruppe als 1/1 Link-Kachel und öffnet den Inhalt in einem Popup
icon DashboardGroupIconConfig? null optionales Icon der eingeklappten Gruppen-Kachel
valueWidgetId String? null optionales Widget der Gruppe, dessen aufgelöster value auf der eingeklappten 1/1 Kachel angezeigt wird
valueWidgetIds List<String> [] optionale Liste von Gruppen-Widgets, deren aufgelöste value-Texte für ein valuePattern bereitstehen
valuePattern String? null optionales Template für die eingeklappte Kachel, zum Beispiel {{window-left}} / {{window-right}}
highlightColor String? null optionale Hex-Farbe für Titelakzent und Gruppen-Default
borderColor String? null optionale Hex-Farbe nur für die Gruppenumrandung
widgetIds List<String> [] Widgets der Gruppe

Validierungsregeln:

  • id darf nicht leer sein
  • widthColumns muss mindestens 1 sein, wenn gesetzt
  • highlightColor muss ein gültiger Hex-Farbwert wie #RRGGBB oder #AARRGGBB sein, wenn gesetzt
  • borderColor muss ein gültiger Hex-Farbwert wie #RRGGBB oder #AARRGGBB sein, wenn gesetzt
  • widgetIds darf nicht leer sein
  • valueWidgetId muss, wenn gesetzt, auf ein Widget innerhalb derselben Gruppe zeigen
  • alle valueWidgetIds müssen, wenn gesetzt, auf Widgets innerhalb derselben Gruppe zeigen
  • Widgets dürfen nicht in mehreren Gruppen auftauchen

Kompatibilität:

  • das alte Feld maxWidthDp wird beim Einlesen weiterhin akzeptiert
  • für neu Konfigurationen sollte widthColumns verwendet werden
  • wenn borderColor fehlt, verwendet die App zuerst highlightColor und danach die globale Theme-Farbe groupHighlight
  • bei expandable: true erscheint die Gruppe im Haupt-Dashboard immer als 1/1 Kachel; das Popup nutzt dieselbe Widgetgrösse wie das Haupt-Grid und höchstens fünf Spalten
  • wenn valueWidgetId gesetzt ist, rendert die eingeklappte Kachel den bereits aufgelösten value dieses Widgets unter dem Gruppen-Icon
  • wenn valuePattern gesetzt ist, rendert die eingeklappte Kachel dieses Template mit den aufgelösten value-Texten aus valueWidgetIds; Platzhalter verwenden dabei direkt die Widget-IDs

DashboardGroupIconConfig

Feld Typ Default Bedeutung
name String? null optionaler Material-Icon-Name der eingeklappten Gruppen-Kachel
emoji String? "↗" Fallback, wenn kein passendes Material-Icon gesetzt ist
sizeDp Int? null optionale Icon-Grösse
color String? null optionale Hex-Farbe; ohne Wert nutzt die Kachel den Gruppenakzent

DashboardTabConfig

Feld Typ Default Bedeutung
id String kein Default eindeutige Tab-ID
title String kein Default sichtbare Bezeichnung
order Int 0 Sortierreihenfolge der Tabs
groupIds List<String> [] Gruppen, die in diesem Tab erscheinen
widgetIds List<String> [] Widgets, die direkt in diesem Tab erscheinen

Verhalten:

  • wenn groupIds und widgetIds beide leer sind, zeigt der Tab automatisch alle ungruppierten Widgets und alle Gruppen
  • Tabs werden nach order, danach nach title, danach nach id sortiert
  • innerhalb eines Tabs darf ein Widget nicht gleichzeitig direkt und über eine Gruppe referenziert sein

DashboardDefaultsConfig

Feld Typ Default Bedeutung
request RequestDefaultsConfig siehe unten globale Defaults für Header und Timeout
sharedStatusRequests List<SharedStatusRequestConfig> [] wiederverwendbare Sammelrequests

SharedStatusRequestConfig

Feld Typ Default Bedeutung
id String kein Default eindeutige Kennung für Widgets
request EndpointRequestConfig kein Default eigentlicher Status-Request

Laufzeitverhalten:

  • pro Aktualisierungszyklus wird jeder referenzierte Shared-Request genau einmal ausgeführt
  • alle Widgets mit derselben sharedRequestId lesen anschliessend aus derselben Antwort

RequestDefaultsConfig

Feld Typ Default Bedeutung
headers Map<String, String> {} globale Standardheader
timeoutMs Long 6000 Standardtimeout in Millisekunden

Merge-Regel:

  • die finalen Header ergeben sich aus defaults.request.headers + request.headers
  • falls kein Accept gesetzt ist, fügt die App automatisch application/json, image/png, image/jpeg hinzu

Beispiel

{
  "dashboard": {
    "title": "Mein Smart Home",
    "defaultTabId": "home",
    "layout": {
      "portraitColumns": 4,
      "landscapeColumns": 6,
      "spacingDp": 14,
      "contentPaddingDp": 16,
      "cornerRadiusDp": 26
    },
    "groups": [
      {
        "id": "living-room-controls",
        "title": "Wohnzimmer",
        "order": 14,
        "expandable": true,
        "icon": {
          "name": "light",
          "sizeDp": 28
        },
        "valueWidgetId": "living-room-light",
        "highlightColor": "#C88A43",
        "borderColor": "#8A4A17",
        "widgetIds": [
          "living-room-light",
          "living-room-dimmer"
        ]
      }
    ],
    "tabs": [
      {
        "id": "home",
        "title": "Zuhause",
        "order": 10,
        "groupIds": [
          "living-room-controls"
        ]
      }
    ]
  }
}

Siehe auch