El formato JSON de los paneles de visualización de SharKNX: espacios, páginas, widgets y las direcciones de grupo que utilizan.
Puedes exportar un panel desde SharKNX como archivo JSON e importarlo de nuevo en el mismo dispositivo o en otro. También puedes escribirlo en un editor de texto: la aplicación exporta todos los campos, pero al importar solo necesita lo que no puede deducir. Así, un diseño escrito a mano queda breve.
La forma más rápida de empezar es usar el panel vacío o la casa de ejemplo. También puedes crear un panel pequeño en la aplicación, exportarlo y editar el archivo.
En esta página
- Estructura
- Panel
- Espacios y páginas
- IDs y enlaces
- Widgets
- Direcciones de grupo
- Colores e iconos
- Tipos de widgets
- Conexión
- Ejemplo completo
- Validación
- Versiones
Estructura
Un panel contiene un espacio, Home. Los demás espacios están dentro de Home o de otro espacio. Un espacio tiene una o varias páginas entre las que puedes deslizar, y cada página contiene widgets en una cuadrícula.
{
"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" }
]
}
]
}
}
En el archivo, los espacios se llaman rooms, las páginas panels y los widgets tiles. El archivo es JSON UTF-8; se acepta una marca de orden de bytes al principio.
Panel
El nivel superior del archivo.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
format |
No | 1 |
La versión del formato. Consulta Versiones |
name |
Sí | (ninguno) | El nombre del panel, hasta 50 caracteres. Los nombres son únicos en cada dispositivo: si ya existe, la importación permite crear una copia o sustituirlo |
home |
Sí | (ninguno) | El espacio Home. Consulta Espacios y páginas |
theme |
No | auto |
auto (sigue el modo claro u oscuro del dispositivo), light, dark, night, wave, sahara, aurora o neon |
buttons |
No | filled |
Aspecto de los botones de los widgets: filled o plain |
keepScreenOn |
No | false |
true mantiene la pantalla encendida mientras el panel está abierto |
muteBanners |
No | false |
true muestra las notificaciones solo en Actividad, sin avisos en pantalla |
favorites |
No | [] |
IDs de widgets que aparecen en Favoritos, en este orden, por ejemplo ["t1", "t4"] |
connection |
No | automática | Cómo se conecta el panel al bus. Consulta Conexión |
Se ignora el campo project de un archivo importado: el enlace a un proyecto del Archivo pertenece al dispositivo que creó el archivo.
Espacios y páginas
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
id |
No | asignado | r y un número, por ejemplo r3. Home siempre es r0. Solo un espacio al que apunta un enlace necesita ID. Consulta IDs y enlaces |
name |
Sí | (ninguno) | El nombre del espacio, hasta 50 caracteres |
icon |
No | predeterminado | Un nombre de icono, por ejemplo kitchen. Consulta Colores e iconos |
tiles |
Uno de estos | (ninguno) | Los widgets de un espacio con una sola página |
panels |
Uno de estos | (ninguno) | Las páginas de un espacio con varias páginas, hasta 10 |
rooms |
No | [] |
Los espacios dentro de este |
Usa tiles o panels, pero no ambos. Cada página de panels contiene:
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
id |
No | asignado | p y un número, por ejemplo p2 |
tiles |
No | [] |
Los widgets de la página, en orden, hasta 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 y enlaces
Cada espacio, página y widget tiene un ID: r para espacios, p para páginas y t para widgets, seguido de un número hasta 999999. Los IDs son únicos dentro de un panel, no entre paneles.
- Si omites los IDs, la importación los asigna a partir del ID más alto del archivo.
- Escribe un ID cuando algo lo use como referencia: un espacio que abre un widget de navegación o un widget incluido en
favorites. - Un enlace o favorito debe indicar un ID escrito en el archivo. Si apunta a un ID que el archivo nunca declara, es un error, aunque la importación hubiera asignado ese ID a otro elemento.
- Un archivo exportado siempre incluye todos los IDs.
Widgets
Campos comunes a todos los widgets:
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
type |
Sí | (ninguno) | El tipo de widget. Consulta Tipos de widgets |
name |
Sí | (ninguno) | Se muestra en el widget, hasta 50 caracteres |
id |
No | asignado | t y un número, por ejemplo t12 |
icon |
No | el del tipo | Un nombre de icono. Consulta Colores e iconos |
size |
No | el del tipo | Celdas de la cuadrícula, ancho × alto: 1x1, 2x1, 3x1, 2x2, 3x2 o 3x3. Cada tipo admite ciertas dimensiones |
| Tipo | Función | Tamaños | Tamaño predeterminado |
|---|---|---|---|
navigation |
Abre un espacio | 2x1, 3x1, 2x2 | 2x1 |
switch |
Enciende y apaga algo | 1x1, 2x1, 2x2 | 2x1 |
statusIndicator |
Muestra un estado de encendido/apagado | 1x1, 2x1 | 1x1 |
valueDisplay |
Muestra un número | 1x1, 2x1, 3x1, 2x2, según la vista | 2x1 |
valueControl |
Envía un número | 1x1, 2x1, 3x1, 2x2 | 3x1 (2x1 sin control) |
modeStatus |
Muestra un byte como estados con nombre | 1x1, 2x1, 3x1 | 2x1 |
dimmer |
Una luz regulable | 1x1, 2x1, 3x1, 2x2 | 2x2 |
blind |
Una persiana o estor | 1x1, 2x1, 3x1, 2x2, 3x2 | 2x2 |
scene |
Activa una escena o alterna entre dos | 1x1, 2x1, 2x2 | 2x1 |
scenes |
Una fila de botones de escena | 2x1, 2x2, 3x2, 3x3 | 2x2 |
tunableWhite |
Una luz con temperatura de color | 1x1, 2x1, 3x1, 2x2, 3x2 | 2x2 |
colorLight |
Una luz RGB, RGBW o RGB + blanco | 1x1, 2x1, 3x1, 2x2, 3x2 | 2x1 |
thermostat |
Una consigna de temperatura ambiente | 1x1, 2x1, 3x1, 2x2 | 2x2 |
fanCoil |
Un fan coil | 1x1, 2x1, 3x1, 2x2, 3x2 (3x3 con funciones integradas) | 2x1 |
airConditioner |
Una unidad split o VRV a través de su pasarela KNX | 1x1, 2x1, 3x1, 2x2, 3x3 | 2x2 |
No se importa un archivo que contiene un tipo desconocido para esta versión de SharKNX.
Direcciones de grupo
Un widget envía a ciertas direcciones (comando) y muestra otras (estado). Las direcciones de grupo se escriben en tres niveles, por ejemplo "1/2/3". Un DPT se escribe con tipo principal y subtipo, por ejemplo "1.001" o "9.001".
Forma abreviada. Escribe solo la dirección y tomará el DPT de su función: 1.001 para un comando de interruptor, 5.001 para el brillo de un regulador y el DPT de valueType para una visualización de valor. Cada tipo de widget indica sus valores predeterminados más abajo.
{ "type": "switch", "name": "Hall light", "command": "1/0/1", "status": "1/0/2" }
Forma completa. Para usar otro DPT del mismo tipo principal (1.019 para un contacto de ventana, 9.004 para un valor de lux), enviar un comando a varias direcciones o evitar leer un estado al abrir el panel:
{
"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 | Uso | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|---|
address |
Comandos y estados | Uno de estos | (ninguno) | Una dirección de grupo |
targets |
Comandos | Uno de estos | (ninguno) | Varias direcciones de grupo que reciben el mismo valor |
dpt |
Comandos y estados | No | el de la función | El DPT con el que se codifica el valor |
readOnOpen |
Estados | No | true |
false: no leer el estado al abrir el panel; esperar al bus |
Un DPT debe corresponder a su función: un interruptor admite cualquier DPT 1 (1.001 conmutación, 1.008 subir/bajar, …), y el brillo de un regulador usa DPT 5.001.
Colores e iconos
Los colores son nombres: red, orange, yellow, green, blue, purple o grey. Cada uno tiene un tono claro y otro oscuro, elegido por el tema.
Los iconos son nombres del catálogo de la aplicación, por ejemplo light_group, floor_lamp, table_lamp, wall_lamp, socket, shutter, curtains, heating, cooling, window, door, temperature, humidity, relax, dinner, all_off. Los iconos de espacios incluyen home, living, kitchen, dining, bedroom, bathroom, office, hallway, garage, garden y terrace. El selector de iconos de la aplicación muestra todos los nombres.
Un nombre de color o icono desconocido se conserva y se dibuja con el valor predeterminado, por lo que un archivo de una versión más reciente de SharKNX sigue siendo importable.
Tipos de widgets
Navegación
Abre otro espacio.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
target |
Sí | (ninguno) | El ID del espacio que abre, por ejemplo r1. Ese espacio debe declarar el ID en el archivo |
{
"format": 1,
"name": "Links",
"home": {
"name": "Home",
"tiles": [{ "type": "navigation", "name": "Kitchen", "icon": "kitchen", "target": "r1" }],
"rooms": [{ "id": "r1", "name": "Kitchen", "tiles": [] }]
}
}
Interruptor
Al tocar, alterna entre encendido y apagado o envía siempre el mismo valor.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
command |
Sí | (ninguno) | Comando, DPT 1 (1.001 si se omite) |
status |
No | (ninguno) | Estado, DPT 1 (1.001 si se omite). Sin estado, el widget muestra lo último que se envió o recibió en command |
fixed |
No | (ninguno) | 1 o 0: cada toque envía este valor en lugar de alternar |
invertCommand |
No | false |
true envía 0 para encendido y 1 para apagado. No con fixed |
invertStatus |
No | false |
true interpreta 0 como encendido |
zeroLabel, oneLabel |
No | Apagado, Encendido | Los nombres de estado mostrados para 0 y 1 |
offIcon |
No | el icono | El icono mostrado cuando está apagado |
onColor, offColor |
No | el del tema | El color del icono cuando está encendido y apagado |
{ "type": "switch", "name": "Garden pump", "icon": "valve", "command": "1/5/1", "status": "1/5/2", "zeroLabel": "Stopped", "oneLabel": "Running" }
Indicador de estado
Muestra un estado de encendido/apagado; tocar no hace nada.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
status |
Sí | (ninguno) | Estado, cualquier DPT 1 (1.001 si se omite) |
invertStatus, zeroLabel, oneLabel, offIcon, onColor, offColor |
No | Como en Interruptor |
{ "type": "statusIndicator", "name": "Window", "icon": "window", "status": { "address": "6/1/1", "dpt": "1.019" }, "zeroLabel": "Closed", "oneLabel": "Open" }
Visualización de valor
Muestra un número o bytes sin procesar tal como llegan. Su type es valueDisplay.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
status |
Sí | (ninguno) | Estado. El DPT debe corresponder a valueType; si se omite, se usa el del tipo (ninguno para hex) |
valueType |
No | f16 |
Cómo se decodifica el valor, con el DPT usado si se omite: 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 (bytes sin procesar). Un DPT explícito puede ser cualquier subtipo del mismo tipo principal (para u8, no 5.001 ni 5.003) |
view |
No | number |
number, bar o gauge. Barra: 2x1 o 3x1. Indicador: 1x1 o 2x2. No para hex |
unit |
No | (ninguno) | Se muestra después del valor, por ejemplo °C |
decimals |
No | tal como se recibe | 0 a 2 |
displayMin, displayMax |
No | el rango del tipo | El rango de una barra o indicador |
scaleColors |
No | el del tema | Colores de una barra o indicador: coolWarm, greenRed, redGreen o neutral |
displayScale |
No | 1 |
El valor recibido se divide por este número antes de mostrarse, por ejemplo 1000 para mostrar Wh como kWh |
El tamaño 1x1 solo admite valores de 1 o 2 bytes.
{ "type": "valueDisplay", "name": "Power", "icon": "electricity", "valueType": "s32", "unit": "kW", "decimals": 2, "displayScale": 1000, "status": { "address": "9/1/1", "dpt": "13.010" } }
Control de valor
Envía un número: con − y +, un deslizador o botones para valores fijos.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
command |
Sí | (ninguno) | Comando. El DPT debe corresponder a valueType; si se omite, se usa el del tipo |
status |
No | (ninguno) | Estado, como command |
valueType |
No | f16 |
Como en Visualización de valor, excepto hex |
control |
No | stepper |
Qué muestra el widget: stepper (− y +), slider, buttons o none |
min, max |
No | el rango del tipo | El rango en el que se mueve el control |
step |
No | 0.5 para decimales, 10 para porcentajes, en otros casos 1 | Cuánto modifican − y + |
unit |
No | (ninguno) | Se muestra después del valor |
decimals |
No | tal como se recibe | 0 a 2 |
choices |
Con buttons |
[] |
Hasta 8 botones: {"value": 21, "name": "Comfort"}, cada valor dentro del rango y sin repetir |
color |
No | el del tema | El color del icono |
{
"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" }]
}
Visualización del modo
Muestra un byte como estados con nombre, por ejemplo un modo HVAC.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
status |
Sí | (ninguno) | Estado, DPT 5, 17 o 20 (5.010 si se omite) |
states |
Sí | (ninguno) | 1 a 8 estados: {"value": 1, "name": "Comfort", "icon": "…"}, valores 0–255, sin repetir |
color |
No | el del tema | El color del icono |
{
"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" }]
}
Regulador
Una luz regulable: el icono la enciende o apaga, un deslizador ajusta el brillo o − y + lo regulan.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
switch |
No | (ninguno) | Comando de encendido/apagado, DPT 1.001 |
switchStatus |
No | (ninguno) | Estado de encendido/apagado, DPT 1.001 |
brightness |
Con slider |
(ninguno) | Comando de brillo, DPT 5.001 |
brightnessStatus |
No | (ninguno) | Estado de brillo, DPT 5.001 |
dimming |
Con stepper |
(ninguno) | Comando de regulación relativa, DPT 3.007 |
control |
No | slider con brightness, en otros casos stepper |
El control 2x2. Solo se puede indicar el objeto de envío del control seleccionado |
stepCode |
No | 5 |
Paso de regulación, 1–7: 1 = 100 %, 2 = 50 %, … 5 = 6.25 %, … 7 = 1.56 % |
repeatMs |
No | 500 |
Repetición mientras se mantiene − o +: 500, 1000 o 1250 ms |
offIcon, onColor, offColor |
No | Como en Interruptor |
{ "type": "dimmer", "name": "Sofa lamp", "icon": "floor_lamp", "switch": "1/1/10", "switchStatus": "1/1/11", "brightness": "1/1/12", "brightnessStatus": "1/1/13" }
Persiana
Una persiana o estor: subir, detener y bajar, o una posición.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
control |
No | step |
step (subir, detener, bajar) o position (un deslizador) |
move |
Con step |
(ninguno) | Comando de subir/bajar, cualquier DPT 1 (1.008 si se omite) |
stop |
Con step |
(ninguno) | Comando de detener o mover las lamas un paso, cualquier DPT 1 (1.008 si se omite) |
position |
Con position |
(ninguno) | Comando de posición, DPT 5.001 |
slatAdjustment |
No | false |
true para persianas con lamas |
slatPosition |
Con position y lamas |
(ninguno) | Comando de posición de las lamas, DPT 5.001 |
positionStatus, slatStatus |
No | (ninguno) | Estado de posición y posición de las lamas, DPT 5.001 |
upperEndStatus, lowerEndStatus |
No | (ninguno) | Estado de los finales de carrera, DPT 1 (1.002 si se omite) |
windAlarm |
No | (ninguno) | Estado de alarma de viento, DPT 1 (1.005 si se omite). Se muestra como advertencia; nunca bloquea un comando |
invert |
No | false |
true para actuadores en los que 0 % significa cerrado |
offIcon |
No | el icono | El icono mostrado cuando está abierta |
onColor, offColor |
No | el del tema | El color del icono cuando está cerrada y abierta |
0 % es abierta y 100 % cerrada. Solo se pueden indicar los objetos de envío del control seleccionado, y los de las lamas solo con slatAdjustment.
{ "type": "blind", "name": "Terrace blind", "move": "2/1/1", "stop": "2/1/2", "positionStatus": "2/1/3" }
Escena
Activa una escena. En modo toggle alterna entre dos escenas; en modo threshold elige una según un valor, por ejemplo la escena A a partir de 20 lux.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
command |
Sí | (ninguno) | Comando, DPT 18.001 |
mode |
No | single |
single, toggle o threshold |
scene |
No | 0 |
Escena A, tal como se envía: 0–63. La escena KNX 1 es 0, la 64 es 63 |
sceneB |
Con toggle y threshold |
(ninguno) | Escena B, 0–63 |
commandB |
No | command |
Enviar la escena B a su propia dirección, DPT 18.001 |
nameA, nameB |
No | (ninguno) | Los nombres de las dos escenas, solo con toggle |
iconB |
No | el icono | El icono de la escena B |
activation |
No | tap |
tap o hold para activar solo tras mantener pulsado |
holdMilliseconds |
No | 500 |
Duración de la pulsación mantenida: 200, 300, 400, 500, 1000, 2000 o 3000 |
saveOnLongPress |
No | false |
true: una pulsación larga guarda el estado actual como escena |
value |
Con threshold |
(ninguno) | Estado con el que se elige la escena. El DPT debe corresponder a valueType; si se omite, se usa el del tipo |
valueType |
No | f16 |
Cómo se decodifica value, como en Visualización de valor, excepto hex |
threshold |
No | 0 |
Escena A a partir de este valor, escena B por debajo |
defaultScene |
No | a |
a o b: la escena activada antes de recibir algún valor |
flagAbove, flagBelow |
No | (ninguno) | Iconos que indican qué lado está activo |
color |
No | el del tema | El color del icono |
{ "type": "scene", "name": "Cinema", "icon": "relax", "mode": "toggle", "command": "4/2/1", "scene": 4, "sceneB": 5, "nameA": "Movie", "nameB": "Lights up" }
Escenas
Un conjunto de botones de escena en una dirección.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
command |
Sí | (ninguno) | Comando, DPT 18.001 |
scenes |
Sí | (ninguno) | 1 a 9 botones: {"name": "Relax", "scene": 0, "icon": "relax"}. scene es el número enviado, 0–63, sin repetir |
color |
No | el del tema | El color de los iconos |
{
"type": "scenes",
"name": "Moods",
"command": "4/1/1",
"scenes": [{ "name": "Relax", "scene": 0, "icon": "relax" }, { "name": "Dinner", "scene": 1, "icon": "dinner" }]
}
Blanco regulable
Una luz con brillo y temperatura de color en una de tres disposiciones de objetos.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
objects |
No | brightnessTemperature |
brightnessTemperature, combined (un objeto DPT 249.600) o warmCold (dos niveles) |
switch, switchStatus |
No | (ninguno) | Encendido/apagado, DPT 1.001 |
brightness, brightnessStatus |
brightnessTemperature con slider |
(ninguno) | Brillo, DPT 5.001 |
dimming |
brightnessTemperature con stepper |
(ninguno) | Regulación relativa, DPT 3.007 |
temperature, temperatureStatus |
brightnessTemperature |
(ninguno) | Temperatura de color: DPT 7.600 (Kelvin) o 5.001 (porcentaje del rango), según temperatureAs |
temperatureAs |
No | kelvin |
kelvin o percent |
combined, combinedStatus |
combined |
(ninguno) | Brillo y temperatura juntos, DPT 249.600 |
warm, warmStatus, cold, coldStatus |
warmCold |
(ninguno) | Los dos niveles de blanco, DPT 5.001 |
warmestK, coolestK |
No | 2700, 6500 |
El rango de temperatura, 1000–20000 K. No con warmCold |
control, stepCode, repeatMs |
No | Como en Regulador | |
offIcon, onColor, offColor |
No | Como en Interruptor |
Los objetos de envío obligatorios y sus estados opcionales dependen de objects; los objetos de otra disposición son un error.
{ "type": "tunableWhite", "name": "Reading light", "switch": "1/2/1", "brightness": "1/2/2", "temperature": "1/2/3", "temperatureStatus": "1/2/4" }
Luz de color
Una luz RGB, RGBW o RGB + blanco regulable.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
light |
No | rgb |
rgb, rgbw o rgbTunableWhite |
control |
No | la primera disposición de la luz | Cómo se envía el color: oneObject, rgbAndWhite o separate, según permite la tabla siguiente |
white |
No | temperature |
rgbTunableWhite con rgbAndWhite: temperature o warmCold |
switch, switchStatus |
No | (ninguno) | Encendido/apagado, DPT 1.001 |
brightness, brightnessStatus |
No | (ninguno) | El brillo total de la luz, DPT 5.001 |
onFrom |
No | switchStatus |
Qué indica que la luz está encendida: switchStatus o switchOrLevels |
temperatureAs, warmestK, coolestK |
No | Con un objeto de temperatura, como en Blanco regulable | |
offIcon, onColor, offColor |
No | Como en Interruptor |
light |
control |
Objetos de envío |
|---|---|---|
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, después temperature, o warm y cold (según white) |
rgbTunableWhite |
separate |
red, green, blue, warm, cold |
Cada objeto de envío tiene un estado con su nombre seguido de Status (rgbStatus, redStatus, …; el del nivel de blanco es whiteStatus). Los estados de color se indican todos o ninguno.
{ "type": "colorLight", "name": "Accent strip", "light": "rgb", "switch": "1/3/1", "rgb": "1/3/2", "rgbStatus": "1/3/3" }
Termostato
Muestra la consigna o la temperatura ambiente y modifica la consigna.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
shows |
No | setpoint |
Qué muestra el widget en grande: setpoint o roomTemperature |
unit |
No | celsius |
celsius (DPT 9.001) o fahrenheit (9.027). Los valores nunca se convierten |
control |
No | absolute |
absolute (envía una temperatura) o increaseDecrease (envía pasos de 1 bit) |
setpoint |
Con absolute |
(ninguno) | Comando de consigna, con el DPT de unit |
increase, decrease |
Con increaseDecrease |
(ninguno) | Enviar pasos, DPT 1. Puede ser la misma dirección |
increaseValue, decreaseValue |
No | true, false |
El bit que envían increase y decrease |
setpointStatus |
Con increaseDecrease al mostrar la consigna |
(ninguno) | Estado de consigna |
roomTemperature |
Cuando se muestra | (ninguno) | Estado de 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 | Los límites de la consigna |
color |
No | el del tema | El color del icono |
{ "type": "thermostat", "name": "Living room", "setpoint": "3/1/1", "setpointStatus": "3/1/2", "roomTemperature": "3/1/3" }
Fan coil
Las velocidades de un fan coil, con encendido/apagado, automático/manual, calor/frío, modos HVAC y termostato opcionales. Los ajustes determinan los objetos del widget; todos sus objetos de envío son obligatorios y los estados son opcionales.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
fanSpeed, fanSpeedStatus |
fanSpeed |
(ninguno) | La velocidad del ventilador: DPT 5.001 para percent, en otros casos 5.010 |
stages |
No | 3 |
Velocidades del ventilador, 1–5 |
controlAs |
No | percent |
Cómo se envía una velocidad: percent (porcentaje), value (byte) o stageNumber (1, 2, 3 …) |
statusAs |
No | controlAs |
Cómo se lee el estado, como controlAs |
percentStages, valueStages |
No | distribuidos uniformemente | El valor de cada velocidad, por ejemplo [33, 67, 100] o [85, 170, 255] |
speedZero |
No | nothing |
Qué significa la velocidad 0: nothing, auto o manual |
onOff |
No | false |
true añade switchCommand y switchStatus (DPT 1.001) |
autoManualObjects |
No | (desactivado) | one: autoManual (+ autoManualStatus). two: auto y manual (+ estados). DPT 1 |
autoManualInvert |
No | false |
Con one: true si 1 significa manual |
heatCoolObjects |
No | (desactivado) | one: heatCool (+ heatCoolStatus), DPT 1.100. two: heat y cool (+ estados), DPT 1 |
heatCoolInvert |
No | false |
Con one: true si 1 significa frío |
hvacObjects |
No | (desactivado) | byte: hvacMode (+ hvacModeStatus), DPT 20.102. bits: un objeto por modo disponible, hvacAuto, hvacComfort, hvacStandby, hvacEconomy, hvacProtection (+ estados), DPT 1 |
hvacModes |
No | todos excepto auto |
Modos disponibles: auto, comfort, standby, economy, buildingProtection |
thermostat |
No | (desactivado) | Un objeto con shows, unit, control, step, min, max, increaseValue y decreaseValue de Termostato. Añade setpoint o increase y decrease, además de setpointStatus y roomTemperature |
offIcon, onColor, offColor |
No | Como en Interruptor |
{ "type": "fanCoil", "name": "Office fan coil", "fanSpeed": "7/1/1", "fanSpeedStatus": "7/1/2", "onOff": true, "switchCommand": "7/1/3", "switchStatus": "7/1/4" }
Aire acondicionado
Una unidad split o VRV a través de su pasarela KNX. Su type es airConditioner.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
kind |
No | split |
split o vrv |
switchCommand, switchStatus |
Sí | (ninguno) | Encendido/apagado, DPT 1.001 |
setpoint, setpointStatus |
setpoint |
(ninguno) | Consigna, con el DPT de unit |
roomTemperature |
Cuando se muestra | (ninguno) | Estado de temperatura ambiente |
mode, modeStatus |
mode |
(ninguno) | Modo de funcionamiento, DPT 20.105 |
fanSpeed, fanSpeedStatus |
fanSpeed |
(ninguno) | Velocidad del ventilador, DPT 5.010 |
shows, unit, step |
No | setpoint, celsius, 1 |
Como en Termostato |
min, max |
No | 16–30 °C, 61–86 °F | Los límites de la consigna |
modes |
No | todos para split; calor, frío, ventilador y deshumidificación para vrv |
Modos disponibles: auto, heat, cool, fan, dry |
modeValues |
No | automático 0, calor 1, frío 3, ventilador 9, deshumidificación 14 | El byte que envía cada modo, por ejemplo {"dry": 4} |
fanStages |
No | 3 |
Velocidades del ventilador |
fanValues |
No | [1, 2, 3] |
El byte que envía cada velocidad |
fanAutoValue |
No | (ninguno) | Si se indica, el ventilador ofrece Auto y envía este byte para ese modo |
faultAs |
No | (ninguno) | Si se indica, fault es obligatorio: bit (DPT 1.005), code (un byte, DPT 5.010) o text (DPT 16.000) |
fault |
Con faultAs |
(ninguno) | Estado de fallo |
faultInvert |
No | false |
Con bit: true si 0 significa un fallo |
faultCodes |
No | [] |
Con code: {"value": 3, "text": "Filter"}, textos para códigos conocidos |
offIcon, onColor, offColor |
No | Como en Interruptor |
{ "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" }
Conexión
Cómo se conecta el panel al abrirse. Si se omite, es automática: conserva cualquier conexión de la aplicación; si no hay, usa la pasarela seleccionada; si tampoco hay, busca una.
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
mode |
Sí | (ninguno) | automatic, gateway o multicast |
gateway |
No | (ninguno) | Con gateway: la pasarela a la que se conecta. Si se omite, el panel no puede funcionar hasta elegir una en sus ajustes |
secure |
No | false |
Con multicast: true para KNX IP Secure Routing |
El objeto gateway:
| Campo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|
host |
Sí | (ninguno) | Dirección IP o nombre de host |
port |
No | 3671 |
Puerto UDP o TCP |
name |
No | (ninguno) | Un nombre para mostrar |
transport |
No | udp |
udp, tcp o auto (primero TCP, después UDP) |
nat |
No | false |
true para una pasarela detrás de NAT |
knxAddress |
No | (ninguno) | La dirección física de la pasarela, por ejemplo 1.1.250. Secure Tunneling la usa para encontrar sus credenciales |
secure |
No | false |
true para KNX IP Secure Tunneling |
serial, mac |
No | (ninguno) | El número de serie y la dirección MAC detectados de la pasarela |
{
"format": 1,
"name": "Office",
"connection": { "mode": "gateway", "gateway": { "name": "Office router", "host": "10.0.0.5", "transport": "tcp" } },
"home": { "name": "Home", "tiles": [] }
}
Las exportaciones JSON sin protección no contienen claves ni credenciales. JSON sin protección y Con claves usan la extensión .json; la importación detecta la protección por el contenido.
JSON protegido por contraseña
La opción Con claves cifra todo el contenido. Puedes abrir el contenedor JSON en un editor de texto, pero debes descifrar la definición y las claves para leerlas o cambiarlas. La contraseña de exportación se necesita para importar y nunca se guarda.
| Campo del contenedor | Valor o función en la versión 1 |
|---|---|
format |
1 |
protected.version |
1 |
protected.cipher |
AES-256-GCM |
protected.kdf |
PBKDF2-HMAC-SHA256 |
protected.iterations |
600000; fijo en esta versión de protección |
protected.salt |
Base64 de 16 bytes aleatorios |
protected.nonce |
Base64 del nonce de cifrado de 12 bytes |
protected.ciphertext |
Base64 del contenido cifrado |
protected.tag |
Base64 de la etiqueta de autenticación de 16 bytes |
La autenticación vincula también el contenido a SharKNX dashboard protected JSON v1. Una contraseña incorrecta o un texto cifrado alterado no pueden producir un panel importado. El archivo seleccionado está limitado a 32 MiB y el contenido descifrado a 16 MiB.
El contenido descifrado contiene dashboard (la definición de esta referencia) y, solo para una fuente de claves propia, keys. Si falta keys, el proyecto sigue siendo automático: la aplicación receptora aporta su seguridad. Un paquete propio, incluso vacío, se convierte en Claves importadas, guardadas cifradas con el panel bajo una identidad local nueva. La referencia al proyecto original y la contraseña de exportación nunca se guardan en la aplicación.
keys.groupKeys relaciona números decimales de direcciones de grupo KNX (0–65535, escritos como cadenas) con claves hexadecimales de 32 dígitos. Solo se conservan las direcciones usadas. El campo opcional keys.credentials contiene devices para una pasarela segura configurada, con address, deviceAuthCode opcional e interfaces (userId, individualAddress, password); el multicast seguro contiene en su lugar backboneKeyHex y backboneSecurityEnabled. Se excluyen Tool Keys, direcciones y pasarelas ajenas y nombres de proyectos.
La conexión y el proyecto automáticos usan la configuración de la aplicación receptora. Nunca incluyen una copia de la conexión o del proyecto de la aplicación que exportó. Un panel con claves propias y conexión automática puede incluir las claves de grupo usadas, pero ninguna credencial de pasarela. Los ajustes de proyecto muestran Claves importadas hasta guardar Automático u otro proyecto; elegir un proyecto también habilita su lista de direcciones y la actualización de claves. Las claves importadas se pueden exportar de nuevo.
La importación está en + → Añadir → Importar panel. Al terminar, permaneces en Paneles; si coincide el nombre, puedes elegir Importar como copia o Sustituir. Los errores aparecen en un diálogo con una sección de código desplazable y Copiar detalles.
Ejemplo completo
La casa de ejemplo: Home con enlaces a dos espacios, un salón con dos páginas y una cocina, un widget de escenas Moods, dos favoritos y una pasarela configurada.
{
"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" }
]
}
]
}
}
Validación
La importación comprueba todo el archivo e indica cada problema con su ubicación, por ejemplo $.home.rooms[1].tiles[3].status.address. Un archivo con algún problema no se importa; no se guarda nada.
| Problema | Ejemplo |
|---|---|
| No es JSON | Falta una coma o comilla |
| Falta un campo obligatorio | Un widget sin name |
| Un campo tiene un valor del tipo incorrecto | "size": 2 en lugar de "2x1" |
| Un valor desconocido | "control": "slide" |
| Un tipo de widget que la aplicación no reconoce | Un archivo de una versión más reciente de SharKNX |
| Falta una dirección necesaria en un widget | Un regulador con control slider pero sin brightness |
| Un widget incumple sus propias reglas | Un DPT que no corresponde a su función, un tamaño no admitido por el tipo o un número de escena mayor que 63 |
| Un enlace o favorito apunta a algo inexistente | "target": "r9" sin espacio r9 |
| Un ID se usa dos veces | Dos widgets t4 |
| La forma completa y la abreviada juntas | tiles y panels en un espacio; address y targets en un objeto de envío |
| Un formato de archivo más reciente | "format": 2 |
Límites
| Elemento | Límite |
|---|---|
| Nombres (panel, espacios, widgets, estados, botones) | 50 caracteres |
| Espacios en un panel, incluido Home | 500 |
| Anidación de espacios bajo Home | 8 niveles |
| Páginas en un espacio | 10 |
| Widgets en una página | 100 |
| Widgets en un panel | 5000 |
| Números en los IDs | 0–999999 |
Versiones
Cada archivo exportado empieza con "format": 1. Si falta, se lee como el formato actual. Un archivo con un número superior se creó con una versión más reciente de SharKNX y no se importa; actualiza la aplicación.
Los archivos siguen siendo importables a medida que crece SharKNX: se añaden campos con valores predeterminados, así que un archivo antiguo puede carecer de ellos. Un campo nunca cambia de significado bajo el mismo nombre. Un archivo nuevo en una aplicación antigua solo pierde los campos que esta no reconoce.