Le format JSON des tableaux de bord de visualisation SharKNX : espaces, pages, widgets et adresses de groupe utilisées.
Un tableau de bord peut être exporté depuis SharKNX au format JSON, puis importé sur le même appareil ou un autre. Vous pouvez aussi l’écrire dans un éditeur de texte : l’application exporte tous les champs, mais l’importation ne demande que les informations qu’elle ne peut pas déduire. Un fichier écrit à la main reste ainsi court.
Le plus simple est de commencer avec le tableau de bord vide ou la maison d’exemple. Vous pouvez aussi créer un petit tableau de bord dans l’application, l’exporter et modifier le fichier.
Sur cette page
- Structure
- Tableau de bord
- Espaces et pages
- Identifiants et liens
- Widgets
- Adresses de groupe
- Couleurs et icônes
- Types de widgets
- Connexion
- Exemple complet
- Validation
- Versions
Structure
Un tableau de bord contient un espace, Home. Tous les autres espaces se trouvent dans Home ou dans un autre espace. Un espace contient une ou plusieurs pages entre lesquelles vous balayez l’écran, avec des widgets disposés en grille.
{
"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" }
]
}
]
}
}
Dans le fichier, les espaces s’appellent rooms, les pages panels et les widgets tiles. Le fichier utilise JSON en UTF-8 ; une marque d’ordre des octets au début est acceptée.
Tableau de bord
Le niveau supérieur du fichier.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
format |
Non | 1 |
La version du format. Voir Versions |
name |
Oui | (aucun) | Le nom du tableau de bord, 50 caractères maximum. Les noms sont uniques sur un appareil : si le nom existe déjà, l’importation propose une copie ou un remplacement |
home |
Oui | (aucun) | L’espace Home. Voir Espaces et pages |
theme |
Non | auto |
auto (suit le mode clair ou sombre de l’appareil), light, dark, night, wave, sahara, aurora ou neon |
buttons |
Non | filled |
Aspect des boutons des widgets : filled ou plain |
keepScreenOn |
Non | false |
true garde l’écran allumé lorsque le tableau de bord est ouvert |
muteBanners |
Non | false |
true affiche les notifications uniquement dans Activité, sans bannières |
favorites |
Non | [] |
Identifiants des widgets affichés dans Favoris, dans cet ordre, par exemple ["t1", "t4"] |
connection |
Non | automatique | Connexion du tableau de bord au bus. Voir Connexion |
Le champ project d’un fichier importé est ignoré : le lien vers un projet de l’Archive appartient à l’appareil qui a créé le fichier.
Espaces et pages
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
id |
Non | attribué | r suivi d’un nombre, par exemple r3. Home est toujours r0. Seul un espace ouvert par un lien a besoin d’un identifiant. Voir Identifiants et liens |
name |
Oui | (aucun) | Le nom de l’espace, 50 caractères maximum |
icon |
Non | par défaut | Un nom d’icône, par exemple kitchen. Voir Couleurs et icônes |
tiles |
Un des deux | (aucun) | Les widgets d’un espace avec une seule page |
panels |
Un des deux | (aucun) | Les pages d’un espace à plusieurs pages, 10 maximum |
rooms |
Non | [] |
Les espaces contenus dans celui-ci |
Utilisez tiles ou panels, pas les deux. Chaque page de panels contient :
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
id |
Non | attribué | p suivi d’un nombre, par exemple p2 |
tiles |
Non | [] |
Les widgets de la page, dans l’ordre, 100 maximum |
{
"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" }] }
]
}
}
Identifiants et liens
Chaque espace, page et widget a un identifiant : r pour les espaces, p pour les pages, t pour les widgets, suivi d’un nombre jusqu’à 999999. Les identifiants sont uniques dans un tableau de bord, pas entre plusieurs tableaux de bord.
- Si vous omettez les identifiants, l’importation les attribue au-delà du plus grand identifiant du fichier.
- Indiquez un identifiant lorsqu’un élément y fait référence : un espace ouvert par un widget de navigation, ou un widget figurant dans
favorites. - Un lien ou un favori doit désigner un identifiant écrit dans le fichier. Un identifiant jamais déclaré est une erreur, même si l’importation aurait attribué cet identifiant à un autre élément.
- Un fichier exporté contient toujours tous les identifiants.
Widgets
Champs communs à tous les widgets :
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
type |
Oui | (aucun) | Le type de widget. Voir Types de widgets |
name |
Oui | (aucun) | Affiché sur le widget, 50 caractères maximum |
id |
Non | attribué | t suivi d’un nombre, par exemple t12 |
icon |
Non | celui du type | Un nom d’icône. Voir Couleurs et icônes |
size |
Non | celui du type | Cellules de grille, largeur × hauteur : 1x1, 2x1, 3x1, 2x2, 3x2 ou 3x3. Chaque type autorise certaines tailles |
| Type | Fonction | Tailles | Taille par défaut |
|---|---|---|---|
navigation |
Ouvre un espace | 2x1, 3x1, 2x2 | 2x1 |
switch |
Allume ou éteint un élément | 1x1, 2x1, 2x2 | 2x1 |
statusIndicator |
Affiche un état marche/arrêt | 1x1, 2x1 | 1x1 |
valueDisplay |
Affiche un nombre | 1x1, 2x1, 3x1, 2x2, selon l’affichage | 2x1 |
valueControl |
Envoie un nombre | 1x1, 2x1, 3x1, 2x2 | 3x1 (2x1 sans commande) |
modeStatus |
Affiche un octet sous forme d’états nommés | 1x1, 2x1, 3x1 | 2x1 |
dimmer |
Un éclairage à variation | 1x1, 2x1, 3x1, 2x2 | 2x2 |
blind |
Un store ou un volet | 1x1, 2x1, 3x1, 2x2, 3x2 | 2x2 |
scene |
Rappelle une scène ou alterne entre deux | 1x1, 2x1, 2x2 | 2x1 |
scenes |
Une rangée de boutons de scène | 2x1, 2x2, 3x2, 3x3 | 2x2 |
tunableWhite |
Un éclairage à température de couleur | 1x1, 2x1, 3x1, 2x2, 3x2 | 2x2 |
colorLight |
Un éclairage RGB, RGBW ou RGB + blanc | 1x1, 2x1, 3x1, 2x2, 3x2 | 2x1 |
thermostat |
Une consigne de température ambiante | 1x1, 2x1, 3x1, 2x2 | 2x2 |
fanCoil |
Un ventilo-convecteur | 1x1, 2x1, 3x1, 2x2, 3x2 (3x3 avec fonctions intégrées) | 2x1 |
airConditioner |
Une unité split ou VRV via sa passerelle KNX | 1x1, 2x1, 3x1, 2x2, 3x3 | 2x2 |
Un fichier contenant un type inconnu de cette version de SharKNX n’est pas importé.
Adresses de groupe
Un widget envoie sur certaines adresses (commande) et affiche les valeurs d’autres adresses (état). Les adresses de groupe s’écrivent sur trois niveaux, par exemple "1/2/3". Un DPT comporte un type principal et un sous-type, par exemple "1.001" ou "9.001".
Forme abrégée. Écrivez uniquement l’adresse ; elle prend le DPT de sa fonction : 1.001 pour une commande marche/arrêt, 5.001 pour la luminosité d’un variateur, le DPT de valueType pour un affichage de valeur. Chaque type de widget ci-dessous indique ses valeurs par défaut.
{ "type": "switch", "name": "Hall light", "command": "1/0/1", "status": "1/0/2" }
Forme complète. Pour utiliser un autre DPT du même type principal (1.019 pour un contact de fenêtre, 9.004 pour une valeur en lux), envoyer une commande à plusieurs adresses ou empêcher la lecture d’un état à l’ouverture du tableau de bord :
{
"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 }
}
| Champ | Utilisation | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
address |
Commandes et états | Un des deux | (aucun) | Une adresse de groupe |
targets |
Commandes | Un des deux | (aucun) | Plusieurs adresses de groupe recevant toutes la même valeur |
dpt |
Commandes et états | Non | celui de la fonction | Le DPT utilisé pour encoder la valeur |
readOnOpen |
États | Non | true |
false : ne jamais lire l’état à l’ouverture du tableau de bord ; attendre le bus |
Un DPT doit correspondre à sa fonction : un interrupteur accepte tout DPT 1 (1.001 marche/arrêt, 1.008 montée/descente, …), la luminosité d’un variateur utilise DPT 5.001.
Couleurs et icônes
Les couleurs sont des noms : red, orange, yellow, green, blue, purple ou grey. Chacune possède une nuance claire et une sombre, choisies par le thème.
Les icônes sont des noms du catalogue de l’application, par exemple light_group, floor_lamp, table_lamp, wall_lamp, socket, shutter, curtains, heating, cooling, window, door, temperature, humidity, relax, dinner, all_off. Les icônes d’espaces comprennent home, living, kitchen, dining, bedroom, bathroom, office, hallway, garage, garden et terrace. Le sélecteur d’icônes de l’application affiche tous les noms.
Un nom de couleur ou d’icône inconnu est conservé et affiché avec la valeur par défaut. Un fichier provenant d’une version plus récente de SharKNX reste ainsi importable.
Types de widgets
Navigation
Ouvre un autre espace.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
target |
Oui | (aucun) | L’identifiant de l’espace ouvert, par exemple r1. Cet espace doit déclarer cet identifiant dans le fichier |
{
"format": 1,
"name": "Links",
"home": {
"name": "Home",
"tiles": [{ "type": "navigation", "name": "Kitchen", "icon": "kitchen", "target": "r1" }],
"rooms": [{ "id": "r1", "name": "Kitchen", "tiles": [] }]
}
}
Interrupteur
Un appui alterne entre marche et arrêt, ou envoie toujours la même valeur.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
command |
Oui | (aucun) | Commande, DPT 1 (1.001 si omis) |
status |
Non | (aucun) | État, DPT 1 (1.001 si omis). Sans état, le widget affiche la dernière valeur envoyée ou reçue sur command |
fixed |
Non | (aucun) | 1 ou 0 : chaque appui envoie cette valeur au lieu d’alterner |
invertCommand |
Non | false |
true envoie 0 pour marche et 1 pour arrêt. Pas avec fixed |
invertStatus |
Non | false |
true interprète 0 comme marche |
zeroLabel, oneLabel |
Non | Arrêt, Marche | Les noms des états affichés pour 0 et 1 |
offIcon |
Non | l’icône | L’icône affichée à l’arrêt |
onColor, offColor |
Non | celle du thème | La couleur de l’icône en marche et à l’arrêt |
{ "type": "switch", "name": "Garden pump", "icon": "valve", "command": "1/5/1", "status": "1/5/2", "zeroLabel": "Stopped", "oneLabel": "Running" }
Indicateur d’état
Affiche un état marche/arrêt ; un appui ne fait rien.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
status |
Oui | (aucun) | État, tout DPT 1 (1.001 si omis) |
invertStatus, zeroLabel, oneLabel, offIcon, onColor, offColor |
Non | Comme pour Interrupteur |
{ "type": "statusIndicator", "name": "Window", "icon": "window", "status": { "address": "6/1/1", "dpt": "1.019" }, "zeroLabel": "Closed", "oneLabel": "Open" }
Affichage de valeur
Affiche un nombre ou des octets bruts tels qu’ils arrivent. Son type est valueDisplay.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
status |
Oui | (aucun) | État. Son DPT doit correspondre à valueType ; s’il est omis, le DPT du type est utilisé (aucun pour hex) |
valueType |
Non | f16 |
Décodage de la valeur, avec le DPT utilisé s’il est omis : 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) ou hex (octets bruts). Un DPT indiqué peut être tout sous-type du même type principal (pour u8, ni 5.001 ni 5.003) |
view |
Non | number |
number, bar ou gauge. Barre : 2x1 ou 3x1. Jauge : 1x1 ou 2x2. Pas pour hex |
unit |
Non | (aucun) | Affiché après la valeur, par exemple °C |
decimals |
Non | tel que reçu | 0 à 2 |
displayMin, displayMax |
Non | la plage du type | La plage d’une barre ou d’une jauge |
scaleColors |
Non | celle du thème | Couleurs d’une barre ou d’une jauge : coolWarm, greenRed, redGreen ou neutral |
displayScale |
Non | 1 |
La valeur reçue est divisée par ce nombre avant l’affichage, par exemple 1000 pour afficher les Wh en kWh |
Une taille 1x1 convient uniquement aux valeurs de 1 ou 2 octets.
{ "type": "valueDisplay", "name": "Power", "icon": "electricity", "valueType": "s32", "unit": "kW", "decimals": 2, "displayScale": 1000, "status": { "address": "9/1/1", "dpt": "13.010" } }
Commande de valeur
Envoie un nombre : avec − et +, un curseur ou des boutons de valeurs prédéfinies.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
command |
Oui | (aucun) | Commande. Son DPT doit correspondre à valueType ; s’il est omis, le DPT du type est utilisé |
status |
Non | (aucun) | État, comme command |
valueType |
Non | f16 |
Comme pour Affichage de valeur, sauf hex |
control |
Non | stepper |
Ce que le widget affiche : stepper (− et +), slider, buttons ou none |
min, max |
Non | la plage du type | La plage de déplacement de la commande |
step |
Non | 0.5 pour les nombres flottants, 10 pour les pourcentages, sinon 1 | Le pas de − et + |
unit |
Non | (aucun) | Affiché après la valeur |
decimals |
Non | tel que reçu | 0 à 2 |
choices |
Avec buttons |
[] |
Jusqu’à 8 boutons : {"value": 21, "name": "Comfort"}, chaque valeur dans la plage et utilisée une seule fois |
color |
Non | celle du thème | La couleur de l’icône |
{
"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" }]
}
Affichage du mode
Affiche un octet sous forme d’états nommés, par exemple un mode HVAC.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
status |
Oui | (aucun) | État, DPT 5, 17 ou 20 (5.010 si omis) |
states |
Oui | (aucun) | 1 à 8 états : {"value": 1, "name": "Comfort", "icon": "…"}, valeurs 0–255, chacune une seule fois |
color |
Non | celle du thème | La couleur de l’icône |
{
"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" }]
}
Variateur
Un éclairage à variation : l’icône l’allume ou l’éteint, un curseur règle la luminosité, ou − et + la font varier.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
switch |
Non | (aucun) | Commande marche/arrêt, DPT 1.001 |
switchStatus |
Non | (aucun) | État marche/arrêt, DPT 1.001 |
brightness |
Avec slider |
(aucun) | Commande de luminosité, DPT 5.001 |
brightnessStatus |
Non | (aucun) | État de luminosité, DPT 5.001 |
dimming |
Avec stepper |
(aucun) | Commande de variation relative, DPT 3.007 |
control |
Non | slider avec brightness, sinon stepper |
La commande 2x2. Seul l’objet d’envoi de la commande choisie peut être indiqué |
stepCode |
Non | 5 |
Pas de variation, 1–7 : 1 = 100 %, 2 = 50 %, … 5 = 6.25 %, … 7 = 1.56 % |
repeatMs |
Non | 500 |
Répétition tant que − ou + est maintenu : 500, 1000 ou 1250 ms |
offIcon, onColor, offColor |
Non | Comme pour Interrupteur |
{ "type": "dimmer", "name": "Sofa lamp", "icon": "floor_lamp", "switch": "1/1/10", "switchStatus": "1/1/11", "brightness": "1/1/12", "brightnessStatus": "1/1/13" }
Store
Un store ou un volet : montée, arrêt et descente, ou une position.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
control |
Non | step |
step (montée, arrêt, descente) ou position (un curseur) |
move |
Avec step |
(aucun) | Commande montée/descente, tout DPT 1 (1.008 si omis) |
stop |
Avec step |
(aucun) | Commande d’arrêt ou de pas des lamelles, tout DPT 1 (1.008 si omis) |
position |
Avec position |
(aucun) | Commande de position, DPT 5.001 |
slatAdjustment |
Non | false |
true pour les stores à lamelles |
slatPosition |
Avec position et des lamelles |
(aucun) | Commande de position des lamelles, DPT 5.001 |
positionStatus, slatStatus |
Non | (aucun) | État de position et de position des lamelles, DPT 5.001 |
upperEndStatus, lowerEndStatus |
Non | (aucun) | État des positions de fin de course, DPT 1 (1.002 si omis) |
windAlarm |
Non | (aucun) | État d’alarme de vent, DPT 1 (1.005 si omis). Affiché comme avertissement ; ne bloque jamais une commande |
invert |
Non | false |
true pour les actionneurs où 0 % signifie fermé |
offIcon |
Non | l’icône | L’icône affichée en position ouverte |
onColor, offColor |
Non | celle du thème | La couleur de l’icône en position fermée et ouverte |
0 % signifie ouvert et 100 % fermé. Seuls les objets d’envoi de la commande choisie peuvent être indiqués ; les objets des lamelles nécessitent slatAdjustment.
{ "type": "blind", "name": "Terrace blind", "move": "2/1/1", "stop": "2/1/2", "positionStatus": "2/1/3" }
Scène
Rappelle une scène. En mode toggle, alterne entre deux scènes ; en mode threshold, en choisit une selon une valeur, par exemple la scène A à partir de 20 lux.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
command |
Oui | (aucun) | Commande, DPT 18.001 |
mode |
Non | single |
single, toggle ou threshold |
scene |
Non | 0 |
Scène A, telle qu’envoyée : 0–63. La scène KNX 1 vaut 0, la scène 64 vaut 63 |
sceneB |
Avec toggle et threshold |
(aucun) | Scène B, 0–63 |
commandB |
Non | command |
Envoyer la scène B à sa propre adresse, DPT 18.001 |
nameA, nameB |
Non | (aucun) | Les noms des deux scènes, uniquement avec toggle |
iconB |
Non | l’icône | L’icône de la scène B |
activation |
Non | tap |
tap, ou hold pour rappeler la scène seulement après un appui maintenu |
holdMilliseconds |
Non | 500 |
Durée de l’appui maintenu : 200, 300, 400, 500, 1000, 2000 ou 3000 |
saveOnLongPress |
Non | false |
true : un appui long enregistre l’état actuel comme scène |
value |
Avec threshold |
(aucun) | État servant au choix de la scène. Son DPT doit correspondre à valueType ; s’il est omis, le DPT du type est utilisé |
valueType |
Non | f16 |
Décodage de value, comme pour Affichage de valeur, sauf hex |
threshold |
Non | 0 |
Scène A à partir de cette valeur, scène B en dessous |
defaultScene |
Non | a |
a ou b : la scène rappelée avant la réception d’une valeur |
flagAbove, flagBelow |
Non | (aucun) | Icônes indiquant le côté actif |
color |
Non | celle du thème | La couleur de l’icône |
{ "type": "scene", "name": "Cinema", "icon": "relax", "mode": "toggle", "command": "4/2/1", "scene": 4, "sceneB": 5, "nameA": "Movie", "nameB": "Lights up" }
Scènes
Un ensemble de boutons de scène sur une adresse.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
command |
Oui | (aucun) | Commande, DPT 18.001 |
scenes |
Oui | (aucun) | 1 à 9 boutons : {"name": "Relax", "scene": 0, "icon": "relax"}. scene est le numéro envoyé, 0–63, chacun une seule fois |
color |
Non | celle du thème | La couleur des icônes |
{
"type": "scenes",
"name": "Moods",
"command": "4/1/1",
"scenes": [{ "name": "Relax", "scene": 0, "icon": "relax" }, { "name": "Dinner", "scene": 1, "icon": "dinner" }]
}
Blanc réglable
Un éclairage avec luminosité et température de couleur, selon l’une de trois dispositions d’objets.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
objects |
Non | brightnessTemperature |
brightnessTemperature, combined (un objet DPT 249.600) ou warmCold (deux niveaux) |
switch, switchStatus |
Non | (aucun) | Marche/arrêt, DPT 1.001 |
brightness, brightnessStatus |
brightnessTemperature avec slider |
(aucun) | Luminosité, DPT 5.001 |
dimming |
brightnessTemperature avec stepper |
(aucun) | Variation relative, DPT 3.007 |
temperature, temperatureStatus |
brightnessTemperature |
(aucun) | Température de couleur : DPT 7.600 (Kelvin) ou 5.001 (pourcentage de la plage), selon temperatureAs |
temperatureAs |
Non | kelvin |
kelvin ou percent |
combined, combinedStatus |
combined |
(aucun) | Luminosité et température combinées, DPT 249.600 |
warm, warmStatus, cold, coldStatus |
warmCold |
(aucun) | Les deux niveaux de blanc, DPT 5.001 |
warmestK, coolestK |
Non | 2700, 6500 |
La plage de température, 1000–20000 K. Pas avec warmCold |
control, stepCode, repeatMs |
Non | Comme pour Variateur | |
offIcon, onColor, offColor |
Non | Comme pour Interrupteur |
Les objets d’envoi requis et leurs états éventuels dépendent de objects ; les objets d’une autre disposition sont une erreur.
{ "type": "tunableWhite", "name": "Reading light", "switch": "1/2/1", "brightness": "1/2/2", "temperature": "1/2/3", "temperatureStatus": "1/2/4" }
Éclairage couleur
Un éclairage RGB, RGBW ou RGB + blanc réglable.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
light |
Non | rgb |
rgb, rgbw ou rgbTunableWhite |
control |
Non | la première disposition de l’éclairage | Envoi de la couleur : oneObject, rgbAndWhite ou separate, selon le tableau ci-dessous |
white |
Non | temperature |
rgbTunableWhite avec rgbAndWhite : temperature ou warmCold |
switch, switchStatus |
Non | (aucun) | Marche/arrêt, DPT 1.001 |
brightness, brightnessStatus |
Non | (aucun) | La luminosité globale de l’éclairage, DPT 5.001 |
onFrom |
Non | switchStatus |
Ce qui indique que l’éclairage est allumé : switchStatus ou switchOrLevels |
temperatureAs, warmestK, coolestK |
Non | Avec un objet de température, comme pour Blanc réglable | |
offIcon, onColor, offColor |
Non | Comme pour Interrupteur |
light |
control |
Objets d’envoi |
|---|---|---|
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, puis temperature, ou warm et cold (selon white) |
rgbTunableWhite |
separate |
red, green, blue, warm, cold |
Chaque objet d’envoi possède un état du même nom suivi de Status (rgbStatus, redStatus, … ; celui du niveau de blanc est whiteStatus). Les états de couleur sont tous indiqués ou tous omis.
{ "type": "colorLight", "name": "Accent strip", "light": "rgb", "switch": "1/3/1", "rgb": "1/3/2", "rgbStatus": "1/3/3" }
Thermostat
Affiche la consigne ou la température ambiante et modifie la consigne.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
shows |
Non | setpoint |
La valeur affichée en grand : setpoint ou roomTemperature |
unit |
Non | celsius |
celsius (DPT 9.001) ou fahrenheit (9.027). Les valeurs ne sont jamais converties |
control |
Non | absolute |
absolute (envoie une température) ou increaseDecrease (envoie des pas sur 1 bit) |
setpoint |
Avec absolute |
(aucun) | Commande de consigne, avec le DPT de unit |
increase, decrease |
Avec increaseDecrease |
(aucun) | Envoyer des pas, DPT 1. L’adresse peut être identique |
increaseValue, decreaseValue |
Non | true, false |
Le bit envoyé par increase et decrease |
setpointStatus |
Avec increaseDecrease si la consigne est affichée |
(aucun) | État de consigne |
roomTemperature |
Si affiché | (aucun) | État de température ambiante |
step |
Non | 0.5 |
Avec absolute : 0.1, 0.2, 0.5 ou 1 |
min, max |
Non | 7–35 °C, 45–95 °F | Les limites de la consigne |
color |
Non | celle du thème | La couleur de l’icône |
{ "type": "thermostat", "name": "Living room", "setpoint": "3/1/1", "setpointStatus": "3/1/2", "roomTemperature": "3/1/3" }
Ventilo-convecteur
Les vitesses d’un ventilo-convecteur, avec marche/arrêt, auto/manuel, chaud/froid, modes HVAC et thermostat en option. Les réglages déterminent les objets du widget ; tous ses objets d’envoi sont obligatoires, les états sont facultatifs.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
fanSpeed, fanSpeedStatus |
fanSpeed |
(aucun) | La vitesse du ventilateur : DPT 5.001 pour percent, sinon 5.010 |
stages |
Non | 3 |
Vitesses du ventilateur, 1–5 |
controlAs |
Non | percent |
Envoi d’une vitesse : percent (pourcentage), value (octet) ou stageNumber (1, 2, 3 …) |
statusAs |
Non | controlAs |
Lecture de l’état, comme controlAs |
percentStages, valueStages |
Non | réparties uniformément | La valeur de chaque vitesse, par exemple [33, 67, 100] ou [85, 170, 255] |
speedZero |
Non | nothing |
Signification de la vitesse 0 : nothing, auto ou manual |
onOff |
Non | false |
true ajoute switchCommand et switchStatus (DPT 1.001) |
autoManualObjects |
Non | (désactivé) | one : autoManual (+ autoManualStatus). two : auto et manual (+ états). DPT 1 |
autoManualInvert |
Non | false |
Avec one : true si 1 signifie manuel |
heatCoolObjects |
Non | (désactivé) | one : heatCool (+ heatCoolStatus), DPT 1.100. two : heat et cool (+ états), DPT 1 |
heatCoolInvert |
Non | false |
Avec one : true si 1 signifie froid |
hvacObjects |
Non | (désactivé) | byte : hvacMode (+ hvacModeStatus), DPT 20.102. bits : un objet par mode proposé, hvacAuto, hvacComfort, hvacStandby, hvacEconomy, hvacProtection (+ états), DPT 1 |
hvacModes |
Non | tous sauf auto |
Modes proposés : auto, comfort, standby, economy, buildingProtection |
thermostat |
Non | (désactivé) | Un objet avec les champs shows, unit, control, step, min, max, increaseValue et decreaseValue du Thermostat. Ajoute setpoint ou increase et decrease, ainsi que setpointStatus et roomTemperature |
offIcon, onColor, offColor |
Non | Comme pour Interrupteur |
{ "type": "fanCoil", "name": "Office fan coil", "fanSpeed": "7/1/1", "fanSpeedStatus": "7/1/2", "onOff": true, "switchCommand": "7/1/3", "switchStatus": "7/1/4" }
Climatiseur
Une unité split ou VRV via sa passerelle KNX. Son type est airConditioner.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
kind |
Non | split |
split ou vrv |
switchCommand, switchStatus |
Oui | (aucun) | Marche/arrêt, DPT 1.001 |
setpoint, setpointStatus |
setpoint |
(aucun) | Consigne, avec le DPT de unit |
roomTemperature |
Si affiché | (aucun) | État de température ambiante |
mode, modeStatus |
mode |
(aucun) | Mode de fonctionnement, DPT 20.105 |
fanSpeed, fanSpeedStatus |
fanSpeed |
(aucun) | Vitesse du ventilateur, DPT 5.010 |
shows, unit, step |
Non | setpoint, celsius, 1 |
Comme pour Thermostat |
min, max |
Non | 16–30 °C, 61–86 °F | Les limites de la consigne |
modes |
Non | tous pour split ; chaud, froid, ventilation, déshumidification pour vrv |
Modes proposés : auto, heat, cool, fan, dry |
modeValues |
Non | auto 0, chaud 1, froid 3, ventilation 9, déshumidification 14 | L’octet envoyé par chaque mode, par exemple {"dry": 4} |
fanStages |
Non | 3 |
Vitesses du ventilateur |
fanValues |
Non | [1, 2, 3] |
L’octet envoyé par chaque vitesse |
fanAutoValue |
Non | (aucun) | Si indiqué, le ventilateur propose Auto et envoie cet octet pour ce mode |
faultAs |
Non | (aucun) | Si indiqué, fault est obligatoire : bit (DPT 1.005), code (un octet, DPT 5.010) ou text (DPT 16.000) |
fault |
Avec faultAs |
(aucun) | État de défaut |
faultInvert |
Non | false |
Avec bit : true si 0 signifie un défaut |
faultCodes |
Non | [] |
Avec code : {"value": 3, "text": "Filter"}, textes affichés pour les codes connus |
offIcon, onColor, offColor |
Non | Comme pour Interrupteur |
{ "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" }
Connexion
Connexion du tableau de bord à l’ouverture. Si omise, elle est automatique : conserve une connexion existante de l’application, sinon utilise sa passerelle sélectionnée, sinon lance une recherche.
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
mode |
Oui | (aucun) | automatic, gateway ou multicast |
gateway |
Non | (aucun) | Avec gateway : la passerelle utilisée. Si omise, le tableau de bord ne peut pas démarrer tant qu’une passerelle n’a pas été choisie dans ses réglages |
secure |
Non | false |
Avec multicast : true pour KNX IP Secure Routing |
L’objet gateway :
| Champ | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
host |
Oui | (aucun) | Adresse IP ou nom d’hôte |
port |
Non | 3671 |
Port UDP ou TCP |
name |
Non | (aucun) | Un nom à afficher |
transport |
Non | udp |
udp, tcp ou auto (TCP d’abord, puis UDP) |
nat |
Non | false |
true pour une passerelle derrière NAT |
knxAddress |
Non | (aucun) | L’adresse physique de la passerelle, par exemple 1.1.250. Secure Tunneling l’utilise pour trouver ses identifiants |
secure |
Non | false |
true pour KNX IP Secure Tunneling |
serial, mac |
Non | (aucun) | Le numéro de série et l’adresse MAC découverts pour la passerelle |
{
"format": 1,
"name": "Office",
"connection": { "mode": "gateway", "gateway": { "name": "Office router", "host": "10.0.0.5", "transport": "tcp" } },
"home": { "name": "Home", "tiles": [] }
}
Les exports de l’option JSON non protégé ne contiennent ni clés ni identifiants. JSON non protégé et Avec les clés utilisent tous deux l’extension .json ; l’importation détecte la protection à partir du contenu.
JSON protégé par mot de passe
L’option Avec les clés chiffre l’ensemble du contenu. Le conteneur JSON peut être ouvert dans un éditeur de texte, mais la définition du tableau de bord et les clés doivent être déchiffrées pour être lues ou modifiées. Le mot de passe d’exportation est nécessaire à l’importation et n’est jamais enregistré.
| Champ du conteneur | Valeur ou rôle en version 1 |
|---|---|
format |
1 |
protected.version |
1 |
protected.cipher |
AES-256-GCM |
protected.kdf |
PBKDF2-HMAC-SHA256 |
protected.iterations |
600000 ; fixe dans cette version de protection |
protected.salt |
Base64 de 16 octets aléatoires |
protected.nonce |
Base64 du nonce de chiffrement de 12 octets |
protected.ciphertext |
Base64 du contenu chiffré |
protected.tag |
Base64 du tag d’authentification de 16 octets |
L’authentification lie aussi le contenu à SharKNX dashboard protected JSON v1. Un mot de passe incorrect ou un texte chiffré altéré ne peut pas produire un tableau de bord importé. Le fichier sélectionné est limité à 32 MiB ; le contenu déchiffré à 16 MiB.
Le contenu déchiffré contient dashboard (la définition décrite ici) et, seulement pour une source de clés propre, keys. Sans keys, le projet reste automatique : l’application destinataire fournit sa propre sécurité. Un paquet propre, même vide, devient Clés importées, enregistré chiffré avec ce tableau de bord sous une nouvelle identité locale. La référence au projet source et le mot de passe d’exportation ne sont jamais enregistrés dans l’application.
keys.groupKeys associe les numéros décimaux d’adresses de groupe KNX (0–65535, sous forme de chaînes) à des clés hexadécimales de 32 chiffres. Seules les adresses utilisées sont conservées. Le champ facultatif keys.credentials contient devices pour une passerelle sécurisée configurée, avec address, éventuellement deviceAuthCode, et interfaces (userId, individualAddress, password) ; le multicast sécurisé contient plutôt backboneKeyHex et backboneSecurityEnabled. Les Tool Keys, adresses et passerelles sans rapport, ainsi que les noms de projets sont exclus.
La connexion automatique et le projet automatique utilisent la configuration de l’application destinataire. Ils ne transportent jamais une copie de la connexion ou du projet de l’application exportatrice. Un tableau de bord à clés propres avec connexion automatique peut contenir ses clés de groupe utilisées, mais aucun identifiant de passerelle. Les réglages du projet affichent Clés importées jusqu’à l’enregistrement du mode automatique ou d’un autre projet ; choisir un projet permet aussi d’utiliser sa liste d’adresses et d’actualiser les clés. Les clés importées peuvent être réexportées.
L’importation se trouve sous + → Ajouter → Importer un tableau de bord. Après réussite, vous restez sur les tableaux de bord ; si le nom existe, vous pouvez choisir Importer une copie ou Remplacer. Les erreurs apparaissent dans une fenêtre avec une section de code défilante et Copier les détails.
Exemple complet
La maison d’exemple : Home avec des liens vers deux espaces, un salon à deux pages et une cuisine, un widget de scènes Moods, deux favoris et une passerelle configurée.
{
"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" }
]
}
]
}
}
Validation
L’importation vérifie tout le fichier et indique chaque problème avec son emplacement, par exemple $.home.rooms[1].tiles[3].status.address. Un fichier contenant un problème n’est pas importé ; rien n’est enregistré.
| Problème | Exemple |
|---|---|
| Pas du JSON | Une virgule ou un guillemet manquant |
| Un champ obligatoire manque | Un widget sans name |
| Un champ contient une valeur du mauvais type | "size": 2 au lieu de "2x1" |
| Une valeur inconnue | "control": "slide" |
| Un type de widget inconnu de l’application | Un fichier provenant d’une version plus récente de SharKNX |
| Une adresse nécessaire manque à un widget | Un variateur avec control slider, mais sans brightness |
| Un widget ne respecte pas ses règles | Un DPT incompatible avec sa fonction, une taille non autorisée pour le type, un numéro de scène supérieur à 63 |
| Un lien ou un favori ne pointe vers aucun élément | "target": "r9" sans espace r9 |
| Un identifiant est utilisé deux fois | Deux widgets t4 |
| La forme complète et sa forme abrégée ensemble | tiles et panels dans un espace ; address et targets dans un objet d’envoi |
| Un format de fichier plus récent | "format": 2 |
Limites
| Élément | Limite |
|---|---|
| Noms (tableau de bord, espaces, widgets, états, boutons) | 50 caractères |
| Espaces d’un tableau de bord, Home inclus | 500 |
| Imbrication des espaces sous Home | 8 niveaux |
| Pages d’un espace | 10 |
| Widgets d’une page | 100 |
| Widgets d’un tableau de bord | 5000 |
| Nombres des identifiants | 0–999999 |
Versions
Chaque fichier exporté commence par "format": 1. Sans ce champ, il est lu au format actuel. Un fichier avec un numéro supérieur provient d’une version plus récente de SharKNX et n’est pas importé ; mettez l’application à jour.
Les fichiers restent importables lorsque SharKNX évolue : les nouveaux champs ont des valeurs par défaut, donc ils peuvent simplement manquer dans un ancien fichier. Un champ ne change jamais de sens sous le même nom. Dans une ancienne application, un fichier récent perd uniquement les champs inconnus de cette application.