Il formato JSON delle dashboard di visualizzazione SharKNX: spazi, pagine, widget e indirizzi di gruppo utilizzati.
Puoi esportare una dashboard da SharKNX come file JSON e importarla sullo stesso dispositivo o su un altro. Puoi anche scriverla in un editor di testo: l’app esporta tutti i campi, ma per l’importazione richiede solo ciò che non può dedurre. Un progetto scritto a mano rimane quindi breve.
Per iniziare rapidamente, usa la dashboard vuota o la casa di esempio. Oppure crea una piccola dashboard nell’app, esportala e modifica il file.
In questa pagina
- Struttura
- Dashboard
- Spazi e pagine
- ID e collegamenti
- Widget
- Indirizzi di gruppo
- Colori e icone
- Tipi di widget
- Connessione
- Esempio completo
- Validazione
- Versioni
Struttura
Una dashboard contiene uno spazio, Home. Ogni altro spazio si trova in Home o in un altro spazio. Uno spazio ha una o più pagine tra cui scorrere, e ogni pagina contiene widget in una griglia.
{
"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" }
]
}
]
}
}
Nel file, gli spazi si chiamano rooms, le pagine panels e i widget tiles. Il file usa JSON UTF-8; è accettato un marcatore dell’ordine dei byte all’inizio.
Dashboard
Il livello principale del file.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
format |
No | 1 |
La versione del formato. Vedi Versioni |
name |
Sì | (nessuno) | Il nome della dashboard, al massimo 50 caratteri. I nomi sono univoci su un dispositivo: importando un nome esistente puoi creare una copia o sostituire la dashboard |
home |
Sì | (nessuno) | Lo spazio Home. Vedi Spazi e pagine |
theme |
No | auto |
auto (segue la modalità chiara o scura del dispositivo), light, dark, night, wave, sahara, aurora o neon |
buttons |
No | filled |
Aspetto dei pulsanti dei widget: filled o plain |
keepScreenOn |
No | false |
true mantiene lo schermo acceso mentre la dashboard è aperta |
muteBanners |
No | false |
true elenca le notifiche solo in Attività, senza banner |
favorites |
No | [] |
ID dei widget mostrati nei Preferiti, in quest’ordine, ad esempio ["t1", "t4"] |
connection |
No | automatica | Come la dashboard si connette al bus. Vedi Connessione |
Il campo project di un file importato viene ignorato: il collegamento a un progetto nell’Archivio appartiene al dispositivo che ha creato il file.
Spazi e pagine
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
id |
No | assegnato | r e un numero, ad esempio r3. Home è sempre r0. Solo uno spazio aperto da un collegamento richiede un ID. Vedi ID e collegamenti |
name |
Sì | (nessuno) | Il nome dello spazio, al massimo 50 caratteri |
icon |
No | predefinito | Un nome di icona, ad esempio kitchen. Vedi Colori e icone |
tiles |
Uno dei due | (nessuno) | I widget di uno spazio con una sola pagina |
panels |
Uno dei due | (nessuno) | Le pagine di uno spazio con più pagine, al massimo 10 |
rooms |
No | [] |
Gli spazi contenuti in questo |
Usa tiles o panels, non entrambi. Ogni pagina in panels contiene:
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
id |
No | assegnato | p e un numero, ad esempio p2 |
tiles |
No | [] |
I widget della pagina, in ordine, al massimo 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" }] }
]
}
}
ID e collegamenti
Ogni spazio, pagina e widget ha un ID: r per gli spazi, p per le pagine, t per i widget, seguito da un numero fino a 999999. Gli ID sono univoci all’interno di una dashboard, non tra dashboard diverse.
- Se ometti gli ID, l’importazione li assegna proseguendo oltre l’ID più alto del file.
- Scrivi un ID quando qualcosa vi fa riferimento: uno spazio aperto da un widget di navigazione e un widget elencato in
favorites. - Un collegamento o preferito deve indicare un ID scritto nel file. Un ID mai dichiarato nel file è un errore, anche se l’importazione avrebbe assegnato quell’ID a un altro elemento.
- Un file esportato contiene sempre tutti gli ID.
Widget
Campi comuni a tutti i widget:
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
type |
Sì | (nessuno) | Il tipo di widget. Vedi Tipi di widget |
name |
Sì | (nessuno) | Mostrato sul widget, al massimo 50 caratteri |
id |
No | assegnato | t e un numero, ad esempio t12 |
icon |
No | quello del tipo | Un nome di icona. Vedi Colori e icone |
size |
No | quello del tipo | Celle della griglia, larghezza × altezza: 1x1, 2x1, 3x1, 2x2, 3x2 o 3x3. Ogni tipo consente alcune dimensioni |
| Tipo | Funzione | Dimensioni | Dimensione predefinita |
|---|---|---|---|
navigation |
Apre uno spazio | 2x1, 3x1, 2x2 | 2x1 |
switch |
Accende e spegne qualcosa | 1x1, 2x1, 2x2 | 2x1 |
statusIndicator |
Mostra uno stato acceso/spento | 1x1, 2x1 | 1x1 |
valueDisplay |
Mostra un numero | 1x1, 2x1, 3x1, 2x2, secondo la vista | 2x1 |
valueControl |
Invia un numero | 1x1, 2x1, 3x1, 2x2 | 3x1 (2x1 senza comando) |
modeStatus |
Mostra un byte come stati con nome | 1x1, 2x1, 3x1 | 2x1 |
dimmer |
Una luce dimmerabile | 1x1, 2x1, 3x1, 2x2 | 2x2 |
blind |
Una veneziana o tapparella | 1x1, 2x1, 3x1, 2x2, 3x2 | 2x2 |
scene |
Richiama una scena o alterna tra due | 1x1, 2x1, 2x2 | 2x1 |
scenes |
Una fila di pulsanti scena | 2x1, 2x2, 3x2, 3x3 | 2x2 |
tunableWhite |
Una luce con temperatura di colore | 1x1, 2x1, 3x1, 2x2, 3x2 | 2x2 |
colorLight |
Una luce RGB, RGBW o RGB + bianco | 1x1, 2x1, 3x1, 2x2, 3x2 | 2x1 |
thermostat |
Un setpoint di temperatura ambiente | 1x1, 2x1, 3x1, 2x2 | 2x2 |
fanCoil |
Un ventilconvettore | 1x1, 2x1, 3x1, 2x2, 3x2 (3x3 con funzioni integrate) | 2x1 |
airConditioner |
Un’unità split o VRV tramite il suo gateway KNX | 1x1, 2x1, 3x1, 2x2, 3x3 | 2x2 |
Un file con un tipo non riconosciuto da questa versione di SharKNX non viene importato.
Indirizzi di gruppo
Un widget invia ad alcuni indirizzi (comando) e mostra altri (stato). Gli indirizzi di gruppo si scrivono su tre livelli, ad esempio "1/2/3". Un DPT si scrive con tipo principale e sottotipo, ad esempio "1.001" o "9.001".
Forma breve. Scrivi solo l’indirizzo e verrà usato il DPT della sua funzione: 1.001 per un comando di accensione, 5.001 per la luminosità di un dimmer, il DPT di valueType per la visualizzazione di un valore. Ogni tipo di widget indica i propri valori predefiniti sotto.
{ "type": "switch", "name": "Hall light", "command": "1/0/1", "status": "1/0/2" }
Forma completa. Per usare un altro DPT dello stesso tipo principale (1.019 per un contatto finestra, 9.004 per un valore in lux), inviare un comando a più indirizzi o evitare la lettura di uno stato all’apertura della dashboard:
{
"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 }
}
| Campo | Utilizzo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|---|
address |
Comandi e stati | Uno dei due | (nessuno) | Un indirizzo di gruppo |
targets |
Comandi | Uno dei due | (nessuno) | Più indirizzi di gruppo che ricevono lo stesso valore |
dpt |
Comandi e stati | No | quello della funzione | Il DPT con cui viene codificato il valore |
readOnOpen |
Stati | No | true |
false: non leggere lo stato all’apertura della dashboard; attendere il bus |
Un DPT deve corrispondere alla funzione: un interruttore accetta qualsiasi DPT 1 (1.001 commutazione, 1.008 su/giù, …), la luminosità di un dimmer usa DPT 5.001.
Colori e icone
I colori sono nomi: red, orange, yellow, green, blue, purple o grey. Ognuno ha una tonalità chiara e una scura, scelta dal tema.
Le icone sono nomi del catalogo dell’app, ad esempio light_group, floor_lamp, table_lamp, wall_lamp, socket, shutter, curtains, heating, cooling, window, door, temperature, humidity, relax, dinner, all_off. Le icone degli spazi includono home, living, kitchen, dining, bedroom, bathroom, office, hallway, garage, garden e terrace. Il selettore di icone dell’app mostra tutti i nomi.
Un nome di colore o icona sconosciuto viene conservato e visualizzato con il valore predefinito, così un file di una versione più recente di SharKNX rimane importabile.
Tipi di widget
Navigazione
Apre un altro spazio.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
target |
Sì | (nessuno) | L’ID dello spazio aperto, ad esempio r1. Lo spazio deve dichiarare questo ID nel file |
{
"format": 1,
"name": "Links",
"home": {
"name": "Home",
"tiles": [{ "type": "navigation", "name": "Kitchen", "icon": "kitchen", "target": "r1" }],
"rooms": [{ "id": "r1", "name": "Kitchen", "tiles": [] }]
}
}
Interruttore
Un tocco alterna tra acceso e spento oppure invia sempre lo stesso valore.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
command |
Sì | (nessuno) | Comando, DPT 1 (1.001 se omesso) |
status |
No | (nessuno) | Stato, DPT 1 (1.001 se omesso). In assenza di stato, il widget mostra l’ultimo valore inviato o ricevuto su command |
fixed |
No | (nessuno) | 1 o 0: ogni tocco invia questo valore invece di alternare |
invertCommand |
No | false |
true invia 0 per acceso e 1 per spento. Non con fixed |
invertStatus |
No | false |
true interpreta 0 come acceso |
zeroLabel, oneLabel |
No | Spento, Acceso | I nomi degli stati mostrati per 0 e 1 |
offIcon |
No | l’icona | L’icona mostrata quando è spento |
onColor, offColor |
No | quello del tema | Il colore dell’icona quando è acceso e spento |
{ "type": "switch", "name": "Garden pump", "icon": "valve", "command": "1/5/1", "status": "1/5/2", "zeroLabel": "Stopped", "oneLabel": "Running" }
Indicatore di stato
Mostra uno stato acceso/spento; un tocco non fa nulla.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
status |
Sì | (nessuno) | Stato, qualsiasi DPT 1 (1.001 se omesso) |
invertStatus, zeroLabel, oneLabel, offIcon, onColor, offColor |
No | Come per Interruttore |
{ "type": "statusIndicator", "name": "Window", "icon": "window", "status": { "address": "6/1/1", "dpt": "1.019" }, "zeroLabel": "Closed", "oneLabel": "Open" }
Visualizzazione del valore
Mostra un numero o byte grezzi così come arrivano. Il suo type è valueDisplay.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
status |
Sì | (nessuno) | Stato. Il DPT deve corrispondere a valueType; se omesso si usa quello del tipo (nessuno per hex) |
valueType |
No | f16 |
Come viene decodificato il valore, con il DPT usato se omesso: 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) o hex (byte grezzi). Un DPT esplicito può essere qualsiasi sottotipo dello stesso tipo principale (per u8, non 5.001 o 5.003) |
view |
No | number |
number, bar o gauge. Barra: 2x1 o 3x1. Indicatore: 1x1 o 2x2. Non per hex |
unit |
No | (nessuno) | Mostrato dopo il valore, ad esempio °C |
decimals |
No | come ricevuto | 0 a 2 |
displayMin, displayMax |
No | l’intervallo del tipo | L’intervallo di una barra o indicatore |
scaleColors |
No | quello del tema | Colori di una barra o indicatore: coolWarm, greenRed, redGreen o neutral |
displayScale |
No | 1 |
Il valore ricevuto viene diviso per questo numero prima della visualizzazione, ad esempio 1000 per mostrare Wh come kWh |
La dimensione 1x1 è adatta solo a valori di 1 o 2 byte.
{ "type": "valueDisplay", "name": "Power", "icon": "electricity", "valueType": "s32", "unit": "kW", "decimals": 2, "displayScale": 1000, "status": { "address": "9/1/1", "dpt": "13.010" } }
Comando del valore
Invia un numero: con − e +, un cursore o pulsanti per valori predefiniti.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
command |
Sì | (nessuno) | Comando. Il DPT deve corrispondere a valueType; se omesso si usa quello del tipo |
status |
No | (nessuno) | Stato, come command |
valueType |
No | f16 |
Come per Visualizzazione del valore, eccetto hex |
control |
No | stepper |
Cosa mostra il widget: stepper (− e +), slider, buttons o none |
min, max |
No | l’intervallo del tipo | L’intervallo in cui opera il comando |
step |
No | 0.5 per valori in virgola mobile, 10 per percentuali, altrimenti 1 | Il passo di − e + |
unit |
No | (nessuno) | Mostrato dopo il valore |
decimals |
No | come ricevuto | 0 a 2 |
choices |
Con buttons |
[] |
Fino a 8 pulsanti: {"value": 21, "name": "Comfort"}, ogni valore nell’intervallo e usato una sola volta |
color |
No | quello del tema | Il colore dell’icona |
{
"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" }]
}
Visualizzazione della modalità
Mostra un byte come stati con nome, ad esempio una modalità HVAC.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
status |
Sì | (nessuno) | Stato, DPT 5, 17 o 20 (5.010 se omesso) |
states |
Sì | (nessuno) | 1 a 8 stati: {"value": 1, "name": "Comfort", "icon": "…"}, valori 0–255, senza ripetizioni |
color |
No | quello del tema | Il colore dell’icona |
{
"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
Una luce dimmerabile: l’icona la accende o spegne, un cursore imposta la luminosità oppure − e + la regolano.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
switch |
No | (nessuno) | Comando acceso/spento, DPT 1.001 |
switchStatus |
No | (nessuno) | Stato acceso/spento, DPT 1.001 |
brightness |
Con slider |
(nessuno) | Comando della luminosità, DPT 5.001 |
brightnessStatus |
No | (nessuno) | Stato della luminosità, DPT 5.001 |
dimming |
Con stepper |
(nessuno) | Comando di regolazione relativa, DPT 3.007 |
control |
No | slider con brightness, altrimenti stepper |
Il comando 2x2. Può essere indicato solo l’oggetto di invio del comando scelto |
stepCode |
No | 5 |
Passo di regolazione, 1–7: 1 = 100 %, 2 = 50 %, … 5 = 6.25 %, … 7 = 1.56 % |
repeatMs |
No | 500 |
Ripetizione mentre − o + è premuto: 500, 1000 o 1250 ms |
offIcon, onColor, offColor |
No | Come per Interruttore |
{ "type": "dimmer", "name": "Sofa lamp", "icon": "floor_lamp", "switch": "1/1/10", "switchStatus": "1/1/11", "brightness": "1/1/12", "brightnessStatus": "1/1/13" }
Veneziana
Una veneziana o tapparella: su, stop e giù, oppure una posizione.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
control |
No | step |
step (su, stop, giù) o position (un cursore) |
move |
Con step |
(nessuno) | Comando su/giù, qualsiasi DPT 1 (1.008 se omesso) |
stop |
Con step |
(nessuno) | Comando di stop o passo delle lamelle, qualsiasi DPT 1 (1.008 se omesso) |
position |
Con position |
(nessuno) | Comando della posizione, DPT 5.001 |
slatAdjustment |
No | false |
true per veneziane con lamelle |
slatPosition |
Con position e lamelle |
(nessuno) | Comando della posizione delle lamelle, DPT 5.001 |
positionStatus, slatStatus |
No | (nessuno) | Stato della posizione e delle lamelle, DPT 5.001 |
upperEndStatus, lowerEndStatus |
No | (nessuno) | Stato delle posizioni di fine corsa, DPT 1 (1.002 se omesso) |
windAlarm |
No | (nessuno) | Stato dell’allarme vento, DPT 1 (1.005 se omesso). Mostrato come avviso; non blocca mai un comando |
invert |
No | false |
true per attuatori in cui 0 % significa chiuso |
offIcon |
No | l’icona | L’icona mostrata quando è aperta |
onColor, offColor |
No | quello del tema | Il colore dell’icona quando è chiusa e aperta |
0 % significa aperta e 100 % chiusa. Si possono indicare solo gli oggetti di invio del comando scelto, e quelli delle lamelle solo con slatAdjustment.
{ "type": "blind", "name": "Terrace blind", "move": "2/1/1", "stop": "2/1/2", "positionStatus": "2/1/3" }
Scena
Richiama una scena. In modalità toggle alterna tra due scene; in modalità threshold ne sceglie una in base a un valore, ad esempio la scena A da 20 lux in su.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
command |
Sì | (nessuno) | Comando, DPT 18.001 |
mode |
No | single |
single, toggle o threshold |
scene |
No | 0 |
Scena A, come inviata: 0–63. La scena KNX 1 è 0, la scena 64 è 63 |
sceneB |
Con toggle e threshold |
(nessuno) | Scena B, 0–63 |
commandB |
No | command |
Inviare la scena B al proprio indirizzo, DPT 18.001 |
nameA, nameB |
No | (nessuno) | I nomi delle due scene, solo con toggle |
iconB |
No | l’icona | L’icona della scena B |
activation |
No | tap |
tap, oppure hold per richiamare solo dopo una pressione prolungata |
holdMilliseconds |
No | 500 |
Durata della pressione prolungata: 200, 300, 400, 500, 1000, 2000 o 3000 |
saveOnLongPress |
No | false |
true: una pressione lunga salva lo stato attuale come scena |
value |
Con threshold |
(nessuno) | Stato usato per scegliere la scena. Il DPT deve corrispondere a valueType; se omesso si usa quello del tipo |
valueType |
No | f16 |
Come viene decodificato value, come per Visualizzazione del valore, eccetto hex |
threshold |
No | 0 |
Scena A da questo valore in su, scena B al di sotto |
defaultScene |
No | a |
a o b: la scena richiamata prima dell’arrivo di un valore |
flagAbove, flagBelow |
No | (nessuno) | Icone che indicano il lato attivo |
color |
No | quello del tema | Il colore dell’icona |
{ "type": "scene", "name": "Cinema", "icon": "relax", "mode": "toggle", "command": "4/2/1", "scene": 4, "sceneB": 5, "nameA": "Movie", "nameB": "Lights up" }
Scene
Un insieme di pulsanti scena su un indirizzo.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
command |
Sì | (nessuno) | Comando, DPT 18.001 |
scenes |
Sì | (nessuno) | 1 a 9 pulsanti: {"name": "Relax", "scene": 0, "icon": "relax"}. scene è il numero inviato, 0–63, senza ripetizioni |
color |
No | quello del tema | Il colore delle icone |
{
"type": "scenes",
"name": "Moods",
"command": "4/1/1",
"scenes": [{ "name": "Relax", "scene": 0, "icon": "relax" }, { "name": "Dinner", "scene": 1, "icon": "dinner" }]
}
Bianco regolabile
Una luce con luminosità e temperatura di colore in una delle tre disposizioni di oggetti.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
objects |
No | brightnessTemperature |
brightnessTemperature, combined (un oggetto DPT 249.600) o warmCold (due livelli) |
switch, switchStatus |
No | (nessuno) | Acceso/spento, DPT 1.001 |
brightness, brightnessStatus |
brightnessTemperature con slider |
(nessuno) | Luminosità, DPT 5.001 |
dimming |
brightnessTemperature con stepper |
(nessuno) | Regolazione relativa, DPT 3.007 |
temperature, temperatureStatus |
brightnessTemperature |
(nessuno) | Temperatura di colore: DPT 7.600 (Kelvin) o 5.001 (percentuale dell’intervallo), secondo temperatureAs |
temperatureAs |
No | kelvin |
kelvin o percent |
combined, combinedStatus |
combined |
(nessuno) | Luminosità e temperatura insieme, DPT 249.600 |
warm, warmStatus, cold, coldStatus |
warmCold |
(nessuno) | I due livelli di bianco, DPT 5.001 |
warmestK, coolestK |
No | 2700, 6500 |
L’intervallo di temperatura, 1000–20000 K. Non con warmCold |
control, stepCode, repeatMs |
No | Come per Dimmer | |
offIcon, onColor, offColor |
No | Come per Interruttore |
Gli oggetti di invio obbligatori e i relativi stati, se presenti, dipendono da objects; gli oggetti di un’altra disposizione sono un errore.
{ "type": "tunableWhite", "name": "Reading light", "switch": "1/2/1", "brightness": "1/2/2", "temperature": "1/2/3", "temperatureStatus": "1/2/4" }
Luce colorata
Una luce RGB, RGBW o RGB + bianco regolabile.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
light |
No | rgb |
rgb, rgbw o rgbTunableWhite |
control |
No | la prima disposizione della luce | Come viene inviato il colore: oneObject, rgbAndWhite o separate, secondo la tabella seguente |
white |
No | temperature |
rgbTunableWhite con rgbAndWhite: temperature o warmCold |
switch, switchStatus |
No | (nessuno) | Acceso/spento, DPT 1.001 |
brightness, brightnessStatus |
No | (nessuno) | La luminosità complessiva della luce, DPT 5.001 |
onFrom |
No | switchStatus |
Cosa indica che la luce è accesa: switchStatus o switchOrLevels |
temperatureAs, warmestK, coolestK |
No | Con un oggetto di temperatura, come per Bianco regolabile | |
offIcon, onColor, offColor |
No | Come per Interruttore |
light |
control |
Oggetti di invio |
|---|---|---|
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, poi temperature, oppure warm e cold (secondo white) |
rgbTunableWhite |
separate |
red, green, blue, warm, cold |
Ogni oggetto di invio ha uno stato con lo stesso nome seguito da Status (rgbStatus, redStatus, …; quello del livello bianco è whiteStatus). Gli stati colore sono indicati tutti o nessuno.
{ "type": "colorLight", "name": "Accent strip", "light": "rgb", "switch": "1/3/1", "rgb": "1/3/2", "rgbStatus": "1/3/3" }
Termostato
Mostra il setpoint o la temperatura ambiente e modifica il setpoint.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
shows |
No | setpoint |
Cosa mostra il widget in grande: setpoint o roomTemperature |
unit |
No | celsius |
celsius (DPT 9.001) o fahrenheit (9.027). I valori non vengono mai convertiti |
control |
No | absolute |
absolute (invia una temperatura) o increaseDecrease (invia passi di 1 bit) |
setpoint |
Con absolute |
(nessuno) | Comando del setpoint, con il DPT di unit |
increase, decrease |
Con increaseDecrease |
(nessuno) | Inviare passi, DPT 1. Può essere lo stesso indirizzo |
increaseValue, decreaseValue |
No | true, false |
Il bit inviato da increase e decrease |
setpointStatus |
Con increaseDecrease quando è mostrato il setpoint |
(nessuno) | Stato del setpoint |
roomTemperature |
Quando è mostrato | (nessuno) | Stato della temperatura ambiente |
step |
No | 0.5 |
Con absolute: 0.1, 0.2, 0.5 o 1 |
min, max |
No | 7–35 °C, 45–95 °F | I limiti del setpoint |
color |
No | quello del tema | Il colore dell’icona |
{ "type": "thermostat", "name": "Living room", "setpoint": "3/1/1", "setpointStatus": "3/1/2", "roomTemperature": "3/1/3" }
Ventilconvettore
Le velocità di un ventilconvettore, con acceso/spento, automatico/manuale, caldo/freddo, modalità HVAC e termostato opzionali. Le impostazioni determinano gli oggetti del widget; tutti gli oggetti di invio presenti sono obbligatori, gli stati sono facoltativi.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
fanSpeed, fanSpeedStatus |
fanSpeed |
(nessuno) | La velocità della ventola: DPT 5.001 per percent, altrimenti 5.010 |
stages |
No | 3 |
Velocità della ventola, 1–5 |
controlAs |
No | percent |
Come viene inviata una velocità: percent (percentuale), value (byte) o stageNumber (1, 2, 3 …) |
statusAs |
No | controlAs |
Come viene letto lo stato, come controlAs |
percentStages, valueStages |
No | distribuiti uniformemente | Il valore di ogni velocità, ad esempio [33, 67, 100] o [85, 170, 255] |
speedZero |
No | nothing |
Cosa significa la velocità 0: nothing, auto o manual |
onOff |
No | false |
true aggiunge switchCommand e switchStatus (DPT 1.001) |
autoManualObjects |
No | (disattivato) | one: autoManual (+ autoManualStatus). two: auto e manual (+ stati). DPT 1 |
autoManualInvert |
No | false |
Con one: true se 1 significa manuale |
heatCoolObjects |
No | (disattivato) | one: heatCool (+ heatCoolStatus), DPT 1.100. two: heat e cool (+ stati), DPT 1 |
heatCoolInvert |
No | false |
Con one: true se 1 significa freddo |
hvacObjects |
No | (disattivato) | byte: hvacMode (+ hvacModeStatus), DPT 20.102. bits: un oggetto per modalità disponibile, hvacAuto, hvacComfort, hvacStandby, hvacEconomy, hvacProtection (+ stati), DPT 1 |
hvacModes |
No | tutte tranne auto |
Modalità disponibili: auto, comfort, standby, economy, buildingProtection |
thermostat |
No | (disattivato) | Un oggetto con shows, unit, control, step, min, max, increaseValue e decreaseValue del Termostato. Aggiunge setpoint oppure increase e decrease, oltre a setpointStatus e roomTemperature |
offIcon, onColor, offColor |
No | Come per Interruttore |
{ "type": "fanCoil", "name": "Office fan coil", "fanSpeed": "7/1/1", "fanSpeedStatus": "7/1/2", "onOff": true, "switchCommand": "7/1/3", "switchStatus": "7/1/4" }
Condizionatore
Un’unità split o VRV tramite il suo gateway KNX. Il suo type è airConditioner.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
kind |
No | split |
split o vrv |
switchCommand, switchStatus |
Sì | (nessuno) | Acceso/spento, DPT 1.001 |
setpoint, setpointStatus |
setpoint |
(nessuno) | Setpoint, con il DPT di unit |
roomTemperature |
Quando è mostrato | (nessuno) | Stato della temperatura ambiente |
mode, modeStatus |
mode |
(nessuno) | Modalità di funzionamento, DPT 20.105 |
fanSpeed, fanSpeedStatus |
fanSpeed |
(nessuno) | Velocità della ventola, DPT 5.010 |
shows, unit, step |
No | setpoint, celsius, 1 |
Come per Termostato |
min, max |
No | 16–30 °C, 61–86 °F | I limiti del setpoint |
modes |
No | tutte per split; caldo, freddo, ventilazione e deumidificazione per vrv |
Modalità disponibili: auto, heat, cool, fan, dry |
modeValues |
No | automatico 0, caldo 1, freddo 3, ventilazione 9, deumidificazione 14 | Il byte inviato da ogni modalità, ad esempio {"dry": 4} |
fanStages |
No | 3 |
Velocità della ventola |
fanValues |
No | [1, 2, 3] |
Il byte inviato da ogni velocità |
fanAutoValue |
No | (nessuno) | Se indicato, la ventola offre Auto e invia questo byte per tale modalità |
faultAs |
No | (nessuno) | Se indicato, fault è obbligatorio: bit (DPT 1.005), code (un byte, DPT 5.010) o text (DPT 16.000) |
fault |
Con faultAs |
(nessuno) | Stato di guasto |
faultInvert |
No | false |
Con bit: true se 0 significa un guasto |
faultCodes |
No | [] |
Con code: {"value": 3, "text": "Filter"}, testi mostrati per codici noti |
offIcon, onColor, offColor |
No | Come per Interruttore |
{ "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" }
Connessione
Come la dashboard si connette all’apertura. Se omessa è automatica: mantiene una connessione esistente dell’app, altrimenti usa il gateway selezionato, altrimenti esegue una ricerca.
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
mode |
Sì | (nessuno) | automatic, gateway o multicast |
gateway |
No | (nessuno) | Con gateway: il gateway a cui si connette. Se omesso, la dashboard non può avviarsi finché non ne viene scelto uno nelle impostazioni |
secure |
No | false |
Con multicast: true per KNX IP Secure Routing |
L’oggetto gateway:
| Campo | Obbligatorio | Valore predefinito | Descrizione |
|---|---|---|---|
host |
Sì | (nessuno) | Indirizzo IP o nome host |
port |
No | 3671 |
Porta UDP o TCP |
name |
No | (nessuno) | Un nome da mostrare |
transport |
No | udp |
udp, tcp o auto (prima TCP, poi UDP) |
nat |
No | false |
true per un gateway dietro NAT |
knxAddress |
No | (nessuno) | L’indirizzo fisico del gateway, ad esempio 1.1.250. Secure Tunneling lo usa per trovare le credenziali |
secure |
No | false |
true per KNX IP Secure Tunneling |
serial, mac |
No | (nessuno) | Il numero di serie e l’indirizzo MAC rilevati del gateway |
{
"format": 1,
"name": "Office",
"connection": { "mode": "gateway", "gateway": { "name": "Office router", "host": "10.0.0.5", "transport": "tcp" } },
"home": { "name": "Home", "tiles": [] }
}
Le esportazioni dell’opzione JSON non protetto non contengono chiavi o credenziali. JSON non protetto e Con chiavi usano entrambi l’estensione .json; l’importazione riconosce la protezione dal contenuto.
JSON protetto da password
L’opzione Con chiavi cifra l’intero contenuto. Il contenitore JSON può essere aperto in un editor di testo, ma la definizione della dashboard e le chiavi devono essere decifrate per leggerle o modificarle. La password di esportazione è richiesta per importare e non viene mai salvata.
| Campo del contenitore | Valore o scopo nella versione 1 |
|---|---|
format |
1 |
protected.version |
1 |
protected.cipher |
AES-256-GCM |
protected.kdf |
PBKDF2-HMAC-SHA256 |
protected.iterations |
600000; fisso in questa versione di protezione |
protected.salt |
Base64 di 16 byte casuali |
protected.nonce |
Base64 del nonce di cifratura di 12 byte |
protected.ciphertext |
Base64 del contenuto cifrato |
protected.tag |
Base64 del tag di autenticazione di 16 byte |
L’autenticazione vincola il contenuto anche a SharKNX dashboard protected JSON v1. Password errate o testo cifrato alterato non possono produrre una dashboard importata. Il file selezionato è limitato a 32 MiB; il contenuto decifrato a 16 MiB.
Il contenuto decifrato contiene dashboard (la definizione descritta qui) e, solo per una fonte di chiavi propria, keys. Senza keys, il progetto rimane automatico: l’app ricevente fornisce la propria sicurezza. Un pacchetto proprio, anche vuoto, diventa Chiavi importate, salvate cifrate con questa dashboard sotto una nuova identità locale. Il riferimento al progetto originale e la password di esportazione non vengono mai salvati nell’app.
keys.groupKeys associa numeri decimali di indirizzi di gruppo KNX (0–65535, scritti come stringhe) a chiavi esadecimali di 32 cifre. Sono conservati solo gli indirizzi usati. Il campo opzionale keys.credentials contiene devices per un gateway sicuro configurato, con address, deviceAuthCode opzionale e interfaces (userId, individualAddress, password); il multicast sicuro contiene invece backboneKeyHex e backboneSecurityEnabled. Sono esclusi Tool Keys, indirizzi e gateway non pertinenti e nomi dei progetti.
La connessione e il progetto automatici usano la configurazione dell’app ricevente. Non contengono mai una copia della connessione o del progetto dell’app esportatrice. Una dashboard con chiavi proprie e connessione automatica può contenere le chiavi di gruppo usate, ma nessuna credenziale del gateway. Le impostazioni del progetto mostrano Chiavi importate finché non salvi Automatico o un altro progetto; scegliere un progetto abilita anche la sua lista di indirizzi e l’aggiornamento delle chiavi. Le chiavi importate possono essere esportate di nuovo.
L’importazione si trova in + → Aggiungi → Importa dashboard. Al termine rimani in Dashboard; in caso di nome uguale puoi scegliere Importa come copia o Sostituisci. Gli errori appaiono in un dialogo con una sezione di codice scorrevole e Copia dettagli.
Esempio completo
La casa di esempio: Home con collegamenti a due spazi, un soggiorno con due pagine e una cucina, un widget di scene Moods, due preferiti e un gateway configurato.
{
"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" }
]
}
]
}
}
Validazione
L’importazione verifica l’intero file ed elenca ogni problema con la sua posizione, ad esempio $.home.rooms[1].tiles[3].status.address. Un file con un problema non viene importato; non viene salvato nulla.
| Problema | Esempio |
|---|---|
| Non è JSON | Una virgola o virgoletta mancante |
| Manca un campo obbligatorio | Un widget senza name |
| Un campo ha un valore del tipo errato | "size": 2 invece di "2x1" |
| Un valore sconosciuto | "control": "slide" |
| Un tipo di widget non riconosciuto dall’app | Un file di una versione più recente di SharKNX |
| A un widget manca un indirizzo necessario | Un dimmer con control slider ma senza brightness |
| Un widget non rispetta le proprie regole | Un DPT non adatto alla funzione, una dimensione non consentita dal tipo o un numero di scena superiore a 63 |
| Un collegamento o preferito punta a un elemento inesistente | "target": "r9" senza spazio r9 |
| Un ID è usato due volte | Due widget t4 |
| La forma completa e quella breve insieme | tiles e panels in uno spazio; address e targets in un oggetto di invio |
| Un formato file più recente | "format": 2 |
Limiti
| Elemento | Limite |
|---|---|
| Nomi (dashboard, spazi, widget, stati, pulsanti) | 50 caratteri |
| Spazi in una dashboard, Home incluso | 500 |
| Nidificazione degli spazi sotto Home | 8 livelli |
| Pagine in uno spazio | 10 |
| Widget in una pagina | 100 |
| Widget in una dashboard | 5000 |
| Numeri negli ID | 0–999999 |
Versioni
Ogni file esportato inizia con "format": 1. Senza questo campo viene letto come formato attuale. Un file con un numero superiore proviene da una versione più recente di SharKNX e non viene importato; aggiorna l’app.
I file rimangono importabili con l’evoluzione di SharKNX: i nuovi campi hanno valori predefiniti, quindi un file precedente può semplicemente non contenerli. Un campo non cambia mai significato mantenendo lo stesso nome. Un file nuovo in un’app precedente perde solo i campi che quell’app non riconosce.