Tabs, Gruppen und Grid¶
Diese Seite beschreibt die sichtbare Dashboard-Struktur und das Packing der Widgets ins Raster.
Tabs¶
Tabs sind optionale Reiter. Wenn keine Tabs definiert sind, erstellt die App intern einen Default-Tab mit dem Titel Dashboard.
Sortierung der Tabs¶
Tabs werden in dieser Reihenfolge sortiert:
dashboard.tabs[].orderdashboard.tabs[].titledashboard.tabs[].id
Automatischer Inhalt eines Tabs¶
Wenn ein Tab weder widgetIds noch groupIds definiert:
- zeigt er alle ungruppierten Widgets
- und alle Gruppen
Das ist praktisch für ein Haupt-Dashboard, in dem alles sichtbar sein soll.
Gruppen¶
Gruppen erzeugen optisch zusammenhängende Bereiche mit eigener Breite im Raster.
Eine Gruppe:
- hat
widgetIds - hat
order - kann optional
titletragen - kann optional
expandable: trueals1/1Link-Kachel im Grid erscheinen - kann optional ein
iconfür diese eingeklappte Kachel tragen - kann optional über
valueWidgetIddenvalueeines Gruppen-Widgets auf der eingeklappten Kachel spiegeln - kann optional über
valueWidgetIdsplusvaluePatternmehrere Gruppen-Values auf der eingeklappten Kachel kombinieren - kann optional
highlightColorundborderColortragen - begrenzt ihren Inhalt über
widthColumns
Die Breite bezieht sich auf die aktuell verfügbare Spaltenzahl des Grids.
Für expandable-Gruppen gilt abweichend:
- im Haupt-Grid belegen sie immer genau
1x1 - optional zeigen sie unter dem Icon den aufgelösten
valueeines pervalueWidgetIdreferenzierten Widgets - alternativ rendern sie ein
valuePatternmit den aufgelöstenvalue-Texten ausvalueWidgetIds - ein Klick öffnet die eigentlichen Widgets in einem Popup
- das Popup verwendet dieselbe Widgetgrösse wie das Haupt-Grid
- die Popup-Breite nutzt dieselbe Spaltenzahl wie das Haupt-Grid, aber höchstens
5
Beispiel:
widthColumns: 3nutzt drei Raster-Spalten- ein Wert grösser als die aktuell verfügbaren Spalten verhält sich wie Vollbreite
Sortierung innerhalb eines Tabs¶
Der Tab-Inhalt wird in ResolvedDashboardContentBlock aufgelöst.
Es gibt zwei Blockarten:
- freie Widget-Blöcke
- Gruppenblöcke
Alle Einträge werden gemeinsam nach:
order- Deklarationsreihenfolge innerhalb des Tabs
sortiert.
Wichtig:
- gleiche
order-Werte bleiben stabil in der JSON-Reihenfolge - das gilt für Widgets und Gruppen
Grid-Packing¶
Im eigentlichen Raster passiert danach ein zweiter Schritt:
- Widgets eines Blocks werden nach
layout.ordersortiert - das Packing sucht die erste freie Position von oben nach unten und von links nach rechts
- Grösse und aktuelle Spaltenzahl bestimmen die konkrete Platzierung
Orientierung¶
Die Spaltenzahl hängt von der Geräteausrichtung ab:
- Hochformat:
portraitColumns - Querformat:
landscapeColumns
Bei Drehung wird das Grid neu gepackt. Die logische Reihenfolge bleibt erhalten, die konkrete Position kann sich ändern.
Vollbreite mit full/n¶
Vollbreiten-Widgets sind speziell:
- sie nutzen immer alle aktuell verfügbaren Spalten
- sie starten auf einer neuen Zeile
- nachfolgende Widgets dürfen Lücken vor diesem Widget nicht auffüllen
Dadurch kann full/1 oder full/2 bewusst als Zeilenumbruch oder Abschnittskarte verwendet werden.
Gruppen und Vollbreite zusammen¶
Sinnvolle Kombinationen:
- Gruppe für thematisch zusammenhängende Widgets
- innerhalb der Gruppe ein
full/1-Widget als Trenner oder grosser Statusbanner
Beispiel¶
{
"dashboard": {
"groups": [
{
"id": "living-room-windows",
"title": "Fenster",
"order": 30,
"widthColumns": 4,
"highlightColor": "#C88A43",
"borderColor": "#8A4A17",
"widgetIds": [
"window-left",
"window-right",
"door-garden"
]
}
],
"tabs": [
{
"id": "living",
"title": "Wohnzimmer",
"order": 20,
"groupIds": [
"living-room-windows"
],
"widgetIds": [
"main-light",
"ambient-light",
"energy-banner"
]
}
]
}
}
Wenn energy-banner die Grösse full/1 hat, bildet es innerhalb des freien Widget-Blocks einen harten Zeilenumbruch.
Layout-Empfehlungen¶
1/1für viele kleine Statuswerte2/1für interaktive Widgets mit etwas mehr Text3/1oder4/1für Übersichtenfull/1für Trennkacheln, Bereichsüberschriften oder grosse Summenwerte- Gruppen für physische Räumlichkeiten oder thematische Bereiche
borderColorfür Räume oder Sicherheitsbereiche, die im Layout klar abgegrenzt sein sollen