Das JSON-Dateiformat für SharKNX-Visualisierungsdashboards: Räume, Seiten, Widgets und die verwendeten Gruppenadressen.
Ein Dashboard lässt sich als JSON-Datei aus SharKNX exportieren und auf demselben oder einem anderen Gerät wieder importieren. Sie können es auch in einem Texteditor schreiben: Die App exportiert alle Felder, benötigt beim Import aber nur Angaben, die sie nicht selbst ableiten kann. So bleibt ein von Hand erstellter Entwurf kurz.
Beginnen Sie am einfachsten mit dem leeren Dashboard oder dem Beispielhaus. Oder erstellen Sie ein kleines Dashboard in der App, exportieren Sie es und bearbeiten Sie die Datei.
Auf dieser Seite
- Struktur
- Dashboard
- Räume und Seiten
- IDs und Verknüpfungen
- Widgets
- Gruppenadressen
- Farben und Symbole
- Widget-Typen
- Verbindung
- Vollständiges Beispiel
- Validierung
- Versionen
Struktur
Ein Dashboard enthält einen Raum, Home. Jeder andere Raum liegt in Home oder in einem weiteren Raum. Ein Raum hat eine oder mehrere Seiten, zwischen denen Sie wischen. Jede Seite enthält Widgets in einem Raster.
{
"format": 1,
"name": "Villa",
"home": {
"name": "Home",
"tiles": [
{ "type": "switch", "name": "Hall light", "command": "1/0/1", "status": "1/0/2" }
],
"rooms": [
{
"name": "Kitchen",
"tiles": [
{ "type": "switch", "name": "Counter light", "command": "1/4/1" }
]
}
]
}
}
In der Datei heißen Räume rooms, Seiten panels und Widgets tiles. Die Datei verwendet UTF-8-JSON; eine Byte-Order-Mark am Anfang wird akzeptiert.
Dashboard
Die oberste Ebene der Datei.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
format |
Nein | 1 |
Die Dateiformatversion. Siehe Versionen |
name |
Ja | (keiner) | Der Dashboard-Name, höchstens 50 Zeichen. Namen sind auf einem Gerät eindeutig: Beim Import eines bestehenden Namens können Sie eine Kopie erstellen oder das Dashboard ersetzen |
home |
Ja | (keiner) | Der Raum Home. Siehe Räume und Seiten |
theme |
Nein | auto |
auto (folgt dem hellen oder dunklen Modus des Geräts), light, dark, night, wave, sahara, aurora oder neon |
buttons |
Nein | filled |
Darstellung der Widget-Tasten: filled oder plain |
keepScreenOn |
Nein | false |
true hält den Bildschirm eingeschaltet, während das Dashboard geöffnet ist |
muteBanners |
Nein | false |
true zeigt Benachrichtigungen nur in Aktivität, ohne Banner |
favorites |
Nein | [] |
Widget-IDs auf der Favoritenseite, in dieser Reihenfolge, z. B. ["t1", "t4"] |
connection |
Nein | automatisch | Wie sich das Dashboard mit dem Bus verbindet. Siehe Verbindung |
Ein Feld project in einer importierten Datei wird ignoriert: Der Verweis auf ein Projekt im Archiv gehört zu dem Gerät, das die Datei erstellt hat.
Räume und Seiten
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
id |
Nein | zugewiesen | r und eine Zahl, z. B. r3. Home ist immer r0. Nur ein Raum, den eine Verknüpfung öffnet, benötigt eine ID. Siehe IDs und Verknüpfungen |
name |
Ja | (keiner) | Der Raumname, höchstens 50 Zeichen |
icon |
Nein | Standard | Ein Symbolname, z. B. kitchen. Siehe Farben und Symbole |
tiles |
Eines davon | (keiner) | Die Widgets eines Raums mit einer einzelnen Seite |
panels |
Eines davon | (keiner) | Die Seiten eines Raums mit mehreren Seiten, höchstens 10 |
rooms |
Nein | [] |
Die Räume innerhalb dieses Raums |
Verwenden Sie entweder tiles oder panels, nicht beide. Jede Seite in panels hat folgende Felder:
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
id |
Nein | zugewiesen | p und eine Zahl, z. B. p2 |
tiles |
Nein | [] |
Die Widgets der Seite, in Reihenfolge, höchstens 100 |
{
"format": 1,
"name": "Two pages",
"home": {
"name": "Home",
"panels": [
{ "tiles": [{ "type": "switch", "name": "Hall light", "command": "1/0/1" }] },
{ "tiles": [{ "type": "switch", "name": "Porch light", "command": "1/0/5" }] }
]
}
}
IDs und Verknüpfungen
Jeder Raum, jede Seite und jedes Widget hat eine ID: r für Räume, p für Seiten, t für Widgets, gefolgt von einer Zahl bis 999999. IDs sind innerhalb eines Dashboards eindeutig, nicht über mehrere Dashboards hinweg.
- Lassen Sie IDs weg, weist der Import sie oberhalb der höchsten ID in der Datei zu.
- Geben Sie eine ID an, wenn etwas darauf verweist: für einen Raum, den ein Navigationswidget öffnet, und ein Widget in
favorites. - Eine Verknüpfung oder ein Favorit muss eine in der Datei angegebene ID nennen. Eine ID, die die Datei nie deklariert, ist ein Fehler, selbst wenn der Import diese ID einem anderen Element zugewiesen hätte.
- Eine exportierte Datei enthält immer alle IDs.
Widgets
Felder, die jedes Widget hat:
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
type |
Ja | (keiner) | Der Widget-Typ. Siehe Widget-Typen |
name |
Ja | (keiner) | Auf dem Widget angezeigt, höchstens 50 Zeichen |
id |
Nein | zugewiesen | t und eine Zahl, z. B. t12 |
icon |
Nein | vom Typ vorgegeben | Ein Symbolname. Siehe Farben und Symbole |
size |
Nein | vom Typ vorgegeben | Rasterzellen, Breite × Höhe: 1x1, 2x1, 3x1, 2x2, 3x2 oder 3x3. Jeder Typ erlaubt bestimmte Größen |
| Typ | Funktion | Größen | Standardgröße |
|---|---|---|---|
navigation |
Öffnet einen Raum | 2x1, 3x1, 2x2 | 2x1 |
switch |
Schaltet etwas ein und aus | 1x1, 2x1, 2x2 | 2x1 |
statusIndicator |
Zeigt einen Ein/Aus-Zustand | 1x1, 2x1 | 1x1 |
valueDisplay |
Zeigt eine Zahl | 1x1, 2x1, 3x1, 2x2, je nach Anzeige | 2x1 |
valueControl |
Sendet eine Zahl | 1x1, 2x1, 3x1, 2x2 | 3x1 (2x1 ohne Bedienelement) |
modeStatus |
Zeigt ein Byte als benannte Zustände | 1x1, 2x1, 3x1 | 2x1 |
dimmer |
Eine dimmbare Leuchte | 1x1, 2x1, 3x1, 2x2 | 2x2 |
blind |
Eine Jalousie oder ein Rollladen | 1x1, 2x1, 3x1, 2x2, 3x2 | 2x2 |
scene |
Ruft eine Szene ab oder wechselt zwischen zwei | 1x1, 2x1, 2x2 | 2x1 |
scenes |
Eine Reihe von Szenentasten | 2x1, 2x2, 3x2, 3x3 | 2x2 |
tunableWhite |
Eine Leuchte mit Farbtemperatur | 1x1, 2x1, 3x1, 2x2, 3x2 | 2x2 |
colorLight |
Eine Leuchte mit RGB, RGBW oder RGB + Weiß | 1x1, 2x1, 3x1, 2x2, 3x2 | 2x1 |
thermostat |
Ein Raumtemperatur-Sollwert | 1x1, 2x1, 3x1, 2x2 | 2x2 |
fanCoil |
Ein Fan-Coil-Gerät | 1x1, 2x1, 3x1, 2x2, 3x2 (3x3 mit integrierten Funktionen) | 2x1 |
airConditioner |
Ein Splitgerät oder VRV über sein KNX-Gateway | 1x1, 2x1, 3x1, 2x2, 3x3 | 2x2 |
Eine Datei mit einem Typ, den diese SharKNX-Version nicht kennt, wird nicht importiert.
Gruppenadressen
Ein Widget sendet an bestimmte Adressen (Befehl) und zeigt andere an (Status). Gruppenadressen werden in drei Ebenen geschrieben, z. B. "1/2/3". Ein DPT besteht aus Haupt- und Untertyp, z. B. "1.001" oder "9.001".
Kurzform. Geben Sie nur die Adresse an; sie übernimmt den DPT ihrer Funktion: ein Schaltbefehl 1.001, die Helligkeit eines Dimmers 5.001, eine Wertanzeige den DPT ihres valueType. Jeder Widget-Typ unten nennt seine Standardwerte.
{ "type": "switch", "name": "Hall light", "command": "1/0/1", "status": "1/0/2" }
Vollständige Form. Um einen anderen DPT desselben Haupttyps zu verwenden (1.019 für einen Fensterkontakt, 9.004 für einen Luxwert), einen Befehl an mehrere Adressen zu senden oder einen Status beim Öffnen des Dashboards nicht zu lesen:
{
"type": "switch",
"name": "All lights",
"command": { "targets": ["1/0/1", "1/1/1", "1/4/1"], "dpt": "1.001" },
"status": { "address": "1/0/2", "dpt": "1.001", "readOnOpen": false }
}
| Feld | Verwendung | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|---|
address |
Befehle und Statuswerte | Eines davon | (keiner) | Eine Gruppenadresse |
targets |
Befehle | Eines davon | (keiner) | Mehrere Gruppenadressen, die alle denselben Wert empfangen |
dpt |
Befehle und Statuswerte | Nein | von der Funktion vorgegeben | Der DPT, mit dem der Wert codiert wird |
readOnOpen |
Statuswerte | Nein | true |
false: den Status beim Öffnen des Dashboards nie lesen; auf den Bus warten |
Ein DPT muss zur Funktion passen: Ein Schalter verwendet beliebige DPT 1 (1.001 Schalten, 1.008 Auf/Ab, …), die Helligkeit eines Dimmers DPT 5.001.
Farben und Symbole
Farben sind Namen: red, orange, yellow, green, blue, purple oder grey. Jede Farbe hat einen hellen und einen dunklen Farbton, den das Design auswählt.
Symbole sind Namen aus dem Symbolkatalog der App, z. B. light_group, floor_lamp, table_lamp, wall_lamp, socket, shutter, curtains, heating, cooling, window, door, temperature, humidity, relax, dinner, all_off. Raumsymbole sind unter anderem home, living, kitchen, dining, bedroom, bathroom, office, hallway, garage, garden und terrace. Die Symbolauswahl in der App zeigt alle Namen.
Unbekannte Farb- oder Symbolnamen bleiben erhalten und werden mit dem Standard dargestellt. So lässt sich eine Datei aus einer neueren SharKNX-Version weiterhin importieren.
Widget-Typen
Navigation
Öffnet einen anderen Raum.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
target |
Ja | (keiner) | Die ID des geöffneten Raums, z. B. r1. Dieser Raum muss die ID in der Datei ausdrücklich angeben |
{
"format": 1,
"name": "Links",
"home": {
"name": "Home",
"tiles": [{ "type": "navigation", "name": "Kitchen", "icon": "kitchen", "target": "r1" }],
"rooms": [{ "id": "r1", "name": "Kitchen", "tiles": [] }]
}
}
Schalter
Ein Tippen wechselt zwischen Ein und Aus oder sendet immer denselben Wert.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
command |
Ja | (keiner) | Befehl, DPT 1 (1.001, wenn weggelassen) |
status |
Nein | (keiner) | Status, DPT 1 (1.001, wenn weggelassen). Ohne Status zeigt das Widget, was zuletzt auf command gesendet oder empfangen wurde |
fixed |
Nein | (keiner) | 1 oder 0: Jedes Tippen sendet diesen Wert, statt umzuschalten |
invertCommand |
Nein | false |
true sendet 0 für Ein und 1 für Aus. Nicht mit fixed |
invertStatus |
Nein | false |
true liest 0 als Ein |
zeroLabel, oneLabel |
Nein | Aus, Ein | Die für 0 und 1 angezeigten Zustandsnamen |
offIcon |
Nein | das Symbol | Das Symbol im ausgeschalteten Zustand |
onColor, offColor |
Nein | vom Design vorgegeben | Die Symbolfarbe im ein- und ausgeschalteten Zustand |
{ "type": "switch", "name": "Garden pump", "icon": "valve", "command": "1/5/1", "status": "1/5/2", "zeroLabel": "Stopped", "oneLabel": "Running" }
Statusanzeige
Zeigt einen Ein/Aus-Zustand; Tippen hat keine Wirkung.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
status |
Ja | (keiner) | Status, beliebiger DPT 1 (1.001, wenn weggelassen) |
invertStatus, zeroLabel, oneLabel, offIcon, onColor, offColor |
Nein | Wie bei Schalter |
{ "type": "statusIndicator", "name": "Window", "icon": "window", "status": { "address": "6/1/1", "dpt": "1.019" }, "zeroLabel": "Closed", "oneLabel": "Open" }
Wertanzeige
Zeigt eine Zahl oder Rohbytes so an, wie sie ankommen. Ihr type ist valueDisplay.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
status |
Ja | (keiner) | Status. Der DPT muss zu valueType passen; ohne Angabe gilt dessen eigener DPT (keiner für hex) |
valueType |
Nein | f16 |
Wie der Wert decodiert wird, mit dem DPT bei fehlender Angabe: percent (5.001), u8 (5.010), s8 (6.010), u16 (7.001), s16 (8.001), f16 (9.001), u32 (12.001), s32 (13.001), f32 (14.056), s64 (29.010) oder hex (Rohbytes). Ein angegebener DPT darf ein beliebiger Untertyp desselben Haupttyps sein (bei u8 nicht 5.001 oder 5.003) |
view |
Nein | number |
number, bar oder gauge. Balken: 2x1 oder 3x1. Anzeigeinstrument: 1x1 oder 2x2. Nicht für hex |
unit |
Nein | (keiner) | Hinter dem Wert angezeigt, z. B. °C |
decimals |
Nein | wie empfangen | 0 bis 2 |
displayMin, displayMax |
Nein | der Wertebereich des Typs | Der Bereich eines Balkens oder Anzeigeinstruments |
scaleColors |
Nein | vom Design vorgegeben | Farben eines Balkens oder Anzeigeinstruments: coolWarm, greenRed, redGreen oder neutral |
displayScale |
Nein | 1 |
Der empfangene Wert wird vor der Anzeige durch diesen Wert geteilt, z. B. 1000, um Wh als kWh anzuzeigen |
1x1 eignet sich nur für Werte mit 1 oder 2 Bytes.
{ "type": "valueDisplay", "name": "Power", "icon": "electricity", "valueType": "s32", "unit": "kW", "decimals": 2, "displayScale": 1000, "status": { "address": "9/1/1", "dpt": "13.010" } }
Wertsteuerung
Sendet eine Zahl: mit − und +, einem Schieberegler oder Tasten für feste Werte.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
command |
Ja | (keiner) | Befehl. Der DPT muss zu valueType passen; ohne Angabe gilt dessen eigener DPT |
status |
Nein | (keiner) | Status, wie command |
valueType |
Nein | f16 |
Wie bei Wertanzeige, außer hex |
control |
Nein | stepper |
Was das Widget zeigt: stepper (− und +), slider, buttons oder none |
min, max |
Nein | der Wertebereich des Typs | Der Bereich, in dem das Bedienelement arbeitet |
step |
Nein | 0.5 für Gleitkommazahlen, 10 für Prozent, sonst 1 | Die Schrittweite von − und + |
unit |
Nein | (keiner) | Hinter dem Wert angezeigt |
decimals |
Nein | wie empfangen | 0 bis 2 |
choices |
Mit buttons |
[] |
Bis zu 8 Tasten: {"value": 21, "name": "Comfort"}, jeder Wert innerhalb des Bereichs und nur einmal |
color |
Nein | vom Design vorgegeben | Die Symbolfarbe |
{
"type": "valueControl",
"name": "Hood fan",
"valueType": "percent",
"control": "buttons",
"command": { "address": "6/2/1", "dpt": "5.001" },
"status": { "address": "6/2/2", "dpt": "5.001" },
"choices": [{ "value": 0, "name": "Off" }, { "value": 50, "name": "Half" }, { "value": 100, "name": "Full" }]
}
Modusanzeige
Zeigt ein Byte als benannte Zustände, z. B. einen HVAC-Modus.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
status |
Ja | (keiner) | Status, DPT 5, 17 oder 20 (5.010, wenn weggelassen) |
states |
Ja | (keiner) | 1 bis 8 Zustände: {"value": 1, "name": "Comfort", "icon": "…"}, Werte 0–255, jeweils nur einmal |
color |
Nein | vom Design vorgegeben | Die Symbolfarbe |
{
"type": "modeStatus",
"name": "Heating mode",
"status": { "address": "3/1/9", "dpt": "20.102" },
"states": [{ "value": 1, "name": "Comfort" }, { "value": 2, "name": "Standby" }, { "value": 3, "name": "Economy" }]
}
Dimmer
Eine dimmbare Leuchte: Das Symbol schaltet sie, ein Schieberegler setzt die Helligkeit oder − und + dimmen sie.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
switch |
Nein | (keiner) | Befehl Ein/Aus, DPT 1.001 |
switchStatus |
Nein | (keiner) | Status Ein/Aus, DPT 1.001 |
brightness |
Mit slider |
(keiner) | Befehl Helligkeit, DPT 5.001 |
brightnessStatus |
Nein | (keiner) | Status Helligkeit, DPT 5.001 |
dimming |
Mit stepper |
(keiner) | Befehl relatives Dimmen, DPT 3.007 |
control |
Nein | slider mit brightness, sonst stepper |
Das 2x2-Bedienelement. Nur das Sendeobjekt des gewählten Bedienelements darf angegeben werden |
stepCode |
Nein | 5 |
Dimmschritt, 1–7: 1 = 100 %, 2 = 50 %, … 5 = 6.25 %, … 7 = 1.56 % |
repeatMs |
Nein | 500 |
Wiederholung, solange − oder + gehalten wird: 500, 1000 oder 1250 ms |
offIcon, onColor, offColor |
Nein | Wie bei Schalter |
{ "type": "dimmer", "name": "Sofa lamp", "icon": "floor_lamp", "switch": "1/1/10", "switchStatus": "1/1/11", "brightness": "1/1/12", "brightnessStatus": "1/1/13" }
Jalousie
Eine Jalousie oder ein Rollladen: auf, stopp und ab oder eine Position.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
control |
Nein | step |
step (auf, stopp, ab) oder position (ein Schieberegler) |
move |
Mit step |
(keiner) | Befehl auf/ab, beliebiger DPT 1 (1.008, wenn weggelassen) |
stop |
Mit step |
(keiner) | Befehl stopp oder Lamellenschritt, beliebiger DPT 1 (1.008, wenn weggelassen) |
position |
Mit position |
(keiner) | Befehl Position, DPT 5.001 |
slatAdjustment |
Nein | false |
true für Jalousien mit Lamellen |
slatPosition |
Mit position und Lamellen |
(keiner) | Befehl Lamellenposition, DPT 5.001 |
positionStatus, slatStatus |
Nein | (keiner) | Status Position und Lamellenposition, DPT 5.001 |
upperEndStatus, lowerEndStatus |
Nein | (keiner) | Status der Endlagen, DPT 1 (1.002, wenn weggelassen) |
windAlarm |
Nein | (keiner) | Status Windalarm, DPT 1 (1.005, wenn weggelassen). Als Warnung angezeigt; blockiert niemals einen Befehl |
invert |
Nein | false |
true für Aktoren, bei denen 0 % geschlossen bedeutet |
offIcon |
Nein | das Symbol | Das Symbol im geöffneten Zustand |
onColor, offColor |
Nein | vom Design vorgegeben | Die Symbolfarbe im geschlossenen und geöffneten Zustand |
0 % ist geöffnet, 100 % geschlossen. Nur die Sendeobjekte der gewählten Steuerung dürfen angegeben werden, Lamellenobjekte nur mit slatAdjustment.
{ "type": "blind", "name": "Terrace blind", "move": "2/1/1", "stop": "2/1/2", "positionStatus": "2/1/3" }
Szene
Ruft eine Szene ab. Im Modus toggle wechselt sie zwischen zwei Szenen; im Modus threshold wählt sie anhand eines Werts eine aus, z. B. Szene A ab 20 lux.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
command |
Ja | (keiner) | Befehl, DPT 18.001 |
mode |
Nein | single |
single, toggle oder threshold |
scene |
Nein | 0 |
Szene A, wie gesendet: 0–63. KNX-Szene 1 ist 0, Szene 64 ist 63 |
sceneB |
Mit toggle und threshold |
(keiner) | Szene B, 0–63 |
commandB |
Nein | command |
Szene B an ihre eigene Adresse senden, DPT 18.001 |
nameA, nameB |
Nein | (keiner) | Die Namen der beiden Szenen, nur mit toggle |
iconB |
Nein | das Symbol | Das Symbol der Szene B |
activation |
Nein | tap |
tap oder hold, um die Szene erst nach Halten abzurufen |
holdMilliseconds |
Nein | 500 |
Die Haltedauer: 200, 300, 400, 500, 1000, 2000 oder 3000 |
saveOnLongPress |
Nein | false |
true: Langes Halten speichert den aktuellen Zustand als Szene |
value |
Mit threshold |
(keiner) | Status zur Szenenauswahl. Der DPT muss zu valueType passen; ohne Angabe gilt dessen eigener DPT |
valueType |
Nein | f16 |
Wie value decodiert wird, wie bei Wertanzeige, außer hex |
threshold |
Nein | 0 |
Szene A ab diesem Wert, Szene B darunter |
defaultScene |
Nein | a |
a oder b: Die Szene, die vor dem Empfang eines Werts abgerufen wird |
flagAbove, flagBelow |
Nein | (keiner) | Symbole zur Kennzeichnung der aktiven Seite |
color |
Nein | vom Design vorgegeben | Die Symbolfarbe |
{ "type": "scene", "name": "Cinema", "icon": "relax", "mode": "toggle", "command": "4/2/1", "scene": 4, "sceneB": 5, "nameA": "Movie", "nameB": "Lights up" }
Szenen
Mehrere Szenentasten auf einer Adresse.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
command |
Ja | (keiner) | Befehl, DPT 18.001 |
scenes |
Ja | (keiner) | 1 bis 9 Tasten: {"name": "Relax", "scene": 0, "icon": "relax"}. scene ist die gesendete Nummer, 0–63, jeweils nur einmal |
color |
Nein | vom Design vorgegeben | Die Symbolfarben |
{
"type": "scenes",
"name": "Moods",
"command": "4/1/1",
"scenes": [{ "name": "Relax", "scene": 0, "icon": "relax" }, { "name": "Dinner", "scene": 1, "icon": "dinner" }]
}
Einstellbares Weiß
Eine Leuchte mit Helligkeit und Farbtemperatur in einer von drei Objektanordnungen.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
objects |
Nein | brightnessTemperature |
brightnessTemperature, combined (ein Objekt mit DPT 249.600) oder warmCold (zwei Pegel) |
switch, switchStatus |
Nein | (keiner) | Ein/Aus, DPT 1.001 |
brightness, brightnessStatus |
brightnessTemperature mit slider |
(keiner) | Helligkeit, DPT 5.001 |
dimming |
brightnessTemperature mit stepper |
(keiner) | Relatives Dimmen, DPT 3.007 |
temperature, temperatureStatus |
brightnessTemperature |
(keiner) | Farbtemperatur: DPT 7.600 (Kelvin) oder 5.001 (Prozent des Bereichs), gemäß temperatureAs |
temperatureAs |
Nein | kelvin |
kelvin oder percent |
combined, combinedStatus |
combined |
(keiner) | Helligkeit und Temperatur gemeinsam, DPT 249.600 |
warm, warmStatus, cold, coldStatus |
warmCold |
(keiner) | Die zwei Weißpegel, DPT 5.001 |
warmestK, coolestK |
Nein | 2700, 6500 |
Der Temperaturbereich, 1000–20000 K. Nicht mit warmCold |
control, stepCode, repeatMs |
Nein | Wie bei Dimmer | |
offIcon, onColor, offColor |
Nein | Wie bei Schalter |
Die erforderlichen Sendeobjekte und ihre optionalen Statusobjekte hängen von objects ab; Objekte einer anderen Anordnung sind ein Fehler.
{ "type": "tunableWhite", "name": "Reading light", "switch": "1/2/1", "brightness": "1/2/2", "temperature": "1/2/3", "temperatureStatus": "1/2/4" }
Farblicht
Eine RGB-, RGBW- oder RGB-Leuchte mit einstellbarem Weiß.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
light |
Nein | rgb |
rgb, rgbw oder rgbTunableWhite |
control |
Nein | die erste Anordnung der Leuchte | Wie die Farbe gesendet wird: oneObject, rgbAndWhite oder separate, gemäß der Tabelle unten |
white |
Nein | temperature |
rgbTunableWhite mit rgbAndWhite: temperature oder warmCold |
switch, switchStatus |
Nein | (keiner) | Ein/Aus, DPT 1.001 |
brightness, brightnessStatus |
Nein | (keiner) | Die Gesamthelligkeit der Leuchte, DPT 5.001 |
onFrom |
Nein | switchStatus |
Was den eingeschalteten Zustand angibt: switchStatus oder switchOrLevels |
temperatureAs, warmestK, coolestK |
Nein | Mit einem Temperaturobjekt, wie bei Einstellbares Weiß | |
offIcon, onColor, offColor |
Nein | Wie bei Schalter |
light |
control |
Sendeobjekte |
|---|---|---|
rgb |
oneObject |
rgb (DPT 232.600) |
rgb |
separate |
red, green, blue (DPT 5.001) |
rgbw |
oneObject |
rgbw (DPT 251.600) |
rgbw |
rgbAndWhite |
rgb, whiteLevel (5.001) |
rgbw |
separate |
red, green, blue, whiteLevel |
rgbTunableWhite |
rgbAndWhite |
rgb, dann temperature oder warm und cold (gemäß white) |
rgbTunableWhite |
separate |
red, green, blue, warm, cold |
Jedes Sendeobjekt hat ein gleichnamiges Statusobjekt mit angehängtem Status (rgbStatus, redStatus, …; beim Weißpegel whiteStatus). Farbstatusobjekte werden entweder alle angegeben oder keines.
{ "type": "colorLight", "name": "Accent strip", "light": "rgb", "switch": "1/3/1", "rgb": "1/3/2", "rgbStatus": "1/3/3" }
Thermostat
Zeigt den Sollwert oder die Raumtemperatur und ändert den Sollwert.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
shows |
Nein | setpoint |
Was das Widget groß anzeigt: setpoint oder roomTemperature |
unit |
Nein | celsius |
celsius (DPT 9.001) oder fahrenheit (9.027). Werte werden niemals umgerechnet |
control |
Nein | absolute |
absolute (sendet eine Temperatur) oder increaseDecrease (sendet 1-Bit-Schritte) |
setpoint |
Mit absolute |
(keiner) | Befehl Sollwert, mit dem DPT von unit |
increase, decrease |
Mit increaseDecrease |
(keiner) | Schritte senden, DPT 1. Kann dieselbe Adresse sein |
increaseValue, decreaseValue |
Nein | true, false |
Das von increase und decrease gesendete Bit |
setpointStatus |
Mit increaseDecrease, wenn der Sollwert angezeigt wird |
(keiner) | Status Sollwert |
roomTemperature |
Wenn angezeigt | (keiner) | Status Raumtemperatur |
step |
Nein | 0.5 |
Mit absolute: 0.1, 0.2, 0.5 oder 1 |
min, max |
Nein | 7–35 °C, 45–95 °F | Die Grenzen des Sollwerts |
color |
Nein | vom Design vorgegeben | Die Symbolfarbe |
{ "type": "thermostat", "name": "Living room", "setpoint": "3/1/1", "setpointStatus": "3/1/2", "roomTemperature": "3/1/3" }
Fan Coil
Die Lüfterstufen eines Fan-Coil-Geräts, optional mit Ein/Aus, Auto/Manuell, Heizen/Kühlen, HVAC-Modi und Thermostat. Die Einstellungen legen die Objekte fest; jedes vorhandene Sendeobjekt ist erforderlich, Statusobjekte sind optional.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
fanSpeed, fanSpeedStatus |
fanSpeed |
(keiner) | Die Lüfterstufe: DPT 5.001 für percent, sonst 5.010 |
stages |
Nein | 3 |
Lüfterstufen, 1–5 |
controlAs |
Nein | percent |
Wie eine Stufe gesendet wird: percent (Prozentwert), value (Bytewert) oder stageNumber (1, 2, 3 …) |
statusAs |
Nein | controlAs |
Wie der Status gelesen wird, wie controlAs |
percentStages, valueStages |
Nein | gleichmäßig verteilt | Der Wert jeder Stufe, z. B. [33, 67, 100] oder [85, 170, 255] |
speedZero |
Nein | nothing |
Bedeutung der Lüftergeschwindigkeit 0: nothing, auto oder manual |
onOff |
Nein | false |
true fügt switchCommand und switchStatus hinzu (DPT 1.001) |
autoManualObjects |
Nein | (aus) | one: autoManual (+ autoManualStatus). two: auto und manual (+ Statusobjekte). DPT 1 |
autoManualInvert |
Nein | false |
Mit one: true, wenn 1 Manuell bedeutet |
heatCoolObjects |
Nein | (aus) | one: heatCool (+ heatCoolStatus), DPT 1.100. two: heat und cool (+ Statusobjekte), DPT 1 |
heatCoolInvert |
Nein | false |
Mit one: true, wenn 1 Kühlen bedeutet |
hvacObjects |
Nein | (aus) | byte: hvacMode (+ hvacModeStatus), DPT 20.102. bits: ein Objekt je angebotenem Modus, hvacAuto, hvacComfort, hvacStandby, hvacEconomy, hvacProtection (+ Statusobjekte), DPT 1 |
hvacModes |
Nein | alle außer auto |
Angebotene Modi: auto, comfort, standby, economy, buildingProtection |
thermostat |
Nein | (aus) | Ein Objekt mit shows, unit, control, step, min, max, increaseValue und decreaseValue aus Thermostat. Fügt setpoint oder increase und decrease sowie setpointStatus und roomTemperature hinzu |
offIcon, onColor, offColor |
Nein | Wie bei Schalter |
{ "type": "fanCoil", "name": "Office fan coil", "fanSpeed": "7/1/1", "fanSpeedStatus": "7/1/2", "onOff": true, "switchCommand": "7/1/3", "switchStatus": "7/1/4" }
Klimagerät
Ein Splitgerät oder VRV über sein KNX-Gateway. Sein type ist airConditioner.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
kind |
Nein | split |
split oder vrv |
switchCommand, switchStatus |
Ja | (keiner) | Ein/Aus, DPT 1.001 |
setpoint, setpointStatus |
setpoint |
(keiner) | Sollwert, mit dem DPT von unit |
roomTemperature |
Wenn angezeigt | (keiner) | Status Raumtemperatur |
mode, modeStatus |
mode |
(keiner) | Betriebsmodus, DPT 20.105 |
fanSpeed, fanSpeedStatus |
fanSpeed |
(keiner) | Lüfterstufe, DPT 5.010 |
shows, unit, step |
Nein | setpoint, celsius, 1 |
Wie bei Thermostat |
min, max |
Nein | 16–30 °C, 61–86 °F | Die Grenzen des Sollwerts |
modes |
Nein | alle für split; Heizen, Kühlen, Lüfter, Entfeuchten für vrv |
Angebotene Modi: auto, heat, cool, fan, dry |
modeValues |
Nein | Auto 0, Heizen 1, Kühlen 3, Lüfter 9, Entfeuchten 14 | Das Byte, das jeder Modus sendet, z. B. {"dry": 4} |
fanStages |
Nein | 3 |
Lüfterstufen |
fanValues |
Nein | [1, 2, 3] |
Das Byte, das jede Stufe sendet |
fanAutoValue |
Nein | (keiner) | Wenn angegeben, bietet der Lüfter Auto an und sendet dafür dieses Byte |
faultAs |
Nein | (keiner) | Wenn angegeben, ist fault erforderlich: bit (DPT 1.005), code (ein Byte, DPT 5.010) oder text (DPT 16.000) |
fault |
Mit faultAs |
(keiner) | Status Störung |
faultInvert |
Nein | false |
Mit bit: true, wenn 0 eine Störung bedeutet |
faultCodes |
Nein | [] |
Mit code: {"value": 3, "text": "Filter"}, Texte für bekannte Codes |
offIcon, onColor, offColor |
Nein | Wie bei Schalter |
{ "type": "airConditioner", "name": "Bedroom AC", "switchCommand": "8/1/1", "switchStatus": "8/1/2", "setpoint": "8/1/3", "mode": "8/1/4", "fanSpeed": "8/1/5" }
Verbindung
Wie sich das Dashboard beim Öffnen verbindet. Ohne Angabe arbeitet es automatisch: Es behält eine bestehende Verbindung der App bei, verwendet sonst das ausgewählte Gateway und sucht andernfalls.
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
mode |
Ja | (keiner) | automatic, gateway oder multicast |
gateway |
Nein | (keiner) | Mit gateway: Das Gateway für die Verbindung. Ohne Angabe kann das Dashboard erst starten, nachdem eines in seinen Einstellungen gewählt wurde |
secure |
Nein | false |
Mit multicast: true für KNX IP Secure Routing |
Das Objekt gateway:
| Feld | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|
host |
Ja | (keiner) | IP-Adresse oder Hostname |
port |
Nein | 3671 |
UDP- oder TCP-Port |
name |
Nein | (keiner) | Ein anzuzeigender Name |
transport |
Nein | udp |
udp, tcp oder auto (zuerst TCP, dann UDP) |
nat |
Nein | false |
true für ein Gateway hinter NAT |
knxAddress |
Nein | (keiner) | Die physikalische Adresse des Gateways, z. B. 1.1.250. Secure Tunneling findet darüber seine Zugangsdaten |
secure |
Nein | false |
true für KNX IP Secure Tunneling |
serial, mac |
Nein | (keiner) | Die erkannte Seriennummer und MAC-Adresse des Gateways |
{
"format": 1,
"name": "Office",
"connection": { "mode": "gateway", "gateway": { "name": "Office router", "host": "10.0.0.5", "transport": "tcp" } },
"home": { "name": "Home", "tiles": [] }
}
Exporte der Option Einfaches JSON enthalten keine Schlüssel oder Zugangsdaten. Einfaches JSON und Mit Schlüsseln verwenden beide die Erweiterung .json; der Import erkennt den Schutz am Dateiinhalt.
Passwortgeschütztes JSON
Die Option Mit Schlüsseln verschlüsselt den gesamten Inhalt. Sein JSON-Container lässt sich in einem Texteditor öffnen, aber Dashboard-Definition und Schlüssel müssen zum Lesen oder Ändern entschlüsselt werden. Das Exportpasswort ist für den Import erforderlich und wird nie gespeichert.
| Containerfeld | Wert oder Zweck in Version 1 |
|---|---|
format |
1 |
protected.version |
1 |
protected.cipher |
AES-256-GCM |
protected.kdf |
PBKDF2-HMAC-SHA256 |
protected.iterations |
600000; in dieser Schutzversion festgelegt |
protected.salt |
Base64 aus 16 zufälligen Bytes |
protected.nonce |
Base64 der 12-Byte-Verschlüsselungs-Nonce |
protected.ciphertext |
Base64 des verschlüsselten Inhalts |
protected.tag |
Base64 des 16-Byte-Authentifizierungstags |
Die Authentifizierung bindet den Inhalt zusätzlich an SharKNX dashboard protected JSON v1. Falsche Passwörter oder manipulierte verschlüsselte Daten können kein importiertes Dashboard erzeugen. Die gewählte Datei ist auf 32 MiB begrenzt, der entschlüsselte Inhalt auf 16 MiB.
Der entschlüsselte Inhalt enthält dashboard (die in dieser Referenz beschriebene Definition) und nur bei einer eigenen Schlüsselquelle keys. Ohne keys bleibt das Projekt automatisch: Die empfangende App liefert ihre eigene Sicherheit. Ein eigenes Paket, selbst ein leeres, wird als Importierte Schlüssel geführt und mit einer neuen lokalen Identität verschlüsselt beim Dashboard gespeichert. Der Verweis auf das Quellprojekt und das Exportpasswort werden nie in den App-Speicher übernommen.
keys.groupKeys ordnet dezimalen KNX-Gruppenadressnummern (0–65535, als Zeichenketten) 32-stellige Hexadezimalschlüssel zu. Nur vom Dashboard verwendete Adressen bleiben erhalten. Das optionale keys.credentials enthält devices für ein konfiguriertes sicheres Gateway mit address, optionalem deviceAuthCode und interfaces (userId, individualAddress, password); sicheres multicast enthält stattdessen backboneKeyHex und backboneSecurityEnabled. Tool Keys, fremde Adressen und Gateways sowie Projektnamen sind ausgeschlossen.
Automatische Verbindung und automatisches Projekt verwenden die Konfiguration der empfangenden App. Sie enthalten nie eine Momentaufnahme der Verbindung oder des Projekts der exportierenden App. Ein Dashboard mit eigenen Schlüsseln und automatischer Verbindung kann seine verwendeten Gruppenschlüssel enthalten, aber keine Gateway-Zugangsdaten. Die Projekteinstellungen zeigen Importierte Schlüssel, bis automatisch oder ein anderes Projekt gespeichert wird. Ein gewähltes Projekt stellt außerdem seine Adressliste und die Schlüsselaktualisierung bereit. Importierte Schlüssel lassen sich erneut exportieren.
Der Import ist unter + → Hinzufügen → Dashboard importieren verfügbar. Nach Erfolg bleiben Sie auf Dashboards; bei gleichem Namen werden Als Kopie importieren oder Ersetzen angeboten. Importfehler erscheinen in einem Dialog mit scrollbarem Codebereich und Details kopieren.
Vollständiges Beispiel
Das Beispielhaus: Home mit Verknüpfungen zu zwei Räumen, ein Wohnzimmer mit zwei Seiten und eine Küche, ein Szenenwidget „Moods“, zwei Favoriten und ein konfiguriertes Gateway.
{
"format": 1,
"name": "Villa",
"theme": "night",
"keepScreenOn": true,
"favorites": ["t1", "t4"],
"connection": { "mode": "gateway", "gateway": { "name": "Main gateway", "host": "192.168.1.20" } },
"home": {
"name": "Home",
"icon": "home",
"tiles": [
{ "type": "navigation", "name": "Living room", "icon": "living", "target": "r1" },
{ "type": "navigation", "name": "Kitchen", "icon": "kitchen", "target": "r2" },
{ "type": "valueDisplay", "name": "Outdoor", "icon": "temperature", "valueType": "f16", "unit": "°C", "decimals": 1, "status": { "address": "5/1/1", "dpt": "9.001" } }
],
"rooms": [
{
"id": "r1",
"name": "Living room",
"icon": "living",
"panels": [
{
"tiles": [
{ "id": "t1", "type": "switch", "name": "Ceiling light", "icon": "light_group", "command": "1/1/1", "status": "1/1/2" },
{ "type": "dimmer", "name": "Sofa lamp", "icon": "floor_lamp", "switch": "1/1/10", "brightness": "1/1/12", "brightnessStatus": "1/1/13" },
{ "type": "blind", "name": "Terrace blind", "move": "2/1/1", "stop": "2/1/2", "positionStatus": "2/1/3" },
{ "id": "t4", "type": "thermostat", "name": "Living room", "setpoint": "3/1/1", "setpointStatus": "3/1/2", "roomTemperature": "3/1/3" }
]
},
{
"tiles": [
{ "type": "tunableWhite", "name": "Reading light", "switch": "1/2/1", "brightness": "1/2/2", "temperature": "1/2/3" }
]
}
]
},
{
"id": "r2",
"name": "Kitchen",
"icon": "kitchen",
"tiles": [
{ "type": "switch", "name": "Counter light", "command": "1/4/1", "status": "1/4/2" },
{ "type": "statusIndicator", "name": "Window", "icon": "window", "status": { "address": "6/1/1", "dpt": "1.019" }, "zeroLabel": "Closed", "oneLabel": "Open" }
]
}
]
}
}
Validierung
Der Import prüft die gesamte Datei und nennt jedes Problem mit seiner Position, z. B. $.home.rooms[1].tiles[3].status.address. Eine Datei mit einem Problem wird nicht importiert; es wird nichts gespeichert.
| Problem | Beispiel |
|---|---|
| Kein JSON | Ein fehlendes Komma oder Anführungszeichen |
| Ein erforderliches Feld fehlt | Ein Widget ohne name |
| Ein Feld hat einen Wert des falschen Typs | "size": 2 statt "2x1" |
| Ein unbekannter Wert | "control": "slide" |
| Ein Widget-Typ, den die App nicht kennt | Eine Datei aus einer neueren SharKNX-Version |
| Einem Widget fehlt eine erforderliche Adresse | Ein Dimmer mit control slider, aber ohne brightness |
| Ein Widget verletzt seine eigenen Regeln | Ein DPT, der nicht zur Funktion passt, eine für den Typ unzulässige Größe oder eine Szenennummer über 63 |
| Eine Verknüpfung oder ein Favorit hat kein Ziel | "target": "r9" ohne Raum r9 |
| Eine ID wird zweimal verwendet | Zwei Widgets t4 |
| Vollständige Form und Kurzform gemeinsam | tiles und panels in einem Raum; address und targets in einem Sendeobjekt |
| Ein neueres Dateiformat | "format": 2 |
Grenzen
| Element | Grenze |
|---|---|
| Namen (Dashboard, Räume, Widgets, Zustände, Tasten) | 50 Zeichen |
| Räume in einem Dashboard, einschließlich Home | 500 |
| Raumverschachtelung unter Home | 8 Ebenen |
| Seiten in einem Raum | 10 |
| Widgets auf einer Seite | 100 |
| Widgets in einem Dashboard | 5000 |
| Zahlen in IDs | 0–999999 |
Versionen
Jede exportierte Datei beginnt mit "format": 1. Fehlt das Feld, wird die Datei als aktuelles Format gelesen. Eine Datei mit höherer Nummer stammt aus einer neueren SharKNX-Version und wird nicht importiert; aktualisieren Sie die App.
Dateien bleiben beim Wachstum von SharKNX importierbar: Neue Felder erhalten Standardwerte, sodass sie in älteren Dateien einfach fehlen können. Ein Feld ändert unter demselben Namen niemals seine Bedeutung. Bei einer neueren Datei in einer älteren App gehen nur die Felder verloren, die die App nicht kennt.