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 |
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 + Uhrzeitder letzten Aktualisierung sowieOnlineoder die aktuelle Fehleranzahl
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
1begrenzt - der Zellwert wird aus Bildschirmbreite, Spaltenzahl und
spacingDpberechnet - im Reiter
OptikkönnenportraitColumnsundlandscapeColumnslokal pro Gerät überschrieben werden - bleibt ein Override leer, verwendet die App wieder den Wert aus der geladenen JSON
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. Bei expandable: true begrenzt ein explizit gesetzter Wert zusätzlich die Popup-Breite |
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 |
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:
iddarf nicht leer seinwidthColumnsmuss mindestens1sein, wenn gesetzthighlightColormuss ein gültiger Hex-Farbwert wie#RRGGBBoder#AARRGGBBsein, wenn gesetztborderColormuss ein gültiger Hex-Farbwert wie#RRGGBBoder#AARRGGBBsein, wenn gesetztwidgetIdsdarf nicht leer seinvalueWidgetIdmuss, wenn gesetzt, auf ein Widget innerhalb derselben Gruppe zeigen- alle in
valuePatternreferenzierten Widget-IDs müssen, wenn gesetzt, auf Widgets innerhalb derselben Gruppe zeigen - Widgets dürfen nicht in mehreren Gruppen auftauchen
Kompatibilität:
- das alte Feld
maxWidthDpwird beim Einlesen weiterhin akzeptiert - für neu Konfigurationen sollte
widthColumnsverwendet werden - wenn
borderColorfehlt, verwendet die App zuersthighlightColorund danach die globale Theme-FarbegroupHighlight - bei
expandable: trueerscheint die Gruppe im Haupt-Dashboard immer als1/1Kachel; das Popup nutzt dieselbe Widgetgrösse wie das Haupt-Grid und höchstens fünf Spalten - ist bei einer expandierbaren Gruppe
widthColumnsexplizit gesetzt, begrenzt dieser Wert das Popup zusätzlich - wenn
valueWidgetIdgesetzt ist, rendert die eingeklappte Kachel den bereits aufgelöstenvaluedieses Widgets unter dem Gruppen-Icon - wenn
valuePatterngesetzt ist, rendert die eingeklappte Kachel dieses Template mit den aufgelöstenvalue-Texten der darin referenzierten Widget-IDs; die benötigten IDs werden direkt aus den Platzhaltern extrahiert
DashboardGroupIconConfig¶
| Feld | Typ | Default | Bedeutung |
|---|---|---|---|
name |
String? |
null |
optionaler Material-Icon-Name der eingeklappten Gruppen-Kachel |
emoji |
String? |
null |
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 |
Editor-Hinweise¶
Für Gruppen und Reiter bietet die App zusätzlich Wizard-Schritte mit strukturierter Bearbeitung:
- Grunddaten und Inhalt sind auf Karten aufgeteilt
- Icon-Felder besitzen eine suchbare Iconauswahl
- Farbfelder besitzen einen Color-Picker mit optionaler Rückkehr zum Standardwert
- im ersten Schritt können Gruppen und Reiter direkt mit Bestätigungsdialog gelöscht werden
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
groupIdsundwidgetIdsbeide leer sind, zeigt der Tab automatisch alle ungruppierten Widgets und alle Gruppen - Tabs werden nach
order, danach nachtitle, danach nachidsortiert - 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
sharedRequestIdlesen 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
Acceptgesetzt ist, fügt die App automatischapplication/json, image/png, image/jpeghinzu
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"
]
}
]
}
}