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 |
| 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