Общая структура JSON¶
Конфигурационный JSON-файл описывает конфигурацию панели Skirell-Fluxa, которая состоит из нескольких страниц screens, каждая из которых содержит до шести блоков blocks. Каждый блок представляет собой элемент управления или отображения, соответствующий определенному устройству или функции (сцена, свет, климат, штора, датчик, музыка) block. Ниже представлено объяснение структуры и работы файла конфигурации.
Общая структура конфигурации¶
Конфигурационный JSON-файл организован как массив страниц screens, каждая из которых содержит номер страницы page и массив блоков blocks. Пример общей структуры:
{
"screens": [
{
"page": 1,
"blocks": []
},
{
"page": 2,
"blocks": []
}
]
}
- screens: Основной массив, содержащий все страницы панели.
- page: Уникальный номер страницы (целое число).
- blocks: Массив блоков, отображаемых на странице. Может содержать от 0 до 6 блоков.
Блоки¶
Блоки представляют собой элементы интерфейса, которые располагаются на странице в следующем порядке:
Расположение страницы до 4х блоков¶

- Блок 1: Слева сверху.
- Блок 2: Справа сверху.
- Блок 3: Слева снизу.
- Блок 4: Справа снизу.
"blocks": [
{
"block": 1,
"type": "тип блока",
"data": {}
},
{
"block": 2,
"type": "тип блока",
"data": {}
},
{
"block": 3,
"type": "тип блока",
"data": {}
},
{
"block": 4,
"type": "тип блока",
"data": {}
}
]
Расположение страницы до 6 блоков¶

- Блок 1: Слева сверху.
- Блок 2: Справа сверху.
- Блок 3: Слева посередине.
- Блок 4: Справа посередине.
- Блок 5: Слева снизу.
- Блок 6: Справа снизу.
"blocks": [
{
"block": 1,
"type": "тип блока",
"data": {}
},
{
"block": 2,
"type": "тип блока",
"data": {}
},
{
"block": 3,
"type": "тип блока",
"data": {}
},
{
"block": 4,
"type": "тип блока",
"data": {}
},
{
"block": 5,
"type": "тип блока",
"data": {}
},
{
"block": 6,
"type": "тип блока",
"data": {}
}
]
Особенности блоков¶
Если требуется меньше четырех блоков, ненужные блоки просто не указываются в массиве blocks. Пример для двух блоков:

"blocks": [
{
"block": 1,
"type": "тип блока",
"data": {}
},
{
"block": 2,
"type": "тип блока",
"data": {}
}
]
Пустая страница¶
Для пустой страницы массив blocks остается пустым:
"blocks": []
Содержание блоков¶
Каждый блок содержит:
- block: Номер блока (1–6).
- type: Тип блока (scene, light, climate, cover, sensor, music).
- data: Объект с параметрами, который содержит все настройки блока(Название, Иконка, MQTT-топик, MQTT-сообщение и т. д.).
Типы блоков и их подтипы¶
Блоки делятся на типы, некоторые из которых имеют подтипы variant_type. Если тип блока поддерживает подтипы, поле variant_type обязательно, а параметры подтипа указываются в объекте variant. Структура data:
"data": {
// Общие параметры
"variant_type": "подтип",
"variant": {
// Параметры подтипа
}
}
Внутри data указываются все параметры блока.
"data": {
// Общие параметры
}
Обычные блоки:
Некоторые блоки имеют подтипы. В этом случае data делится на две части: общие параметры блока (название, иконка и т. д.) и параметры подтипа — они указываются отдельно в объекте variant. Тип подтипа задаётся через variant_type.
Например, блок освещения имеет 4 подтипа (диммер, RGB и т. д.) — общие параметры одинаковы для всех, а в variant указывается то, что относится к конкретному подтипу.
"data": {
// Общие параметры
"variant_type": "название подтипа",
"variant": {
// Параметры подтипа
}
}
Обычные блоки:
Пример со всеми устройствами
{
"screens": [
{
"page": 1,
"blocks": [
{
"block": 1,
"type": "scene",
"data": {
"param_1": "Сцена",
"param_2": "Двор",
"param_3": "Вечер",
"icon": "\uDB81\uDD94",
"command_topic": "panel/scenes/1",
"payload": "1"
}
},
{
"block": 2,
"type": "scene",
"data": {
"param_1": "Сцена",
"param_2": "Гостиная",
"param_3": "Кино",
"icon": "\uDB81\uDC2E",
"command_topic": "panel/scenes/2",
"payload": "1"
}
},
{
"block": 3,
"type": "scene",
"data": {
"param_1": "Сцена",
"param_2": "Кухня",
"param_3": "Ужин",
"icon": "\uDB81\uDCA3",
"command_topic": "panel/scenes/3",
"payload": "1"
}
},
{
"block": 4,
"type": "scene",
"data": {
"param_1": "Сцена",
"param_2": "Дом",
"param_3": "Выкл все",
"icon": "\uDB82\uDD06",
"command_topic": "panel/scenes/4",
"payload": "1"
}
}
]
},
{
"page": 2,
"blocks": [
{
"block": 1,
"type": "switch",
"data": {
"param_1": "Климат",
"param_2": "Вентиляция",
"icon": "\uDB80\uDE10",
"color": "color_green",
"OnOff_command_topic": "panel/switch/1/OnOff_command",
"OnOff_state_topic": "panel/switch/1/OnOff_state",
"payload_on": "1",
"payload_off": "0"
}
},
{
"block": 2,
"type": "switch",
"data": {
"param_1": "Свет",
"param_2": "Автоматизация",
"icon": "\uDB86\uDC01",
"color": "color_white",
"OnOff_command_topic": "panel/switch/2/OnOff_command",
"OnOff_state_topic": "panel/switch/2/OnOff_state",
"payload_on": "1",
"payload_off": "0"
}
},
{
"block": 3,
"type": "switch",
"data": {
"param_1": "Кровать",
"param_2": "Розетка",
"icon": "\uDB84\uDD07",
"color": "color_white",
"OnOff_command_topic": "panel/switch/3/OnOff_command",
"OnOff_state_topic": "panel/switch/3/OnOff_state",
"payload_on": "1",
"payload_off": "0"
}
},
{
"block": 4,
"type": "switch",
"data": {
"param_1": "Раб. зона",
"param_2": "Розетка",
"icon": "\uDB84\uDD07",
"color": "color_white",
"OnOff_command_topic": "panel/switch/4/OnOff_command",
"OnOff_state_topic": "panel/switch/4/OnOff_state",
"payload_on": "1",
"payload_off": "0"
}
}
]
},
{
"page": 3,
"blocks": [
{
"block": 1,
"type": "sensor",
"data": {
"param_1": "Температура",
"measure": "°C",
"min": 10,
"stage_1": 20,
"stage_2": 30,
"max": 40,
"color_1": "color_blue",
"color_2": "color_green",
"color_3": "color_red",
"state_topic": "panel/sensor/1/state"
}
},
{
"block": 2,
"type": "sensor",
"data": {
"param_1": "Влажность",
"measure": "%",
"min": 20,
"stage_1": 40,
"stage_2": 60,
"max": 80,
"color_1": "color_green",
"color_2": "color_yellow",
"color_3": "color_red",
"state_topic": "panel/sensor/2/state"
}
},
{
"block": 3,
"type": "sensor",
"data": {
"param_1": "Углекислый газ",
"measure": "ppm",
"min": 400,
"stage_1": 800,
"stage_2": 1200,
"max": 2000,
"color_1": "color_green",
"color_2": "color_yellow",
"color_3": "color_red",
"state_topic": "panel/sensor/3/state"
}
},
{
"block": 4,
"type": "sensor",
"data": {
"param_1": "Качество воздуха",
"measure": "ppb",
"min": 0,
"stage_1": 200,
"stage_2": 500,
"max": 1000,
"color_1": "color_green",
"color_2": "color_yellow",
"color_3": "color_red",
"state_topic": "panel/sensor/4/state"
}
}
]
},
{
"page": 4,
"blocks": [
{
"block": 1,
"type": "light",
"data": {
"param_1": "Фонари",
"param_2": "Двор",
"setting_name": "Фонари",
"icon": "\uDB84\uDC20",
"variant_type": "light_variant_OnOff",
"variant": {
"OnOff_command_topic": "panel/light/1/OnOff_command",
"OnOff_state_topic": "panel/light/1/OnOff_state",
"payload_on": "1",
"payload_off": "0"
}
}
},
{
"block": 2,
"type": "light",
"data": {
"param_1": "Торшеры",
"param_2": "Спальня",
"setting_name": "Торшеры",
"icon": "\uDB85\uDFD1",
"variant_type": "light_variant_dimmer",
"variant": {
"OnOff_command_topic": "panel/light/2/OnOff_command",
"OnOff_state_topic": "panel/light/2/OnOff_state",
"payload_on": "1",
"payload_off": "0",
"brightness_command_topic": "panel/light/2/brightness_command",
"brightness_state_topic": "panel/light/2/brightness_state",
"brightness_scale": 255
}
}
},
{
"block": 3,
"type": "light",
"data": {
"param_1": "Подсветка",
"param_2": "Раб. место",
"setting_name": "Подсветка",
"icon": "\uDB84\uDC51",
"variant_type": "light_variant_color",
"variant": {
"OnOff_command_topic": "panel/light/3/OnOff_command",
"OnOff_state_topic": "panel/light/3/OnOff_state",
"payload_on": "1",
"payload_off": "0",
"brightness_command_topic": "panel/light/3/brightness_command",
"brightness_state_topic": "panel/light/3/brightness_state",
"brightness_scale": 100,
"color_command_topic": "panel/light/3/color_command",
"color_type": "rgb"
}
}
},
{
"block": 4,
"type": "light",
"data": {
"param_1": "",
"param_2": "Свесы",
"setting_name": "Свесы",
"icon": "\uDB86\uDCDE",
"variant_type": "light_variant_temperature",
"variant": {
"OnOff_command_topic": "panel/light/4/OnOff_command",
"OnOff_state_topic": "panel/light/4/OnOff_state",
"payload_on": "1",
"payload_off": "0",
"brightness_command_topic": "panel/light/4/brightness_command",
"brightness_state_topic": "panel/light/4/brightness_state",
"brightness_scale": 100,
"temp_command_topic": "panel/light/4/temp_command",
"temp_state_topic": "panel/light/4/temp_state",
"max_temp": 100,
"min_temp": 0,
"temp_measure": "%"
}
}
}
]
},
{
"page": 5,
"blocks": [
{
"block": 1,
"type": "cover",
"data": {
"param_1": "Шторы",
"param_2": "Спальня",
"setting_name": "Шторы",
"icon_open": "\udb86\ude2d",
"icon_close": "\udb86\ude2e",
"variant_type": "cover_variant_slider",
"variant": {
"orientation": "Horizontal",
"open_command_topic": "panel/cover/1/open_command",
"close_command_topic": "panel/cover/1/close_command",
"stop_command_topic": "panel/cover/1/stop_command",
"payload_open": "1",
"payload_close": "0",
"payload_stop": "2",
"position_command_topic": "panel/cover/1/position_command",
"position_state_topic": "panel/cover/1/position_state",
"position_open": 100,
"position_close": 0,
"help_position_open": 95,
"help_position_close": 5,
"lameli": null
}
}
},
{
"block": 2,
"type": "cover",
"data": {
"param_1": "Жалюзи",
"param_2": "Гостиная",
"setting_name": "Жалюзи",
"icon_open": "\udb86\ude2b",
"icon_close": "\udb86\ude2c",
"variant_type": "cover_variant_slider",
"variant": {
"orientation": "Vertical",
"open_command_topic": "panel/cover/2/open_command",
"close_command_topic": "panel/cover/2/close_command",
"stop_command_topic": "panel/cover/2/stop_command",
"payload_open": "1",
"payload_close": "0",
"payload_stop": "2",
"position_command_topic": "panel/cover/2/position_command",
"position_state_topic": "panel/cover/2/position_state",
"position_open": 0,
"position_close": 100,
"help_position_open": 5,
"help_position_close": 95,
"lameli": null
}
}
},
{
"block": 3,
"type": "cover",
"data": {
"param_1": "Жалюзи",
"param_2": "Детская",
"setting_name": "Жалюзи",
"icon_open": "\udb86\ude6b",
"icon_close": "\udb86\ude6c",
"variant_type": "cover_variant_slider",
"variant": {
"orientation": "Vertical",
"open_command_topic": "panel/cover/3/open_command",
"close_command_topic": "panel/cover/3/close_command",
"stop_command_topic": "panel/cover/3/stop_command",
"payload_open": "1",
"payload_close": "0",
"payload_stop": "2",
"position_command_topic": "panel/cover/3/position_command",
"position_state_topic": "panel/cover/3/position_state",
"position_open": 100,
"position_close": 0,
"help_position_open": 95,
"help_position_close": 5,
"lameli": {
"open_command_topic": "panel/cover/3/lameli/open_command",
"close_command_topic": "panel/cover/3/lameli/close_command",
"stop_command_topic": "panel/cover/3/lameli/stop_command",
"payload_open": "1",
"payload_close": "0",
"payload_stop": "2"
}
}
}
},
{
"block": 4,
"type": "cover",
"data": {
"param_1": "Шторы",
"param_2": "Столовая",
"setting_name": "Шторы",
"icon_open": "\uDB86\uDC46",
"icon_close": "\uDB86\uDC47",
"variant_type": "cover_variant_slider",
"variant": {
"orientation": "Horizontal",
"open_command_topic": "panel/cover/4/open_command",
"close_command_topic": "panel/cover/4/close_command",
"stop_command_topic": "panel/cover/4/stop_command",
"payload_open": "1",
"payload_close": "0",
"payload_stop": "2",
"position_command_topic": "panel/cover/4/position_command",
"position_state_topic": "panel/cover/4/position_state",
"position_open": 0,
"position_close": 100,
"help_position_open": 5,
"help_position_close": 95,
"lameli": {
"open_command_topic": "panel/cover/4/lameli/open_command",
"close_command_topic": "panel/cover/4/lameli/close_command",
"stop_command_topic": "panel/cover/4/lameli/stop_command",
"payload_open": "1",
"payload_close": "0",
"payload_stop": "2"
}
}
}
}
]
},
{
"page": 6,
"blocks": [
{
"block": 1,
"type": "cover",
"data": {
"param_1": "Шторы",
"param_2": "Спальня",
"setting_name": "Шторы",
"icon_open": "\udb86\ude2d",
"icon_close": "\udb86\ude2e",
"variant_type": "cover_variant_buttons",
"variant": {
"orientation": "Horizontal",
"open_command_topic": "panel/cover/5/open_command",
"close_command_topic": "panel/cover/5/close_command",
"stop_command_topic": "panel/cover/5/stop_command",
"payload_open": "1",
"payload_close": "0",
"payload_stop": "2",
"lameli": null
}
}
},
{
"block": 2,
"type": "cover",
"data": {
"param_1": "Жалюзи",
"param_2": "Гостиная",
"setting_name": "Жалюзи",
"icon_open": "\udb86\ude2b",
"icon_close": "\udb86\ude2c",
"variant_type": "cover_variant_buttons",
"variant": {
"orientation": "Vertical",
"open_command_topic": "panel/cover/6/open_command",
"close_command_topic": "panel/cover/6/close_command",
"stop_command_topic": "panel/cover/6/stop_command",
"payload_open": "1",
"payload_close": "0",
"payload_stop": "2",
"lameli": null
}
}
},
{
"block": 3,
"type": "cover",
"data": {
"param_1": "Жалюзи",
"param_2": "Детская",
"setting_name": "Жалюзи",
"icon_open": "\udb86\ude6b",
"icon_close": "\udb86\ude6c",
"variant_type": "cover_variant_buttons",
"variant": {
"orientation": "Vertical",
"open_command_topic": "panel/cover/7/open_command",
"close_command_topic": "panel/cover/7/close_command",
"stop_command_topic": "panel/cover/7/stop_command",
"payload_open": "1",
"payload_close": "0",
"payload_stop": "2",
"lameli": {
"open_command_topic": "panel/cover/7/lameli/open_command",
"close_command_topic": "panel/cover/7/lameli/close_command",
"stop_command_topic": "panel/cover/7/lameli/stop_command",
"payload_open": "1",
"payload_close": "0",
"payload_stop": "2"
}
}
}
},
{
"block": 4,
"type": "cover",
"data": {
"param_1": "Шторы",
"param_2": "Столовая",
"setting_name": "Шторы",
"icon_open": "\uDB86\uDC46",
"icon_close": "\uDB86\uDC47",
"variant_type": "cover_variant_buttons",
"variant": {
"orientation": "Horizontal",
"open_command_topic": "panel/cover/8/open_command",
"close_command_topic": "panel/cover/8/close_command",
"stop_command_topic": "panel/cover/8/stop_command",
"payload_open": "1",
"payload_close": "0",
"payload_stop": "2",
"lameli": {
"open_command_topic": "panel/cover/8/lameli/open_command",
"close_command_topic": "panel/cover/8/lameli/close_command",
"stop_command_topic": "panel/cover/8/lameli/stop_command",
"payload_open": "1",
"payload_close": "0",
"payload_stop": "2"
}
}
}
}
]
},
{
"page": 7,
"blocks": [
{
"block": 1,
"type": "climate",
"data": {
"param_1": "Конд-ер",
"param_2": "Зал",
"setting_name": "Кондиционер",
"icon": "\uDB84\uDF52",
"measure": "°С",
"color": "color_red",
"variant_type": "climate_variant_cond",
"variant": {
"OnOff_command_topic": "panel/climate/1/OnOff_command",
"OnOff_state_topic": "panel/climate/1/OnOff_state",
"payload_on": "1",
"payload_off": "0",
"mode_command_topic": "panel/climate/1/mode_command",
"mode_state_topic": "panel/climate/1/mode_state",
"modes": {
"mode_1": {
"icon": "\uDB86\uDCF2",
"title": "Авто",
"color": "color_green",
"payload": "auto"
},
"mode_2": {
"icon": "\uDB80\uDE38",
"title": "Обогрев",
"color": "color_red",
"payload": "heat"
},
"mode_3": {
"icon": "\uDB81\uDF17",
"title": "Охлаждение",
"color": "color_blue",
"payload": "cool"
},
"mode_4": {
"icon": "\uDB81\uDD8E",
"title": "Осушение",
"color": "color_yellow",
"payload": "dry"
},
"mode_5": {
"icon": "\uDB80\uDE10",
"title": "Вентиляция",
"color": "color_cyan",
"payload": "fan"
}
},
"currentTemp_state_topic": "panel/climate/1/currentTemp_state",
"targetTemp_command_topic": "panel/climate/1/targetTemp_command",
"targetTemp_state_topic": "panel/climate/1/targetTemp_state",
"min_target": 15,
"max_target": 30,
"fan_command_topic": "panel/climate/1/fan_command",
"fan_state_topic": "panel/climate/1/fan_state",
"fan_modes": {
"mode_1": {
"icon": "\uDB85\uDF1D",
"payload": "0"
},
"mode_2": {
"icon": "\uDB85\uDC72",
"payload": "1"
},
"mode_3": {
"icon": "\uDB85\uDC73",
"payload": "2"
},
"mode_4": {
"icon": "\uDB85\uDC74",
"payload": "3"
}
}
}
}
},
{
"block": 2,
"type": "climate",
"data": {
"param_1": "Тепл. пол",
"param_2": "Детская",
"setting_name": "Тёплый пол",
"icon": "\uDB86\uDEAF",
"measure": "°С",
"color": "color_red",
"variant_type": "climate_variant_thermostat",
"variant": {
"OnOff_command_topic": "panel/climate/2/OnOff_command",
"OnOff_state_topic": "panel/climate/2/OnOff_state",
"payload_on": "1",
"payload_off": "0",
"targetTemp_command_topic": "panel/climate/2/targetTemp_command",
"targetTemp_state_topic": "panel/climate/2/targetTemp_state",
"min_target": 18,
"max_target": 30,
"sensors": {
"sensor_1": {
"icon": "\uDB83\uDF55",
"measure": "°С",
"state_topic": "panel/climate/2/sensor_1_state"
}
}
}
}
},
{
"block": 3,
"type": "climate",
"data": {
"param_1": "Вент-ия",
"param_2": "Ванная",
"setting_name": "Вентиляция",
"icon": "\uDB80\uDE10",
"measure": "%",
"color": "color_green",
"variant_type": "climate_variant_thermostat",
"variant": {
"OnOff_command_topic": "panel/climate/3/OnOff_command",
"OnOff_state_topic": "panel/climate/3/OnOff_state",
"payload_on": "1",
"payload_off": "0",
"targetTemp_command_topic": "panel/climate/3/targetTemp_command",
"targetTemp_state_topic": "panel/climate/3/targetTemp_state",
"min_target": 0,
"max_target": 100,
"sensors": {
"sensor_1": {
"icon": "\uDB81\uDFE4",
"measure": "ppm",
"state_topic": "panel/climate/3/sensor_1_state"
},
"sensor_2": {
"icon": "\uDB81\uDD8E",
"measure": "%",
"state_topic": "panel/climate/3/sensor_2_state"
},
"sensor_3": {
"icon": "\uDB80\uDF2A",
"measure": "ppb",
"state_topic": "panel/climate/3/sensor_3_state"
}
}
}
}
},
{
"block": 4,
"type": "climate",
"data": {
"param_1": "Увлаж-ль",
"param_2": "Прихожая",
"setting_name": "Увлажнитель",
"icon": "\uDB84\uDC99",
"measure": "%",
"color": "color_blue",
"variant_type": "climate_variant_thermostat",
"variant": {
"OnOff_command_topic": "panel/climate/4/OnOff_command",
"OnOff_state_topic": "panel/climate/4/OnOff_state",
"payload_on": "1",
"payload_off": "0",
"targetTemp_command_topic": "panel/climate/4/targetTemp_command",
"targetTemp_state_topic": "panel/climate/4/targetTemp_state",
"min_target": 15,
"max_target": 30,
"sensors": {
"sensor_1": {
"icon": "\uDB81\uDD8E",
"measure": "%",
"state_topic": "panel/climate/4/sensor_1_state"
}
}
}
}
}
]
},
{
"page": 1,
"blocks": [
{
"block": 1,
"type": "music",
"data": {
"param_1": "Спальня",
"param_2": "Аудио",
"param_3": "Колонка",
"setting_name": "Колонка Спальня",
"icon": "",
"mute_command_topic": "panel/music/2/mute_command",
"mute_state_topic": "panel/music/2/mute_state",
"payload_mute_on": "1",
"payload_mute_off": "0",
"artist_state_topic": "panel/music/2/artist",
"name_state_topic": "panel/music/2/track_name",
"prev_command_topic": "panel/music/2/prev_command",
"play_command_topic": "panel/music/2/play_command",
"pause_command_topic": "panel/music/2/pause_command",
"PlayPause_state_topic": "panel/music/2/PlayPause_state",
"next_command_topic": "panel/music/2/next_command",
"payload_prev": "previous",
"payload_play": "play",
"payload_pause": "pause",
"payload_next": "next",
"volume_command_topic": "panel/music/2/volume_command",
"volume_state_topic": "panel/music/2/volume_state",
"volume_step": 1,
"volume_min": 0,
"volume_max": 100,
"channels": {
"1": {
"icon": "\uDB82\uDD88",
"title": "Радио",
"command_topic": "panel/music/2/channel_command",
"state_topic": "panel/music/2/channel_state",
"payload": "radio"
},
"2": {
"icon": "\uDB86\uDE17",
"title": "Плейлист",
"command_topic": "panel/music/2/channel_command",
"state_topic": "panel/music/2/channel_state",
"payload": "playlist"
},
"3": {
"icon": "\uDB80\uDE10",
"title": "Подкасты",
"command_topic": "panel/music/2/channel_command",
"state_topic": "panel/music/2/channel_state",
"payload": "podcasts"
}
}
}
}
]
}
]
}