Aktionen und Dialoge¶
Diese Seite dokumentiert alle Aktionsarten sowie die typspezifischen Dialog-Widgets.
WidgetActionConfig¶
| Feld | Typ | Default | Bedeutung |
|---|---|---|---|
type |
WidgetActionType |
endpoint |
Aktionsart |
request |
EndpointRequestConfig? |
null |
Request für Endpoint-Aktionen |
targetTabId |
String? |
null |
Ziel-Tab für switch_tab |
url |
String? |
null |
Browser-URL für open_url |
prompt |
Boolean |
false |
zeigt vor dem Ausführen einen Bestätigungsdialog |
refreshAfterAction |
Boolean |
true |
steuert Refresh nach erfolgreicher Aktion |
WidgetActionType¶
| Wert | Wirkung |
|---|---|
endpoint |
führt einen HTTP-Request aus |
switch_tab |
wechselt auf einen anderen Tab |
open_url |
öffnet eine URL im Browser |
Endpoint-Aktionen¶
Normale klickbare Widgets verwenden action.type = "endpoint" oder lassen type weg.
Ohne request.method gilt dieselbe Auto-Regel wie bei Status-Requests:
- kein Body ->
GET - Body vorhanden ->
POST
Beispiel:
"action": {
"request": {
"url": "http://192.168.1.20/api/lights/living-room/toggle"
},
"prompt": true,
"refreshAfterAction": true
}
Bestätigungsdialoge mit prompt¶
Für Aktionen mit spürbarer Wirkung kann ein vorgeschalteter Bestätigungsdialog aktiviert werden.
Mögliche Stellen:
widgets[].action.promptfür normale Tap-Aktionen und Slider-Widgetswidgets[].content.select.action.promptfür Select-Bestätigungenwidgets[].content.shutter.sliderAction.promptfür die Zielposition im Rollladen-Dialogwidgets[].content.shutter.upAction.prompt,stopAction.prompt,downAction.promptfür Rollladen-Kommandos
Laufzeitverhalten:
- der Dialogtitel nutzt den aktuell sichtbaren Widget-Titel; wenn keiner aufgelöst werden kann, fällt die App auf die Widget-ID zurück
- der Dialogtext ist aktuell generisch und nicht pro Widget konfigurierbar
- erst nach Bestätigung wird der eigentliche Request ausgeführt
Beispiel für einen bestätigten Aktionsbutton:
{
"content": {
"mode": "icon_text",
"title": {
"mode": "static",
"value": "Warmwasser jetzt"
}
},
"action": {
"request": {
"url": "http://192.168.1.20/api/hot-water/boost-now"
},
"prompt": true,
"refreshAfterAction": true
}
}
Tab-Wechsel¶
Validierung:
targetTabIdmuss auf einen existierenden Tab verweisen
URL im Browser öffnen¶
Validierung:
- dieselbe URL-Policy wie bei normalen Requests
Slider-Widgets¶
Ein Slider-Widget benötigt zwei Bereiche:
content.sliderfür Bereich, Step und Statuspfadaction.requestfür den eigentlichen Action-Endpoint
WidgetSliderConfig¶
| Feld | Typ | Default | Bedeutung |
|---|---|---|---|
min |
Double |
kein Default | Untergrenze |
max |
Double |
kein Default | Obergrenze |
step |
Double |
1.0 |
Schrittweite |
valuePath |
String |
kein Default | JSON-Pfad des aktuellen Werts |
actionValueBindings |
List<RequestActionValueBindingConfig> |
[{json_body,value}] |
wohin der eingestellte Wert geschrieben wird |
Dialogverhalten:
- Tap öffnet Slider-Dialog
- Statuswert setzt die aktuelle Slider-Position
OKsendet den neuen Wert- bei
refreshAfterAction = falseerfolgt ein optimistisches Snapshot-Update
Select-Widgets¶
WidgetSelectConfig¶
| Feld | Typ | Default | Bedeutung |
|---|---|---|---|
valuePath |
String |
kein Default | JSON-Pfad des aktuellen Werts |
optionsPath |
String |
kein Default | JSON-Pfad zum Optionsarray |
optionValuePath |
String |
"value" |
Pfad innerhalb eines Optionsobjekts für den gesendeten Wert |
optionLabelPath |
String |
"label" |
Pfad innerhalb eines Optionsobjekts für die Anzeige |
action |
SelectActionConfig |
kein Default | Request für den bestätigten Wert |
SelectActionConfig¶
| Feld | Typ | Default | Bedeutung |
|---|---|---|---|
request |
EndpointRequestConfig |
kein Default | Action-Endpoint |
valueBindings |
List<RequestActionValueBindingConfig> |
[{json_body,value}] |
wohin der Wert geschrieben wird |
prompt |
Boolean |
false |
zeigt vor OK einen Bestätigungsdialog |
refreshAfterAction |
Boolean |
true |
Refresh-Steuerung |
Dialogverhalten:
- Tap öffnet ein Select-Feld
- Optionen kommen aus dem Status
- primitive Arrays wie
["A","B"]funktionieren ebenso wie Objektarrays prompt: truezeigt vor dem eigentlichen Senden einen zusätzlichen Bestätigungsdialog- bei erfolgreicher Bestätigung kann der Snapshot optimistisch aktualisiert werden
Beispiel mit Bestätigung:
"select": {
"valuePath": "mode",
"optionsPath": "available_modes",
"action": {
"request": {
"url": "http://192.168.1.20/api/heating/mode",
"method": "post",
"jsonBody": {
"mode": ""
}
},
"valueBindings": [
{
"target": "json_body",
"path": "mode"
}
],
"prompt": true
}
}
Rollladen-Widgets¶
WidgetShutterConfig¶
| Feld | Typ | Default | Bedeutung |
|---|---|---|---|
min |
Double |
0.0 |
Untergrenze |
max |
Double |
100.0 |
Obergrenze |
step |
Double |
1.0 |
Schrittweite |
valuePath |
String |
kein Default | JSON-Pfad der aktuellen Position |
sliderAction |
ShutterSliderActionConfig? |
null |
optionaler Action-Endpoint für Zielposition |
upAction |
WidgetActionConfig |
kein Default | separater Request für Hoch |
stopAction |
WidgetActionConfig? |
null |
optionaler Request für Stop |
downAction |
WidgetActionConfig |
kein Default | separater Request für Runter |
ShutterSliderActionConfig¶
| Feld | Typ | Default | Bedeutung |
|---|---|---|---|
request |
EndpointRequestConfig |
kein Default | Slider-Endpoint |
valueBindings |
List<RequestActionValueBindingConfig> |
[{json_body,value}] |
Wertbindung |
prompt |
Boolean |
false |
zeigt vor OK einen Bestätigungsdialog |
refreshAfterAction |
Boolean |
true |
Refresh-Steuerung |
Dialogverhalten:
- der Slider samt OK-Button erscheint nur, wenn
sliderActiongesetzt ist - die Kommando-Buttons liegen in einer Zeile als
Runter, optionalStop,Hoch Stoperscheint zusätzlich im Dialog, wennstopActiongesetzt ist- Buttons und Slider können unterschiedliche Endpoints nutzen
upAction,stopAction,downActionundsliderActionkönnen jeweils unabhängigprompt: truesetzenupAction,stopActionunddownActionverwenden dieselbeWidgetActionConfigwie normale Widgets
Gemeinsame Binding-Struktur¶
Slider-, Select- und Rollladen-Slider verwenden denselben Binding-Typ.
RequestActionValueBindingConfig¶
| Feld | Typ | Default | Bedeutung |
|---|---|---|---|
target |
RequestActionValueTarget |
json_body |
Zielort des Werts |
key |
String? |
null |
Key für Header oder Query-Parameter |
path |
String |
"value" |
JSON-Pfad im Body |
RequestActionValueTarget¶
| Wert | Wirkung |
|---|---|
json_body |
schreibt den Wert in den JSON-Body |
header |
schreibt den Wert in einen Header |
query_param |
schreibt den Wert in die URL-Query |
Beispiele für Bindings¶
Wert in JSON-Body schreiben¶
Wert in Header schreiben¶
Wert in Query-Parameter schreiben¶
Erfolgs- und Fehlerverhalten¶
Bei erfolgreicher Aktion:
refreshAfterAction = true: betroffenes Widget wird neu geladenrefreshAfterAction = false: optimistisches Update, soweit für den Typ vorgesehen
Bei Fehlern:
- das Widget erhält
hasError = true - eine User-Message wird gesetzt
- laufende Dialoge verlassen den Busy-Zustand