Конфигурация ioBroker в формате JSON: руководство для начинающих
В этом руководстве объясняется, как определить параметры конфигурации для вашего адаптера ioBroker с помощью JSON. Такой подход предлагает более удобный и гибкий способ управления настройками адаптера в административном интерфейсе ioBroker.
Что вам понадобится
- ioBroker Admin версии 6 (или новее)
- Базовое понимание синтаксиса JSON
Преимущества конфигурации JSON
- Улучшен пользовательский интерфейс при настройке адаптеров.
- Упрощенная интеграция сложных параметров конфигурации.
- Чёткое разделение между кодом адаптера и конфигурацией
Начиная
- Определите конфигурационный файл:
- Создайте файл с именем
jsonConfig.jsonилиjsonConfig.json5в административной директории вашего адаптера. JSON5 - это расширенная версия JSON, которая позволяет добавлять комментарии, делая файл конфигурации более читабельным.
- Включить конфигурацию JSON:
- В файл
io-package.jsonвашего адаптера добавьте следующую строку в разделcommon:
{
"common": {
"adminUI": {
"config": "json"
}
}
}
- Структура конфигурационного файла:
Конфигурационный файл определяет иерархическую структуру вкладок, панелей и элементов управления. Каждый элемент имеет определенные атрибуты, определяющие его поведение и внешний вид в административном интерфейсе.
jsonConfig автоматически гарантирует, что собранные данные будут записаны в качестве конфигурационных данных для адаптера и сохранены внутри него, чтобы их можно было извлечь и обработать в адаптере.
В следующем примере будет создан следующий объект конфигурации:
{
options1: {
myPort: 1234,
options: {
myType: 1,
},
myBool: false,
},
}
Если имя атрибута начинается с символа "", оно не будет сохранено в объекте.
Пример jsonConfig с несколькими вкладками
{
"type": "tabs",
"items": {
"options1": {
"type": "panel",
"label": "Tab1",
"icon": "base64 svg", // optional
"items": {
myPort: {
"type": "number",
"min": 1,
"max": 65565,
"label": "Number",
"sm": 6, // 1 - 12
"validator": "!!data.name", // else error
"hidden": "data.myType === 1", // hidden if myType is 1
"disabled": "data.myType === 2" // disabled if myType is 2
},
"options.myType": { // name could support more than one level
"newLine": true, // must start from new row
"type": "select",
"label": "Type",
"sm": 6, // 1 - 12
"options": [
{"label": "option 1", "value": 1},
{"label": "option 2", "value": 2}
]
},
"myBool": {
"type": "checkbox",
"label": "My checkbox",
},
"_notSaved":"abc"
}
},
"tab2": {
"label": "Tab2",
"type": "panel",
"disabled": "data.myType === 1",
"hidden": "data.myType === 2",
}
},
}
Дополнительные примеры можно найти во многих других адаптерах на GitHub в соответствующем каталоге администрирования.
Поддержка разработки инструментов
VS Code
Для включения проверки jsonConfig в VS Code необходимо добавить следующий раздел в файл ".vscode/settings.json".
"json.schemas": [
{
"fileMatch": ["admin/jsonConfig.json", "admin/jsonCustom.json", "admin/jsonTab.json"],
"url": "https://raw.githubusercontent.com/ioBroker/ioBroker.admin/master/packages/jsonConfig/schemas/jsonConfig.json"
}
]
Общие элементы управления
Объект jsonConfig состоит из нескольких элементов, имеющих иерархическую структуру. Каждый из элементов может быть одного из следующих типов. Некоторые элементы могут содержать дополнительные дочерние элементы.
Вы сможете увидеть практически все компоненты в действии, протестировав этот адаптер: jsonconfig-demo. Установить его можно через значок GitHub в админке, введя iobroker.jsonconfig-demo на вкладке npm.
accordion: Элемент аккордеона для сворачиваемого контента (Admin 6.6.0 или новее)alive: Отображает, запущен ли экземпляр (только для чтения)автозаполнение: Поле ввода с подсказками автозаполненияautocompleteSendTo: Элемент управления автозаполнения со значениями экземпляра для отправки данныхcertificate: Управляет сертификатами для защищенных соединенийcertificateCollection: Выбирает коллекцию сертификатов Let's Encryptcertificates: Универсальный тип для управления различными типами сертификатов (начиная с Admin 6.4.0)checkbox: Флажок для логических значенийcheckDocker: Специальный компонент для проверки доступности Docker, и если она есть, вы можете активировать флажок (из Admin 7.8.0)checkLicense: Специальный компонент для онлайн-проверки лицензии.chips: Пользователь может ввести слова, которые добавляются в массив.color: Выбор цветаcoordinates: Определяет текущее местоположение и используемые координаты изsystem.config, если это невозможно в форматеlatitude,longitude.credential: Выбирает учетные данные из центрального хранилища учетных данных (управляется в настройках администратора)cron: Настраивает выражения cron для планирования задачcustom: Интегрирует пользовательские компоненты для определенных функций (только для Admin 6)datePicker: Позволяет пользователям выбрать датуdeviceManager: показать диспетчер устройствdivider: Создает горизонтальный разделитель строкfile: Поле ввода с возможностью выбора файла и дополнительной возможностью загрузки/скачивания (только для Admin 6)fileSelector: Позволяет пользователям выбирать файлы из системы (только Admin6)func: Выбирает функцию из списка enum.func (только для Admin 6)header: Создает заголовок разных размеров (h1-h5)iframe: Отобразить iframe с указанным URL (admin >= 7.7.28)iframeSendTo: Отображение iframe с URL-адресом из административной панели (admin >= 7.7.28)image: Загружает или отображает изображениеimageSendTo: Отображает изображение, полученное с бэкэнда, и отправляет данные в соответствии с командой.instance: Выбирает экземпляр адаптераinterface: Выбирает интерфейс хоста, на котором работает экземпляр.ip: Поле ввода IP-адресов с расширенными параметрамиjsonEditor: JSON-редактор для сложных конфигурационных данныхlanguage: Выбирает язык пользовательского интерфейсаlicense: отображает информацию о лицензии, если она еще не принята.number: Числовое поле ввода с минимальными/максимальными значениями и шагом.oauth2: Настройте аутентификацию OAuth2 для адаптера (Admin 7.6.18 или новее)objectId: Выбирает идентификатор объекта с именем, цветом и значком.панель: Вкладка с элементамиpassword: Поле ввода пароляpattern: Поле только для чтения, отображающее шаблон (например, URL)порт: Специальный ввод для портовqrCode: Отображает данные в виде QR-кода (Admin 7.0.18 или новее)qrCodeSendTo: Отображает QR-код с данными, полученными из бэкэнда.room: Выбирает комнату из спискаenum.room(только для Admin 6)выбрать: Выпадающее меню с предопределенными параметрамиselectSendTo: Выпадающее меню со значениями экземпляра для отправки данныхsendTo: Кнопка, отправляющая запрос экземпляруsetState: Кнопка, устанавливающая состояние экземпляраslider: Ползунок для выбора значения в заданном диапазоне (только для Admin 6)state: Отображение элементов управления или информации из состояния (admin >= 7.1.0)staticImage: Отображает статическое изображениеstaticInfo: Отображает статическую информацию в предварительно отформатированном виде, например, "Заголовок: единица измерения значения" (admin >= 7.3.3)staticLink: Создает статическую ссылкуstaticText: Отображает статический текст (например, описание)table: Таблица со строками, которые можно добавлять, удалять или изменять порядок.tabs: Вкладки с элементамитекст: Поле ввода текста в одну или несколько строкtextSendTo: Отображает элемент управления только для чтения с заданными значениями из экземпляра.timePicker: Позволяет пользователям выбрать времяuser: Выбирает пользователя из спискаsystem.useruuid: Показать UUID iobrokeryamlEditor: Редактор YAML для сложных конфигурационных данных (admin >= 7.7.30)
Используя конфигурацию в формате JSON, вы можете создать удобный и адаптируемый интерфейс настройки для вашего адаптера ioBroker.
Примеры проектов
| Тип | Ссылка |
|---|---|
| Несколько вкладок: | ioBroker.admin |
| Пользовательский компонент: | [telegram или в pushbullet |
| Пользовательский компонент: | telegram или в pushbullet |
| Проверка: |
Разделение крупных конфигураций
Включает
Требуется admin версии 6.17.1 или новее.
Для создания сложных JSON-файлов можно включать другие JSON-файлы. Включаемый файл должен находиться в том же каталоге, что и основной файл.
{
tabs: {
tab1: {
type: "panel", // data will be combined with the content of "tab1.json". If the same attribute is defined in both files, the value from the included file will be used.
"#include": "tab1.json",
},
},
}
I18n - Интернационализация
Существует несколько вариантов предоставления переводов. Только первый из них совместим с нашим инструментом перевода Weblate, поэтому ему следует отдавать предпочтение!
Для включения функции перевода необходимо указать и активировать свойство i18n на верхнем уровне объекта конфигурации JSON.
{
i18n: true,
}
Перевод в отдельных файлах: совместимо с Weblate
По умолчанию файлы должны находиться в следующих каталогах:
admin/i18n/de/translations.json
admin/i18n/en/translations.json
или
admin/i18n/de.json
admin/i18n/en.json
Кроме того, пользователь может указать путь к файлам i18n, i18n: customI18n и указать файлы в административной панели:
"i18n": "customI18n",
admin/customI18n/de/translations.json
admin/customI18n/en/translations.json
или
admin/customI18n/de.json
admin/customI18n/en.json
Структура файла соответствует следующей структуре.
en.json:
{
i18nText1: "Open",
i18nText2: "Close",
"This is a Text": "This is a Text",
}
de.json:
{
i18nText1: "Öffnen",
i18nText2: "Schließen",
"This is a Text": "Dies ist ein Text",
}
При поиске перевода информация из соответствующего поля используется для поиска свойства с текстом в файлах. Если свойство не найдено, информация из поля остается неизменной. Рекомендуется вводить текст на английском языке.
Вводите перевод непосредственно в поля
Перевод можно указать во всех полях, которые могут содержать текст. Примеры таких полей: метка, заголовок, всплывающая подсказка, текст и т. д.
"type": "text",
"label: {
"en": "house",
"de": "Haus"
}
}
Обеспечьте перевод непосредственно в i18n
Переводы также могут быть предоставлены непосредственно в виде объекта в атрибуте i18n на верхнем уровне объекта jsonConfig.
При поиске перевода информация из соответствующего поля используется для поиска свойства с текстом в объекте i18n.
Если свойство не найдено, информация из поля остается неизменной. Рекомендуется вводить текст на английском языке.
Типы элементов
Каждый элемент может иметь общие атрибуты и специальные атрибуты, относящиеся к соответствующему типу, следующим образом.
tabs
Вкладки с элементами
| Объект недвижимости | Описание |
|---|---|
items | Объект с панелями {"tab1": {}, "tab2": {}...} |
tabsStyle | CSS-стили в формате React (marginLeft, а не margin-left) для компонента Mui-Tabs |
tabsStyle | CSS-стили в формате React (marginLeft, а не margin-left) для компонента Mui-Tabs |
panel
Вкладка с элементами
| Объект недвижимости | Описание |
|---|---|
icon | Вкладка может содержать иконку (в формате base64, например, data:image/svg+xml;base64,...) или изображения jpg/png (заканчиваются на .png) |
items | Объект {"attr1": {}, "attr2": {}}... |
collapsable | возможно только как не являющееся частью вкладокjsonConfig.json |
color | цвет сворачиваемого заголовка primary или secondary или ничего |
innerStyle | CSS-стили для внутреннего div в формате React (marginLeft, а не margin-left) для компонента Panel. Не используется для сворачиваемых панелей. |
innerStyle | CSS-стили для внутреннего div в формате React (marginLeft, а не margin-left) для компонента Panel. Не используется для сворачиваемых панелей. |
text
Текстовый компонент
| Объект недвижимости | Описание |
|---|---|
maxLength | максимальная длина текста в поле |
copyToClipboard | показывать кнопку "Копировать в буфер обмена", но только если она отключена или имеет значение "только для чтения" |
trim | По умолчанию - true. Установите для этого атрибута значение false, если обрезка не требуется. |
minRows | значение по умолчанию - 1. Установите для этого атрибута значение 2 или больше, если хотите, чтобы текстовое поле содержало более одной строки. |
maxRows | максимальное количество строк в текстовом поле. Используется только если minRows > 1. |
noClearButton | Если значение равно true, кнопка очистки отображаться не будет (admin >= 6.17.13) |
validateJson | Если значение равно true, текст будет проверен на соответствие формату JSON |
allowEmpty | Если значение истинно, проверка JSON будет производиться только в том случае, если значение не пустое |
time | значение - время в миллисекундах или строка. Используется только с флагом readOnly |
time | значение - время в миллисекундах или строка. Используется только с флагом readOnly |
number
| Объект недвижимости | Описание | Примечание |
|---|---|---|
min | минимальное значение | |
step | шаг | |
unit | unit | admin >= 7.4.9 |
unit | unit | admin >= 7.4.9 |
color
выбор цвета
| Объект недвижимости | Описание |
|---|---|
noClearButton | Если значение равно true, кнопка очистки отображаться не будет (admin >= 6.17.13) |
checkbox
показать флажок
slider
показать слайдер (только для Admin6)
| Объект недвижимости | Описание |
|---|---|
min | (по умолчанию 0) |
step | (по умолчанию (max - min) / 100) |
unit | Единица измерения ползунка |
единица | Единица ползунка |
qrCode
Отображение данных в QR-коде (admin >= 7.0.18)
| Объект недвижимости | Описание |
|---|---|
data | данные, которые должны быть закодированы в QR-коде |
fgColor | Цвет переднего плана |
bgColor | Цвет фона |
level | Уровень QR-кода (L M Q H) |
уровень | Уровень QR-кода (L M Q H) |
ip
адрес привязки
| Объект недвижимости | Описание |
|---|---|
listenOnAllPorts | добавить 0.0.0.0 к опции |
onlyIp6 | показывать только IP6-адреса |
noInternal | не отображать внутренние IP-адреса |
noInternal | не отображать внутренние IP-адреса |
user
Выбрать пользователя из system.user. (С указанием цвета и значка)
| Объект недвижимости | Описание |
|---|---|
short | no system.user. |
room
Выберите комнату из enum.room (с цветом и значком) - (только для Admin6)
| Объект недвижимости | Описание |
|---|---|
short | нет enum.rooms. |
allowDeactivate | разрешить освобождение комнаты |
func
Выберите функцию из enum.func (с цветом и значком) - (только для Admin6)
| Объект недвижимости | Описание |
|---|---|
short | нет enum.func. |
allowDeactivate | разрешить оставлять функциональность пустой |
select
| Объект недвижимости | Описание |
|---|---|
options | объект с метками, необязательными переводами, необязательной группировкой и значениями |
showAllValues | показывать элемент, даже если для него не найдена метка (несколько раз), по умолчанию = true |
format | Формат отображения: "dropdown" (по умолчанию) или "radio" для отображения вариантов в виде переключателей вместо выпадающего списка |
horizontal | Если true, переключатели отображаются горизонтально (применяется только когда format равно "radio") (начиная с версии 8.3.3) |
horizontal | Если true, переключатели отображаются горизонтально (применяется только тогда, когда format равно "radio") (начиная с версии 8.3.3) |
Каждый параметр в options может иметь:
| Объект недвижимости | Описание |
|---|---|
label | Метка параметра (может быть строкой или переводимым объектом) |
color | Цвет текста опции |
hidden | Формула или логическое значение для отображения или скрытия опции |
os | Отображать эту опцию только в следующих операционных системах хоста |
notOs | Не отображать эту опцию в этих операционных системах хоста |
docker | Отображать эту опцию только в том случае, если ioBroker запущен (true) или нет (false) в Docker |
description | Описание отображается ниже метки опции (можно перевести) |
icon | URL значка или строка base64 для отображения рядом с опцией (начиная с версии 8.3.3) |
icon | URL-адрес значка или строка base64 для отображения рядом с опцией (начиная с версии 8.3.3) |
Пример для select options
[
{"label": {"en": "option 1"}, "value": 1}, //...
]
или
[
{
"items": [
{"label": "Val1", "value": 1},
{"label": "Val2", "value": 2}
],
"name": "group1"
},
{
"items": [
{"label": "Val3", "value": 3},
{"label": "Val4", "value": 4}
],
"name": "group2"
},
{"label": "Val5", "value": 5}
]
autocomplete
| Объект недвижимости | Описание |
|---|---|
options | ["value1", "value2", ...] или [{"value": "value", "label": "Value1"}, "value2", ...] (ключи и имена (значения) должны быть уникальными) |
freeSolo | Установите freeSolo в значение true, чтобы текстовое поле могло содержать любое произвольное значение. |
image
сохраняет изображение как файл объекта adapter.X или в формате base64 в атрибуте
| Объект недвижимости | Описание |
|---|---|
filename | Имя файла - это имя структуры. В приведенном ниже примере login-bg.png - это имя файла для writeFile("myAdapter.INSTANCE", "login-bg.png") |
maxSize | максимальный размер загружаемого файла |
base64 | Если true, изображение будет сохранено как data-url в атрибуте, в противном случае - как бинарный файл в файловом хранилище |
crop | если true, разрешить пользователю обрезать изображение |
!maxWidth | |
!maxHeight | |
!square | ширина должна быть равна высоте, или обрезка должна допускать только квадратную форму |
!square | ширина должна быть равна высоте, или обрезка должна допускать только квадратную форму |
Пример для image
"login-bg.png": {
"type": "image",
"accept": "image/png",
"label": {
"en": "Upload image"
},
"crop": true
},
"picture": {
"type": "image",
"base64": true,
"accept": "image/*",
"label": {
"en": "Upload image"
},
"crop": true
}
}
oauth2
(admin >= 6.17.18)
Отображает кнопку аутентификации OAuth2 для получения токенов обновления и доступа для адаптера.
Для использования этой функции необходимо сначала предоставить данные OAuth2 (идентификатор клиента, секретный ключ и т. д.) команде технической поддержки ioBroker, чтобы они могли добавить их в облако.
| Объект недвижимости | Описание |
|---|---|
identifier | Идентификатор Oauth2, например spotify, google, dropbox, microsoft |
scope | Дополнительные области видимости, разделенные пробелом, например, user-read-private user-read-email |
refreshLabel | Дополнительная метка кнопки для обновления токена |
ownClientId | Необязательный атрибут, в котором будет храниться собственный идентификатор клиента OAuth пользователя. Если задано, отображается поле ввода для идентификатора клиента. |
ownClientSecret | Необязательный атрибут, в котором будет храниться собственный секретный ключ клиента OAuth пользователя. Если задано, отображается поле ввода для секретного ключа клиента. |
ownClientSecret | Необязательный атрибут, в котором будет храниться собственный секретный ключ клиента OAuth пользователя. Если задано, отображается поле ввода для ввода секретного ключа клиента. |
Пример для oauth2
"_oauth2": {
"type": "oauth2",
"identifier": "spotify",
"label": "Get Spotify OAuth2 Token",
"refreshLabel": "Refresh Spotify OAuth2 Token",
"icon": "data:image/svg+xml;base64,...",
}
См. также OAUTH2.md для получения дополнительной информации.
objectId
Идентификатор объекта: отобразить его с именем, цветом и значком.
| Объект недвижимости | Описание |
|---|---|
types | Желаемый тип: channel, device, ... (по умолчанию доступен только state). Он во множественном числе, поскольку type уже занят. |
customFilter | [необязательно] Не может использоваться вместе с настройками types. Это объект, а не строка JSON. |
filterFunc | [необязательно] Не может использоваться вместе с настройками types. Это функция, которая будет вызываться для каждого объекта и должна возвращать true или false. Пример: obj.common.type === 'number' |
fillOnSelect | [необязательно] Заполняет другие поля конфигурации при выборе идентификатора объекта. Формат: pathInObject1=>attr1,pathInObject2=>attr2(X). Добавьте (X), чтобы перезаписать непустые поля. Пример: common.name=>name,common.color=>color(X) заполняет поле name именем объекта и перезаписывает color цветом объекта. |
fillOnSelect | [необязательно] Заполняет другие поля конфигурации при выборе идентификатора объекта. Формат: pathInObject1=>attr1,pathInObject2=>attr2(X). Добавьте (X) для перезаписи непустых полей. Пример: common.name=>name,common.color=>color(X) заполняет поле name именем объекта и перезаписывает поле color цветом объекта. |
Примеры для customFilter
Показывать только объекты с некоторыми пользовательскими настройками
{common: {custom: true}}
Отображать только объекты с пользовательскими настройками SQL.0 (только для конкретного экземпляра)
{common: {custom: 'sql.0'}}
Отображать только объекты адаптеров influxdb или sql или history
{common: {custom: '_dataSources'}}
Отображать только объекты с пользовательскими настройками для конкретного адаптера (все экземпляры)
{common: {custom: 'adapterName.'}}
Показывать только каналы
{type: 'channel'}
Показывать только каналы и устройства
{type: ['channel', 'device']}
Показывать только состояния типа 'число'
{common: {type: 'number'}
Показывать только состояния типа 'число' и 'строка'
{common: {type: ['number', 'string']}
Показывать только штаты с ролями, начинающимися с switch
{common: {role: 'switch'}
Отображать только штаты с ролями, начинающимися с switch и button
{common: {role: ['switch', 'button']}
password
Этот тип поля влияет только на пользовательский интерфейс.
Пароли и другие конфиденциальные данные следует хранить в зашифрованном виде! Для этого ключ необходимо указать в файле io-package.json в разделе nativeEncrypted.
Кроме того, вы можете защитить это свойство от передачи другим адаптерам, кроме admin и cloud, добавив его в protectedNative в файле io-package.json.
| Объект недвижимости | Описание |
|---|---|
repeat | Повторный пароль необходимо сравнить с паролем |
readOnly | флаг только для чтения. Значение Visible автоматически устанавливается в true, если readOnly равно true |
maxLength | максимальная длина текста в поле |
maxLength | максимальная длина текста в поле |
instance
| Объект недвижимости | Описание |
|---|---|
adapter | имя адаптера. С помощью специального имени _dataSources можно получить все адаптеры с флагом common.getHistory. |
allowDeactivate | если true. Отображается дополнительная опция "деактивировать" |
onlyEnabled | если true. Будут отображаться только включенные экземпляры |
long | значение будет выглядеть как system.adapter.ADAPTER.0, а не как ADAPTER.0 |
short | значение будет выглядеть как 0, а не как ADAPTER.0 |
all | Добавить в параметры опцию "все" со значением * |
все | Добавить в параметры опцию "все" со значением * |
chips
Пользователь может ввести слово, и оно будет добавлено (см. облако => сервисы => Белый список). Если параметр delimiter не определен, на выходе получается массив.
| Объект недвижимости | Описание |
|---|---|
delimiter | Если параметр определен, он будет сохранен как строка с разделителем, а не как массив. Например, при использовании delimiter=; вы получите a;b;c вместо ['a', 'b', 'c'] |
alive
Это всего лишь индикатор того, активен ли экземпляр, и его можно использовать в состояниях "скрытый" и "отключенный" (он не будет сохранен в конфигурации).
Просто текст: Экземпляр запущен, Экземпляр не запущен
| Объект недвижимости | Описание |
|---|---|
instance | Проверяет, активен ли экземпляр. Если не определен, будет использоваться текущий экземпляр. В тексте можно использовать шаблон ${data.number}. |
textNotAlive | текст по умолчанию - Instance %s is not alive, где %s будет заменено на ADAPTER.0. Перевод должен существовать в файлах интернационализации |
textNotAlive | текст по умолчанию - Экземпляр %s неактивен, где %s будет заменен на ADAPTER.0. Перевод должен существовать в файлах интернационализации |
pattern
Поле только для чтения с шаблоном типа 'https://${data.ip}:${data.port}' (не будет сохранено в конфигурации). Текстовое поле ввода с флагом "только для чтения", отображающее шаблон.
| Объект недвижимости | Описание |
|---|---|
copyToClipboard | если true - показать кнопку |
узор | мой узор |
sendTo
Кнопка, отправляющая запрос текущему экземпляру (https://github.com/iobroker-community-adapters/ioBroker.email/blob/master/admin/index_m.html#L128)
| Объект недвижимости | Описание |
|---|---|
command | (По умолчанию send) |
data | объект - {"subject1": 1, "data": "static"}. Вы можете указать jsonData или data, но не оба одновременно. |
result | {result1: {en: 'A'}, result2: {en: 'B'}} |
error | {error1: {en: 'E'}, error2: {en: 'E2'}} |
variant | contained, outlined или ничего. Вариант кнопки. |
openUrl | Если true - открыть URL в новой вкладке, если ответ содержит атрибут openUrl, например {"openUrl": "http://1.2.3.4:80/aaa", "window": "_blank", "saveConfig": true}. Если saveConfig истинно, пользователю будет предложено сохранить конфигурацию. |
reloadBrowser | Если true - перезагрузить текущее окно браузера, если ответ содержит атрибут reloadBrowser, например {"reloadBrowser": true}. |
window | Если openUrl истинно, это имя нового окна. Может быть переопределено, если ответ содержит атрибут window. this.props.socket.sendTo(adapterName.instance, command || 'send', data, result => {}); |
icon | Если должна отображаться иконка: auth, send, web, warning, error, info, search. Вы можете использовать иконки base64 (например, data:image/svg+xml;base64,...) или изображения jpg/png (заканчиваются на .png). (Запросите через issue, если вам нужно больше иконок) |
useNative | Если адаптер возвращает результат с атрибутом native, он будет использован для конфигурации. Если saveConfig истинно, пользователю будет предложено сохранить конфигурацию. |
showProcess | Показывать индикатор выполнения запроса |
timeout | Время ожидания запроса в мс. По умолчанию: нет. |
onLoaded | выполнить логику нажатия кнопки один раз при первом запуске |
controlStyle | Стили для кнопки. |
instance | Экземпляр, которому следует отправить запрос (например, "admin.0"). Переопределяет oContext.instance. Если не определено, запрос отправляется текущему экземпляру адаптера. В тексте можно использовать шаблон ${data.number}. |
instance | Экземпляр, которому следует отправить запрос (например, "admin.0"). Переопределяет oContext.instance. Если не определено, запрос отправляется текущему экземпляру адаптера. В тексте можно использовать шаблон ${data.number}. |
setState
кнопка, которая устанавливает состояние экземпляра
| Объект недвижимости | Описание |
|---|---|
id | system.adapter.myAdapter.%INSTANCE%.test, вы можете использовать заполнитель %INSTANCE%, чтобы заменить его текущим именем экземпляра |
val | ${data.myText}\_test или число. Тип будет определен автоматически из типа состояния, и преобразование также будет выполнено. |
okText | Предупреждение, которое отобразится при нажатии кнопки |
variant | contained, outlined, '' |
вариант | содержащийся, очерченный, '' |
staticText
Статический текст, похожий на описание
| Объект недвижимости | Описание |
|---|---|
label | многоязычный текст |
format | text (по умолчанию), html, json (начиная с административной версии 7.8.4) |
href | ссылка. Ссылка может быть динамической, например, #tab-objects/customs/${data.parentId} |
target | _blank или _self или имя окна. Для относительных ссылок значение по умолчанию - _self, а для абсолютных - _blank |
close | Если значение равно true, графический интерфейс будет закрыт (используется не для JsonConfig в админке, а для динамического графического интерфейса, только если целевым значением является _self) |
button | отобразить ссылку в виде кнопки |
variant | тип кнопки (outlined, contained, text) |
color | цвет кнопки (например, primary) |
icon | если должен отображаться значок: auth, send, web, warning, error, info, search, book, help, upload. Вы можете использовать значки base64 (начинаются с data:image/svg+xml;base64,...) или изображения jpg/png (заканчиваются на .png). (Если вам нужно больше значков, отправьте запрос через раздел "Проблемы") |
controlStyle | CSS-стили в формате React для самой кнопки или элемента управления |
controlStyle | CSS-стили в формате React для кнопки или самого элемента управления |
Необходимо указать ровно один из пунктов label или text, но не оба одновременно.
staticLink
| Объект недвижимости | Описание |
|---|---|
label | многоязычный текст |
target | _blank или _self или имя окна. Для относительных ссылок значение по умолчанию - _self, а для абсолютных - _blank |
close | Если значение равно true, графический интерфейс будет закрыт (используется не для JsonConfig в админке, а для динамического графического интерфейса, только если целевым значением является _self) |
button | показать ссылку в виде кнопки |
variant | тип кнопки (outlined, contained, text) |
color | цвет кнопки (например, primary) |
icon | если должен отображаться значок: auth, send, web, warning, error, info, search, book, help, upload. Вы можете использовать значки base64 (начинаются с data:image/svg+xml;base64,...) или изображения jpg/png (заканчиваются на .png). (Если вам нужно больше значков, отправьте запрос через раздел "Проблемы") |
controlStyle | CSS-стили в формате React для самой кнопки или элемента управления |
format | text (по умолчанию), html, json |
format | text (по умолчанию), html, json |
staticImage
| Объект недвижимости | Описание |
|---|---|
href | необязательная HTTP-ссылка |
showInDialog | Если значение равно true, отображается небольшая миниатюра, и щелчок по ней открывает диалоговое окно с изображением в полном размере |
showInDialogButtonLabel | если showInDialog, необязательная метка для кнопки, которая также открывает диалоговое окно |
showInDialogSmallSize | если showInDialog, высота маленького эскиза в пикселях (по умолчанию 100) |
showInDialogSmallSize | если showInDialog, высота маленького миниатюрного изображения в пикселях (по умолчанию 100) |
table
Таблица с элементами, которые можно удалить, добавить, переместить вверх, переместить вниз.
| Объект недвижимости | Описание |
|---|---|
items | [{"type": see above, "width": px or %, "title": {"en": "header"}, "attr": "name", "filter": false, "sort": true, "default": ""}] |
objKeyName | (устаревшая настройка, не использовать!) - имя ключа в {"192.168.1.1": {delay: 1000, enabled: true}, "192.168.1.2": {delay: 2000, enabled: false}} |
objValueName | (устаревшая настройка, не использовать!) - имя значения в {"192.168.1.1": "value1", "192.168.1.2": "value2"} |
allowAddByFilter | если добавление разрешено, даже если установлен фильтр |
showSecondAddAt | Количество строк, с которых будет отображаться вторая кнопка добавления внизу таблицы. По умолчанию 5 |
showFirstAddOnTop | Отобразить первую кнопку «плюс» в верхней части первого столбца, а не слева. |
clone | [необязательно] - следует ли отображать кнопку клонирования. Если true, кнопка клонирования будет отображена. Если указано имя атрибута, это имя будет уникальным. |
export | [необязательно] - если должна отображаться кнопка экспорта. Экспорт в CSV-файл. |
import | [необязательно] - если должна отображаться кнопка импорта. Импорт из CSV-файла. |
uniqueColumns | [необязательно] - укажите массив столбцов, которые должны содержать уникальные записи |
encryptedAttributes | [необязательно] - укажите массив столбцов, которые должны быть зашифрованы |
useCardFor | [необязательно] - Точка останова, которая будет отображаться в виде карточек: ["xs", "sm", "md", "lg", "xl"] |
titleAttribute | [необязательно] - Задайте имя атрибута элемента, которое должно отображаться в качестве заголовка элемента в режиме карточек. |
compact | [необязательно] - если true, таблица будет отображаться в компактном режиме |
compact | [необязательно] - если true, таблица будет отображаться в компактном режиме |
accordion
Аккордеон с элементами, которые можно удалять, добавлять, перемещать вверх или вниз (Admin 6.6.0 и новее)
| Объект недвижимости | Описание |
|---|---|
items | [{"type": see above, "attr": "name", "default": ""}] элементы можно размещать так же, как на panel (xs, sm, md, lg и newLine) |
noDelete | логическое значение, если удаление или добавление отключены. Если noDelete равно false, то должны работать добавление, удаление и перемещение вверх/вниз. |
clone | [необязательно] - следует ли отображать кнопку клонирования. Если true, кнопка клонирования будет отображена. Если указано имя атрибута, это имя будет уникальным. |
клонировать | [необязательно] - следует ли отображать кнопку клонирования. Если true, кнопка клонирования будет отображена. Если указано имя атрибута, это имя будет уникальным. |
jsonEditor
Кнопка для открытия редактора JSON(5). JSON5 поддерживается начиная с версии административной панели 5.7.3.
| Объект недвижимости | Описание |
|---|---|
validateJson | если false, текст не будет проверен на соответствие формату JSON |
json5 | если разрешен формат JSON5 (начиная с версии 7.5.3) |
doNotApplyWithError | Не разрешать сохранение значения при возникновении ошибки в формате JSON или JSON5 (начиная с версии 7.5.3) |
readOnly | Открыть редактор в режиме только для чтения - редактор можно открыть, но содержимое изменить нельзя |
readOnly | Открыть редактор в режиме только для чтения - редактор можно открыть, но содержимое изменить нельзя |
Сам редактор не принадлежит этой библиотеке: хост передает его вместе со свойством AceEditor из JsonConfig / JsonConfigComponent. react-ace включает в себя весь ace-builds, и в противном случае он попал бы в каждый пакет, использующий эту библиотеку, включая пользовательские компоненты адаптеров, хотя редактор отображается только в трех из шестидесяти элементов управления. Без него поле возвращается к обычной текстовой области, которую по-прежнему можно читать и записывать.
yamlEditor
Кнопка для открытия редактора YAML с проверкой синтаксиса. (Начиная с административной версии 7.7.30)
| Объект недвижимости | Описание |
|---|---|
validateYaml | если false, текст не будет проверен как YAML |
doNotApplyWithError | Не разрешать сохранение значения при возникновении ошибки в YAML |
readOnly | Открыть редактор в режиме только для чтения - редактор можно открыть, но содержимое изменить нельзя |
readOnly | Открыть редактор в режиме только для чтения - редактор можно открыть, но содержимое изменить нельзя |
language
выберите язык
| Объект недвижимости | Описание |
|---|---|
system | разрешить использование системного языка из system.config по умолчанию (при выборе будет пустое строковое значение) |
certificate
| Объект недвижимости | Описание |
|---|---|
certType | один из: public, private, chained. Но начиная с версии 6.4.0 можно использовать тип certificates. |
certificates
Это универсальный тип, который управляет атрибутами certPublic, certPrivate, certChained и leCollection.
Пример:
{
"_certs": {
"type": "certificates",
"newLine": true,
"hidden": "!data.secure",
"sm": 12
}
}
certCollection
Выберите коллекцию сертификатов, используйте все коллекции или вообще не используйте Let's Encrypt.
| Объект недвижимости | Описание |
|---|---|
leCollectionName | название коллекции сертификатов |
credential
Выберите учетные данные из центрального хранилища учетных данных. Управление учетными данными осуществляется в настройках администратора (Настройки → Учетные данные), а в конфигурации адаптера в соответствующем атрибуте хранится только идентификатор выбранных учетных данных (например, system.credentials.anthropic).
Если параметр disableCreation не задан, рядом с селектором отображается кнопка ➕, которая открывает небольшое диалоговое окно «Добавить учетные данные» - аналогичное диалоговому окну администратора. Оно предлагает шаблоны (с иконками), отфильтрованные по параметру credentialType (например, Anthropic / ChatGPT / Google Gemini для ai, а также общие шаблоны «Логин и пароль» и «Ключ»).
Выбранный шаблон определяет форму, предлагаемое имя и иконку; секретные поля шифруются системным секретом при сохранении. Вновь созданные учетные данные сохраняются как system.credentials.<name> и выбираются немедленно.
| Объект недвижимости | Описание |
|---|---|
credentialType | отображать только учетные данные этого типа: email, cloud, ai или custom. Если не определено, отображаются все учетные данные. |
disableCreation | если true, скрыть кнопку ➕, чтобы пользователь мог выбрать только существующие учетные данные (создание учетных данных в этом месте невозможно) |
Пример:
{
"credentialId": {
"type": "credential",
"credentialType": "email",
"label": "E-Mail account",
"disableCreation": false,
"sm": 6
}
}
У каждого пользователя есть одна из двух форм: login (поля login и password) или key (одно поле key, например, ключ API). В адаптере чтение и расшифровка учетных данных осуществляется с помощью @iobroker/adapter-core:
import { Credentials } from '@iobroker/adapter-core';
const cred = await Credentials.getCredentials<Credentials.LoginPasswordCredentials>(this, this.config.credentialId);
// cred.values.login, cred.values.password (already decrypted)
// or for the key form: Credentials.KeyCredentials -> cred.values.key
custom
только Администратор6
| Объект недвижимости | Описание |
|---|---|
name | Название компонента, которое будет передаваться через свойства, например, ComponentInstancesEditor |
i18n | true, если файлы i18n/xx.json находятся в том же каталоге, что и компонент или объект перевода {"text1": {"en": Text1"}} |
bundlerType | Если модуль написан на TypeScript, установите значение module. Из Admin 7.5.x |
bundlerType | Если модуль написан на TypeScript, установите значение module. Из Admin 7.5.x |
Пример URL-адреса
custom/customComponents.js: в этом случае файлы будут загружены из/adapter/ADAPTER_NAME/custom/customComponents.jshttps://URL/myComponent: прямая ссылка из URL./adapter/ADAPTER_NAME/custom/customComponent.js: в этом случае файлы будут загружены из/adapter/ADAPTER_NAME/custom/customComponents.js
datePicker
Предоставить пользователю возможность выбрать поле ввода даты; формат пользовательского интерфейса задается в соответствии с заданными параметрами.
timePicker
Позволяет пользователю выбрать дату в поле ввода; возвращаемая строка представляет собой строку даты, пригодную для анализа, или имеет формат HH:mm:ss
| Объект недвижимости | Описание |
|---|---|
format | Формат, передаваемый в средство выбора даты, по умолчанию равен HH:mm:ss |
timeSteps | Представляет количество доступных временных шагов для каждого представления. По умолчанию - { hours: 1, minutes: 5, seconds: 5 } |
returnFormat | fullDate или HH:mm:ss. По умолчанию используется полная дата для обеспечения обратной совместимости. |
returnFormat | fullDate или HH:mm:ss. По умолчанию используется полный формат даты для обеспечения обратной совместимости. |
divider
горизонтальная линия
| Объект недвижимости | Описание |
|---|---|
height | необязательная высота: число в пикселях или любая длина CSS, например 1px |
color | необязательный цвет разделителя: любой цвет CSS, или primary, secondary |
header
| Объект недвижимости | Описание |
|---|---|
text | |
размер | 1-5 => h1-h5 |
cron
Отображает настройки CRON. У вас есть 3 варианта:
simple- отображает простые настройки CRONcomplex- отображает CRON с указанием "минут", "секунд" и так далее.- Нет вариантов «простой» или «сложный» - Пользователь может переключаться между простым и сложным режимами в диалоговом окне
| Объект недвижимости | Описание |
|---|---|
complex | show CRON with "minutes", "seconds" and so on |
простой | показать простые настройки CRON |
fileSelector
Выберите файл из одной папки в виде выпадающего меню. И при желании вы можете загрузить новый файл в эту папку.
только Администратор6
| Объект недвижимости | Описание |
|---|---|
pattern | Шаблон расширения файла. Допустимо: **/*.ext для отображения всех файлов из подпапок, *.ext для отображения файлов из корневой папки или folderName/*.ext для отображения всех файлов в подпапке folderName. По умолчанию **/*.*. |
objectID | Идентификатор объекта типа meta. Вы можете использовать специальный заполнитель %INSTANCE%: например, myAdapter.%INSTANCE%.files |
upload | путь, куда будут сохраняться загружаемые файлы. Например, folderName. Если не определено, поле для загрузки отображаться не будет. Для загрузки в корневой каталог установите для этого поля значение /. |
refresh | Показать кнопку обновления рядом с выбором. |
maxSize | максимальный размер файла (по умолчанию 2 МБ) |
withFolder | показывать имя папки, даже если все файлы находятся в одной папке |
delete | Разрешить удаление файлов |
noNone | Не показывать опцию none |
noSize | Не показывать размер файлов |
noSize | Не показывать размер файлов |
file
Поле ввода с селектором файлов. Оно будет отображаться как текстовое поле с кнопкой рядом для открытия диалогового окна. Только для Admin6.
| Объект недвижимости | Описание |
|---|---|
disableEdit | если пользователь может ввести имя файла вручную, а не только через диалоговое окно выбора |
filterFiles | like ['png', 'svg', 'bmp', 'jpg', 'jpeg', 'gif'] |
allowUpload | разрешена загрузка файлов |
allowDownload | разрешена загрузка файлов (по умолчанию true) |
allowCreateFolder | разрешено создание папок |
allowView | разрешенный вид плиток (по умолчанию true) |
showToolbar | показать панель инструментов (по умолчанию true) |
selectOnlyFolders | Пользователь может выбирать только папки (например, для пути загрузки) |
trim | удалить имя файла |
trim | удалить имя файла |
imageSendTo
отображает изображение, полученное с бэкэнда в виде строки base64.
| Объект недвижимости | Описание |
|---|---|
width | ширина QR-кода в пикселях |
command | команда sendTo |
jsonData | строка - {"subject1": "${data.subject}", "options1": {"host": "${data.host}"}}. Эти данные будут отправлены на бэкэнд |
data | объект - {"subject1": 1, "data": "static"}. Вы можете указать jsonData или data, но не оба одновременно. Эти данные будут отправлены на бэкэнд, если jsonData не определен. |
sendFirstByClick | при нажатии сначала отображается изображение. true - стандартный текст (нажмите, чтобы показать) или определенный текст |
instance | Экземпляр, которому следует отправить запрос (например, "admin.0"). Переопределяет oContext.instance. Если не определено, запрос отправляется текущему экземпляру адаптера. В тексте можно использовать шаблон ${data.number}. |
instance | Экземпляр, которому следует отправить запрос (например, "admin.0"). Переопределяет oContext.instance. Если не определено, запрос отправляется текущему экземпляру адаптера. В тексте можно использовать шаблон ${data.number}. |
Пример кода в бэкэнде для imageSendTo
adapter.on("message", (obj) => {
if (obj.command === "send") {
const QRCode = require("qrcode");
QRCode.toDataURL(
"3ca4234a-fd81-fdb8-5584-08c732f70e4d",
(err, url) =>
obj.callback && adapter.sendTo(obj.from, obj.command, url, obj.callback)
);
}
});
qrCodeSendTo
Отправляет команду экземпляру адаптера и отображает строку ответа в виде QR-кода. Бэкенд должен вернуть обычную строку (данные для кодирования).
| Объект недвижимости | Описание |
|---|---|
command | команда sendTo (по умолчанию: "send") |
jsonData | строка - {"subject1": "${data.subject}", "options1": {"host": "${data.host}"}}. Эти данные будут отправлены на бэкэнд |
data | объект - {"subject1": 1, "data": "static"}. Вы можете указать jsonData или data, но не оба одновременно. Эти данные будут отправлены на бэкэнд, если jsonData не определен. |
sendFirstByClick | Загрузка QR-кода только после клика. true - стандартный текст ("Нажмите, чтобы показать") или пользовательская строка/объект перевода, используемый в качестве метки кнопки |
size | размер QR-кода в пикселях |
fgColor | цвет переднего плана (по умолчанию: "#000000") |
bgColor | цвет фона (по умолчанию: "#ffffff") |
level | Уровень коррекции ошибок: L, M, Q или H (по умолчанию: L) |
instance | Экземпляр, которому следует отправить запрос (например, "admin.0"). Переопределяет oContext.instance. Если не определено, запрос отправляется текущему экземпляру адаптера. В тексте можно использовать шаблон ${data.number}. |
instance | Экземпляр, которому следует отправить запрос (например, "admin.0"). Переопределяет oContext.instance. Если не определено, запрос отправляется текущему экземпляру адаптера. В тексте можно использовать шаблон ${data.number}. |
Пример кода в бэкэнде для qrCodeSendTo
adapter.on("message", (obj) => {
if (obj.command === "send") {
// return the string to be encoded in the QR code
obj.callback && adapter.sendTo(obj.from, obj.command, "https://example.com/pair?token=abc123", obj.callback);
}
});
iframe
Отображает iframe с указанным URL-адресом. (из Admin 7.7.28)
| Объект недвижимости | Описание |
|---|---|
url | URL для отображения в iframe. Если определено, будет статическим элементом |
sandbox | Атрибуты песочницы для ограничений безопасности (например, "allow-same-origin allow-scripts") |
loading | Ленивая загрузка: lazy или eager (по умолчанию: lazy) |
frameBorder | Ширина границы рамки (по умолчанию: 0) |
reloadOnShow | Перезагрузить iframe, когда он станет видимым в области просмотра |
reloadOnShow | Перезагружать iframe, когда он становится видимым в области просмотра |
Пример для iframe
{
"type": "iframe",
"url": "https://example.com",
"allowFullscreen": true,
"sandbox": "allow-same-origin allow-scripts",
"loading": "lazy",
"reloadOnShow": false
}
iframeSendTo
Отображает iframe с URL-адресом, полученным из бэкэнда. (из Admin 7.7.28)
| Объект недвижимости | Описание |
|---|---|
command | команда sendTo |
data | объект - {"subject1": 1, "data": "static"}. Вы можете указать jsonData или data, но не оба одновременно. Эти данные будут отправлены на бэкэнд, если jsonData не определен. |
instance | Экземпляр, которому следует отправить запрос (например, "admin.0"). Переопределяет oContext.instance. Если не определено, запрос отправляется текущему экземпляру адаптера. В тексте можно использовать шаблон ${data.number}. |
instance | Экземпляр, которому следует отправить запрос (например, "admin.0"). Переопределяет oContext.instance. Если не определено, запрос отправляется текущему экземпляру адаптера. В тексте можно использовать шаблон ${data.number}. |
Бэкенд должен возвращать URL-адрес в виде строки.
Пример для iframeSendTo
{
"type": "iframeSendTo",
"command": "getUrl",
"jsonData": "{\"param\": \"${data.value}\"}",
"height": 600
}
Пример кода в бэкэнде для iframeSendTo
adapter.on("message", (obj) => {
if (obj.command === "getUrl") {
const url = "https://example.com?param=" + obj.message.param;
adapter.sendTo(obj.from, obj.command, url, obj.callback);
}
});
selectSendTo
Отображает выпадающее меню со значениями, заданными в экземпляре.
| Объект недвижимости | Описание |
|---|---|
command | команда sendTo |
data | объект - {"subject1": 1, "data": "static"}. Вы можете указать jsonData или data, но не оба одновременно. Эти данные будут отправлены на бэкэнд, если jsonData не определен. |
manual | Разрешить ручное редактирование. Без выпадающего меню (если экземпляр не в сети). По умолчанию true. |
multiple | Выбор из нескольких вариантов |
showAllValues | показывать элемент, даже если для него не найдена метка (несколько раз), по умолчанию = true |
noTranslation | не переводить метки выпадающих списков. Для использования этой опции ваш адаптер должен реализовывать обработчик сообщений. Результат команды должен представлять собой массив в форме [{"value": 1, "label": "one"}, ...] |
alsoDependsOn | при изменении каких атрибутов команду необходимо отправить повторно |
instance | Экземпляр, которому следует отправить запрос (например, "admin.0"). Переопределяет oContext.instance. Если не определено, запрос отправляется текущему экземпляру адаптера. В тексте можно использовать шаблон ${data.number}. |
instance | Экземпляр, которому следует отправить запрос (например, "admin.0"). Переопределяет oContext.instance. Если не определено, запрос отправляется текущему экземпляру адаптера. В тексте можно использовать шаблон ${data.number}. |
Обработчик на стороне бэкэнда может возвращать элементы с необязательным полем description: [{"value": 1, "label": "one", "description": "Some hint"}, ...]. Описание отображается под меткой в выпадающем списке.
Пример кода на бэкэнде для selectSendTo
adapter.on("message", (obj) => {
if (obj) {
switch (obj.command) {
case "command":
if (obj.callback) {
try {
const { SerialPort } = require("serialport");
if (SerialPort) {
// read all found serial ports
SerialPort.list()
.then((ports) => {
adapter.log.info(`List of port: ${JSON.stringify(ports)}`);
adapter.sendTo(
obj.from,
obj.command,
ports.map((item) => ({
label: item.path,
value: item.path,
})),
obj.callback
);
})
.catch((e) => {
adapter.sendTo(obj.from, obj.command, [], obj.callback);
adapter.log.error(e);
});
} else {
adapter.log.warn("Module serialport is not available");
adapter.sendTo(
obj.from,
obj.command,
[{ label: "Not available", value: "" }],
obj.callback
);
}
} catch (e) {
adapter.sendTo(
obj.from,
obj.command,
[{ label: "Not available", value: "" }],
obj.callback
);
}
}
break;
}
}
});
autocompleteSendTo
Отображает элемент управления автозаполнением, использующий значения, заданные в экземпляре.
| Объект недвижимости | Описание |
|---|---|
command | команда sendTo |
data | объект - {"subject1": 1, "data": "static"}. Вы можете указать jsonData или data, но не оба одновременно. Эти данные будут отправлены на бэкэнд, если jsonData не определен. |
freeSolo | Установите freeSolo в true, чтобы текстовое поле могло содержать любое произвольное значение. |
alsoDependsOn | при изменении каких атрибутов команду необходимо отправить повторно |
maxLength | максимальная длина текста в поле |
instance | Экземпляр, которому следует отправить запрос (например, "admin.0"). Переопределяет oContext.instance. Если не определено, запрос отправляется текущему экземпляру адаптера. В тексте можно использовать шаблон ${data.number}. |
instance | Экземпляр, которому следует отправить запрос (например, "admin.0"). Переопределяет oContext.instance. Если не определено, запрос отправляется текущему экземпляру адаптера. В тексте можно использовать шаблон ${data.number}. |
Для использования этой опции ваш адаптер должен реализовывать обработчик сообщений:
Результатом команды должен быть массив в формате ["value1", {"value": "value2", "label": "Value2"}, ...] (ключи и имена (значения) должны быть уникальными). Пример обработчика см. в selectSendTo
textSendTo
Отображает элемент управления только для чтения, заданный значениями из экземпляра.
| Объект недвижимости | Описание |
|---|---|
container | div, text, html |
alsoDependsOn | при изменении каких атрибутов команду необходимо отправить повторно |
command | команда sendTo |
jsonData | строка - {"subject1": "${data.subject}", "options1": {"host": "${data.host}"}}. Эти данные будут отправлены на серверную часть |
data | объект - {"subject1": 1, "data": "static"}. Вы можете указать jsonData или data, но не оба одновременно. Эти данные будут отправлены на бэкэнд, если jsonData не определен. |
instance | Экземпляр, которому следует отправить запрос (например, "admin.0"). Переопределяет oContext.instance. Если не определено, запрос отправляется текущему экземпляру адаптера. В тексте можно использовать шаблон ${data.number}. |
instance | Экземпляр, которому следует отправить запрос (например, "admin.0"). Переопределяет oContext.instance. Если не определено, запрос отправляется текущему экземпляру адаптера. В тексте можно использовать шаблон ${data.number}. |
Для использования этой опции ваш адаптер должен реализовывать обработчик сообщений: Результатом команды должна быть строка или объект со следующими параметрами:
{
text: "text to show", // mandatory
style: { color: "red" }, // optional
icon: "search", // optional. It could be base64 or link to an image in the same folder as jsonConfig.json file
// possible predefined names: edit, rename, delete, refresh, add, search, unpair, pair, identify, play, stop, pause, forward, backward, next, previous, lamp, backlight, dimmer, socket, settings, group, user, qrcode, connection, no-connection, visible
iconStyle: { width: 30 }, // optional
}
Пример для textSendTo
adapter.on("message", (obj) => {
if (obj) {
switch (obj.command) {
case "command":
obj.callback &&
adapter.sendTo(
obj.from,
obj.command,
"Received " + JSON.stringify(obj.message),
obj.callback
);
// or with style
obj.callback &&
adapter.sendTo(
obj.from,
obj.command,
{
text: "Received " + JSON.stringify(obj.message),
style: { color: "red" },
icon: "search",
iconStyle: { width: 30 },
},
obj.callback
);
// or as html
obj.callback &&
adapter.sendTo(
obj.from,
obj.command,
`<div style="color: green">${JSON.stringify(obj.message)}</div>`,
obj.callback
);
break;
}
}
});
coordinates
Определяет текущее местоположение и используемые координаты system.config, если это невозможно в форме latitude,longitude
| Объект недвижимости | Описание |
|---|---|
divider | Разделитель между широтой и долготой. По умолчанию "," (используется, если longitudeName и latitudeName не определены) |
longitudeName | Если определено, долгота будет храниться в этом атрибуте, разделитель будет игнорироваться |
latitudeName | Если задано, широта будет храниться в этом атрибуте, разделитель будет игнорироваться |
useSystemName | Если задано, отобразится флажок «Использовать системные настройки», а широта и долгота будут считаны из system.config, логическое значение будет сохранено под заданным именем |
useSystemName | Если задано, отобразится флажок «Использовать системные настройки», а широта и долгота будут считаны из system.config, логическое значение будет сохранено под заданным именем |
interface
Выберите интерфейс хоста, на котором запущен экземпляр.
| Объект недвижимости | Описание |
|---|---|
ignoreLoopback | не отображать интерфейс обратной связи (127.0.0.1) |
ignoreInternal | не отображать внутренние интерфейсы (обычно это также 127.0.0.1) |
Общие атрибуты элементов управления
Параметры макета xl,lg,md,sm,xs
Эти параметры используются для определения ширины элементов на экранах разных размеров, обеспечивая адаптивный и отзывчивый дизайн на различных устройствах.
Допустимые числа - от 1 до 12.
Если вы укажете число, например, 6, то ширина элемента составит 6/12 (50%) от ширины экрана, или, например, 3, то ширина элемента составит 3/12 (25%) от ширины экрана. Присвоение чисел различным параметрам компоновки позволяет задать ширину элемента для разных размеров экрана.
| опция | описание |
|---|---|
xl | экраны очень большого размера (1536 пикселей >= ширины) |
md | средние экраны (900px <= ширина < 1200px) |
sm | маленький экран (600px <= ширина < 900px) |
xs | крошечные экраны (ширина < 600 пикселей) |
xs | крошечные экраны (ширина < 600 пикселей) |
Ниже представлены рекомендуемые предустановки, подходящие для большинства случаев.
"xs": 12,
"sm": 12,
"md": 6,
"lg": 4,
"xl": 4,
Рекомендуется проверить схему расположения
Для каждого адаптера следует проверить соответствующую схему расположения элементов, чтобы убедиться, что она отображается и используется во всех разрешениях.
Это можно проверить, например, с помощью инструментов веб-разработчика, которые встроены в каждый браузер на основе Chromium.
Шаг 1: Откройте инструменты веб-разработчика, нажав клавишу F12.
Шаг 2: Откройте панель инструментов устройства (1)
Шаг 3: Выберите разные устройства (2)

В настройках инструментов веб-разработчика вы можете создавать собственные устройства с точно заданной шириной, если это необходимо.
Дополнительные опции
| опция | описание |
|---|---|
type | Если у элемента нет атрибута type, предполагается, что он имеет тип по умолчанию 'panel'. Тип элемента. Список доступных в настоящее время параметров см. в Общие элементы управления: |
label | Строка или объект типа {en: 'Имя', ru: 'Имя'} |
hidden | Функция JavaScript, которая могла бы использовать native.attribute для вычислений |
hideOnlyControl | Если место скрыто, оно будет показано, но без возможности управления |
os | Отображать этот элемент только в следующих операционных системах хоста, на котором работает экземпляр: "win32" или ["linux", "darwin"] |
notOs | Не отображать этот элемент в следующих операционных системах хоста, на котором работает экземпляр: "win32" или ["linux", "darwin"] |
docker | Отображать этот элемент только в том случае, если ioBroker работает (true) или не работает (false) в контейнере Docker |
disabled | Функция JavaScript, которая могла бы использовать native.attribute для вычислений |
dependsOnStates | ioBroker сообщает, от чего зависит этот элемент: {"running": ".info.browsing"}. См. Отображать или отключать элементы в зависимости от состояния ioBroker |
help | текст справки (многоязычный) |
helpLink | ссылка на справку (может использоваться только вместе с help) |
style | CSS-стиль в нотации ReactJS: radiusBorder, а не radius-border. |
darkStyle | CSS-стиль для темного режима |
validator | Функция JavaScript: true - нет ошибки, false - ошибка |
validatorErrorText | Текст, отображаемый в случае сбоя валидатора |
validatorNoSaveOnError | Отключить кнопку сохранения при возникновении ошибки |
tooltip | дополнительная всплывающая подсказка |
default | значение по умолчанию |
defaultFunc | Функция JavaScript для расчета значения по умолчанию |
placeholder | заполнитель (для текстового элемента управления) |
noTranslation | не переводить выпадающие списки или другие параметры (кроме справки, меток и заполнителей) |
onChange | Структура в форме {"alsoDependsOn": ["attr1", "attr2"], "calculateFunc": "data.attr1 + data.attr2", "ignoreOwnChanges": true} |
doNotSave | Не сохраняйте этот атрибут, так как он используется только для внутренних вычислений |
noMultiEdit | Если этот флаг установлен в значение true, это поле не будет отображаться, если пользователь выбрал для редактирования более одного объекта. |
expertMode | Если этот флаг установлен в значение true, это поле будет отображаться только в том случае, если включен экспертный режим (начиная с версии Admin 7.4.3) |
expertMode | Если этот флаг установлен в значение true, это поле будет отображаться только в том случае, если включен экспертный режим (начиная с версии Admin 7.4.3) |
Отображение элементов в зависимости от операционной системы
Каждый элемент (включая panel, tabs, столбцы таблицы и отдельные параметры select) может быть ограничен операционной системой хоста ioBroker, на котором работает настроенный экземпляр. Это не операционная система браузера.
{
"comPort": { "type": "text", "label": "COM port", "os": "win32" },
"ttyPort": { "type": "text", "label": "Serial device", "os": ["linux", "darwin"] },
"sudoHint": { "type": "staticText", "text": "The service must be started with sudo", "notOs": "win32" }
}
Допустимые значения соответствуют значениям из node.js process.platform (как в common.os или io-package.json): aix, android, cygwin, darwin, freebsd, haiku, linux, netbsd, openbsd, sunos, win32.
- Если указан параметр
os, элемент будет отображаться только в указанных операционных системах. - Если параметр
notOsзадан, элемент будет отображаться во всех операционных системах, кроме указанных. - Если операционная система хоста не может быть определена (например, объект хоста недоступен для чтения), элемент
будет показано. Лучше показать один элемент больше, чем скрыть необходимый.
- Неотображаемый элемент не удаляется: его значение остается неизменным в конфигурации, точно так же, как и у
hidden.
Однако значение default такого элемента не будет записано в конфигурацию.
Для более сложных условий переменные _os, _arch и _host могут использоваться в каждой функции JavaScript (hidden, disabled, validator, defaultFunc, onChange.calculateFunc, confirm.condition), а также в текстовых шаблонах label, help и так далее:
{
"type": "text",
"label": "Path to the executable file",
"disabled": "_os === 'win32'",
"defaultFunc": "_os === 'win32' ? 'C:\\\\Program Files\\\\app.exe' : '/usr/bin/app'",
"help": "Host ${_host.id} runs ${_os} on ${_arch}"
}
Отображать или отключать элементы в зависимости от состояния ioBroker
С помощью dependsOnStates элемент может реагировать на значения состояний ioBroker. На состояния подписывается пользователь, поэтому элемент обновляется немедленно при изменении состояния - перезагрузка диалога конфигурации не требуется.
{
"startBrowse": {
"type": "sendTo",
"command": "browse",
"label": "${_states.running?.val ? 'Stop browse' : 'Start browse'}",
"dependsOnStates": { "running": ".info.browsing" },
"disabled": "!!_states.running?.val"
}
}
- Параметр
dependsOnStatesзаписывается как{"<alias>": "<state ID>"}. Значения доступны во всех функциях JavaScript.
(hidden, disabled, validator, defaultFunc, onChange.calculateFunc, confirm.condition) и в текстовых шаблонах label, help, tooltip и так далее, например, _states.<alias>.
_states.<alias>содержит весь объект состояния, поэтому_states.running?.val,_states.running?.ts,
Можно использовать _states.running?.ack. Если состояние не существует, используется null, поэтому всегда используйте ?..
- Идентификатор состояния, начинающийся с точки, указывает на собственный экземпляр:
.info.browsing=>myAdapter.0.info.browsing.
Все остальные идентификаторы используются как есть, поэтому можно отслеживать и состояние других адаптеров.
- Идентификатор может содержать шаблоны
${data.xxx}, например,"device": "${data.deviceInstance}.info.connection".
Если конфигурация изменится, проблема будет решена заново. Использование символов подстановки (*) не допускается.
- Если изменяется одно из состояний, то
hidden,disabled,label,help,validatorиdefaultFuncэтого объекта.
Значение элемента будет пересчитано заново. Каждое состояние подписывается только один раз, независимо от того, сколько элементов (или строк таблицы) его используют.
- Краткая форма
"dependsOnStates": ["admin.0.info.connection"]использует сам идентификатор в качестве псевдонима:
_states['admin.0.info.connection'].
- Этот атрибут может использоваться для любого элемента, в том числе для
панели,вкладоки столбцов таблицы.
Примечание: старые версии административной панели не распознают _states и выдадут ошибку при выполнении такой функции, поэтому элемент останется видимым и активным.
Примечание: старые версии административной панели не распознают _os и будут интерпретировать "hidden": "_os !== 'linux'" как true, скрывая элемент повсюду. Поэтому следует отдавать предпочтение os/notOs, поскольку старые версии административной панели просто игнорируют их (элемент будет показан). Если необходимо использовать функцию JavaScript, напишите её с запасом: "hidden": "!!_os && _os !== 'linux'".
Docker
Если элемент зависит от того, работает ли сам ioBroker в контейнере Docker, можно использовать атрибут docker:
{
"service": { "type": "checkbox", "label": "Install as service", "docker": false },
"volumeHint": { "type": "staticText", "text": "The directory must be mapped as volume", "docker": true }
}
"docker": true- элемент будет отображаться только в том случае, если ioBroker работает в контейнере Docker."docker": false- элемент будет отображаться только в том случае, если ioBroker не работает в контейнере Docker.- Состояние Docker нельзя прочитать из объектов, его необходимо запросить у работающего хоста. Если хост
Если ответ не получен, состояние остаётся неизвестным, и элемент будет показан.
- Запрос будет отправлен только в том случае, если в конфигурации действительно используется
dockerили_host.docker, поэтому все остальные варианты не подойдут.
Настройки не приводят к увеличению трафика.
- В функциях JavaScript состояние доступно как
_host.docker(true,falseилиundefined, если значение неизвестно) и
версия официального образа Docker для ioBroker - _host.dockerVersion.
Не путайте это с элементом управления checkDocker: тот проверяет наличие установленного Docker на хосте для управления контейнерами, а не то, работает ли сам ioBroker в Docker.
Параметры с подробной конфигурацией
defaultSendTo
Команда для запроса начального значения у запущенного экземпляра, например: "myInstance": {"type": "text", "defaultSendTo": "fill"}
данные- статические данныеjsonData- статические данные- Если параметры
dataиjsonDataне определены, будет отправлена следующая информация:{"attr": "<имя атрибута>", "value": "<текущее значение>"} button- метка кнопки для повторного запуска запроса от экземпляраbuttonTooltip- Всплывающая подсказка для кнопки (по умолчанию:Запрос данных по экземпляру)buttonTooltipNoTranslation- Не переводить всплывающую подсказку кнопкиallowSaveWithError- Разрешить сохранение конфигурации, даже если экземпляр находится в автономном режиме.
confirm
condition- Функция JavaScript: true показать диалог подтверждениятекст- текст диалога подтвержденияtitle- заголовок диалога подтвержденияok- Текст для кнопки OKотмена- Текст для кнопки «Отмена»type- Один из следующих вариантов:info,warning,error,nonealsoDependsOn- массив с атрибутами, позволяющий проверять условие также по этим атрибутам.
Автозаполнение
Number, text, checkbox, select поддерживают автозаполнение, позволяющее выбирать варианты, если они используются в качестве пользовательских настроек.
В этом случае значение будет предоставлено в виде массива всех возможных значений.
Пример:
// ...
"timeout": {
"type": "number",
"label": "Timeout"
}
// ...
"data": {
"timeout": [1000, 2000, 3000]
}
В этом случае ввод должен быть текстовым, как показано в обозначении __different__, с возможностью автозаполнения, предлагающей три возможных значения.
Пользователи могут выбрать из выпадающего списка 1000, 2000 или 3000 или ввести собственное новое значение, например, 500.
Логическое значение должно поддерживать неопределенность, если значение равно [false, true].
Для неизмененного значения __different__ необходимо вернуть другое значение:
Вход:
"data": {
"timeout": [1000, 2000, 3000]
}
Если время ожидания не было изменено, выведите следующий результат:
"newData": {
"timeout": "__different__"
}
Значение __different__ зарезервировано, и ни один текстовый ввод не может принять его от пользователя.
Компонент должен выглядеть следующим образом
<SchemaEditor
style={customStyle}
className={classes.myClass}
schema={schema}
customInstancesEditor={CustomInstancesEditor}
data={common.native}
onError={(error, attribute) => {/* error can be true/false or text. Attribute is optional */}}
onChanged={(newData, isChanged) => console.log('Changed ' + isChanged)}
/>
Если схема не указана, она должна быть создана автоматически на основе данных.
логическое значение=> флажоктекст=> текстовый вводnumber=> number- имя
bind=> ip - имя
порт=> номер, мин=1, макс=0xFFFF - name
timeout=> number, help="ms"
Todo
Следующие главы взяты из оригинального файла SCHEMA.MD. Я не до конца понял содержание, и мне потребовалась помощь bluefox для его доработки.
Функции JavaScript
Диалог конфигурации
Функция JavaScript:
const myValidator = "_alive === true && data.options.myType == 2";
const func = new Function(
'data', // actual obj.native or obj.common.custom['adapter.X'] object
// If table, so data is current line in the table
'originalData', // data before changes
'_system', // system config => 'system.config'=>common
'_alive', // If instance is alive
'_common', // common part of instance = 'system.config.ADAPTER.X' => common
'_socket', // socket connection
'_instance', // instance number
'arrayIndex', // filled only by table and represents the row index
'globalData', // filled only by table and represents the obj.native or obj.common.custom['adapter.X'] object
'_changed', // indicator if some data was changed and must be saved
'_href', // Current browser href
'getObject', // You can call `await getObject(data.id)`in hidden, disabled, pattern functions
'_os', // Operating system of the host, where the instance runs: 'win32', 'linux', 'darwin', ...
'_arch', // Architecture of the host, where the instance runs: 'x64', 'arm64', ...
'_host', // Information about the host: {id, os, osType, arch, release, nodeVersion, controllerVersion, docker, dockerVersion}
'_states', // Values of the states from `dependsOnStates`: {<alias>: <state object or null>}
myValidator.includes('return') ? myValidator : 'return ' + myValidator); // e.g. "_alive === true"
const isValid = func(data, systemConfig.common, instanceAlive, adapter.common, this.props.socket);
Если статус alive изменится, все поля необходимо будет обновить, проверить, отключить или скрыть заново.
В настройках адаптера в функции JavaScript доступны следующие переменные:
data- собственные настройки для этого экземпляра или текущей строки в таблице (для доступа ко всем настройкам используйте globalData)_system- конфигурация системы_alive- означает, что экземпляр жив._common- общие настройки для этого экземпляра_socket- сокет_instance- номер экземпляраarrayIndex- используется только в таблицах и представляет текущую строку в массиве.globalData- используется только в таблице для всех настроек, а не только в одной строке таблицы._os- операционная система хоста, на котором работает экземпляр (process.platform), например,linux,win32,darwin. Пустая строка, если неизвестна._arch- архитектура хоста, на котором работает экземпляр, например,x64,arm64_host- информация о хосте:{id, os, osType, arch, release, nodeVersion, controllerVersion, docker, dockerVersion}.dockerимеет значениеundefined, если состояние Docker не запрашивалось или хост не ответил._states- значения состояний изdependsOnStates:{<alias>: <state object>}.null, если состояние не существует.
Диалог пользовательских настроек
Функция JavaScript:
const myValidator =
"customObj.common.type === 'boolean' && data.options.myType == 2";
const func = new Function(
"data",
"originalData",
"_system",
"instanceObj",
"customObj",
"_socket",
arrayIndex,
"_os",
"_arch",
"_host",
"_states",
myValidator.includes("return") ? myValidator : "return " + myValidator
); // e.g. "_alive === true"
const isValid = func(
data || this.props.data,
this.props.originalData,
this.props.systemConfig,
instanceObj,
customObj,
this.props.socket
);
В пользовательских настройках в функции JavaScript доступны следующие переменные:
data- текущие пользовательские настройки или текущая строка в таблице (для доступа ко всем настройкам используйте globalData)originalData- Неизмененные данные_system- конфигурация системыinstanceObj- объект экземпляра адаптераcustomObj- сам текущий объект_socket- сокетarrayIndex- используется только в таблицах и представляет текущую строку в массиве.globalData- используется только в таблице для всех настроек, а не только в одной строке таблицы._os- операционная система хоста, на котором работает экземпляр (process.platform), например,linux,win32,darwin. Пустая строка, если неизвестна._arch- архитектура хоста, на котором работает экземпляр, например,x64,arm64_host- информация о хосте:{id, os, osType, arch, release, nodeVersion, controllerVersion, docker, dockerVersion}.dockerимеет значениеundefined, если состояние Docker не запрашивалось или хост не ответил._states- значения состояний изdependsOnStates:{<alias>: <state object>}.null, если состояние не существует.
{
"general": {
// ....
"customSettingsValidator": "customObj.common.type === 'boolean' && data.options.myType == 2",
// ....
}
}
Вы можете ограничить применение пользовательских настроек только определенными состояниями, определив statesFilter в корневом элементе (panel или tabs) пользовательских настроек:
jsonCustom.json:
{
"i18n": true,
"type": "panel",
"statesFilter": true, // or "^hm-rpc\\.\\d\\..*\\.STATE$" - apply on "hm-rpc.X.*.STATE" states only
"items": {
// ...
}
}
Пользовательский компонент
<CustomInstancesEditor
common={common.data}
alive={isInstanceAlive}
data={data}
socket={this.props.socket}
themeName={this.props.themeName}
themeType={this.props.themeType}
theme={this.props.theme}
name="accessAllowedConfigs"
onChange={(newData, isChanged) => {}}
onError={error => /* error can be true/false or text */ {}}
/>
Примеры можно найти в адаптере [telegram или в pushbullet.
Вкладка JSON в админке
Начиная с административной версии 7.6.x, вы можете определить вкладку (например, backitup или matter) с помощью конфигурации JSON.
Для этого необходимо определить следующее в разделе io-package.json в части common:
{
"common": {
// ....
"adminTab": {
"link": "jsonTab.json", // the name could be any, but only ends with `.json` or `.json5`
// all following parameters are optional
"icon": "AABBCC", // base64 icon. If not provided, the adapter icon will be taken
"name": "TabName", // String or multi-language object for menu label
"singleton": true, // Tab will not have an instance number, and for all instances will exist only one menu item.
"order": 10, // Order in the admin tab (0 is disabled, 1 - first after static menu items, 200 is last)
},
// ....
}
}
Файл jsonTab.json5 может выглядеть следующим образом:
{
"i18n": "tabI18n", // folder name in admin, where the translations are stored (relative to "admin" folder)
"command": "tab", // If defined, the tab will send a message by initializing to backend with command "tab" (string contained in "sendTo")
"items": {
"memHeapTotal": {
// This will show "system.adapter.admin.0.memHeapTotal" value
"type": "state",
"label": "Memory",
"sm": 12,
"system": true,
"oid": "memHeapTotal"
},
"infoConnected": {
// This will show "admin.0.info.connected" value
"newLine": true,
"type": "state",
"label": "Info about connected socket clients",
"sm": 12,
"oid": "info.connected"
},
"dayTime": {
// This will show "javascript.0.variables.dayTime" value
"newLine": true,
"type": "state",
"label": "Aktuelle Zeit",
"sm": 12,
"foreign": true,
"oid": "javascript.0.variables.dayTime"
},
"value": {
// This will show "data.value" value from "sendTo" answer
"newLine": true,
"type": "text",
"readOnly": "true",
"label": "Value from sendTo answer",
"sm": 12,
}
}
}
Если указан параметр sendTo, экземпляр получит сообщение (common.messagebox должен быть истинным в io-package.json) с командой tab или со значением, хранящимся в sendTo, если это строка.
Экземпляр должен ответить структурой следующего вида:
onMessage = (obj: ioBroker.Message): void => {
if (obj?.command === 'tab' && obj.callback) {
// if not instance message
this.sendTo(obj.from, obj.command, { data: { value: 5 } }, obj.callback);
}
};
Сообщить об ошибке схемы
Создайте заявку здесь: https://github.com/ioBroker/ioBroker.admin/issues
Для сопровождающего
Чтобы обновить расположение схемы JsonConfig, создайте запрос на слияние в этот файл: https://github.com/ioBroker/ioBroker.admin/blob/master/packages/jsonConfig/schemas/jsonConfig.json
Для разработчика
Схема используется здесь: https://github.com/SchemaStore/schemastore/blob/6da29cd9d7cc240fb4980625f0de6cf7bd8dfd06/src/api/json/catalog.json#L3214
Changelog
10.0.2 (2026-09-15)
- (@MiSchroe) Fixed: CRON schema accepts either simple or complex or none of them
- (@GermanBluefox) Updated Schema
10.0.1 (2026-09-12)
- (@GermanBluefox) The schema was corrected: closable to closeable.
- (@GermanBluefox) Updated packages
10.0.0 (2026-09-04)
- (@GermanBluefox) The schema allows the root property
commandof a JSON tab now. It was documented and honoured by admin, but everyjsonTab.json5that uses it was reported as invalid: https://github.com/ioBroker/ioBroker.admin/issues/3610 - (@GermanBluefox) The schema of
divideraccepts any CSS color and a height as a CSS length, as the control has always rendered them. Until now onlyprimary/secondaryand a number were allowed - (@GermanBluefox) Added
ackto thestatecontrol: the value is written as a command (ack: false) by default, as before, and an adapter that only shows its own value can now ask for an acknowledged write - (@GermanBluefox) Added
highlightto thestatecontrol, which highlights the line on mouse over, likestaticInfoalready did - (@GermanBluefox) Breaking for hosts:
react-aceis not a dependency of this library anymore. The host hands the editor in with the new propertyAceEditorofJsonConfig/JsonConfigComponent, together with the modesjson,json5,yamland the themesclouds_midnight,chrome. Without it the editors are plain text areas. Until now every bundle that uses this library carried the wholeace-buildsalong, the custom components of all adapters included
9.1.2 (2026-09-01)
- (@GermanBluefox) Replaced
react-colorwith theColorPickerfrom@iobroker/gui-componentsin thecolorcomponent
9.1.1 (2026-08-31)
- (@GermanBluefox) Do not show export import on narrow devices
9.1.0 (2026-08-31)
- (@GermanBluefox) Added progress bar to the state component
- (@GermanBluefox) Added the possibility to show or hide elements depending on the states:
dependsOnStatesand the JS variable_states
9.0.23 (2026-08-27)
- (@krobipd) Corrected: the object browser stayed empty after closing the object customization dialog if any object was changed while the dialog was open (ioBroker/ioBroker.admin#3391)
- (@krobipd) Changed:
ObjectBrowserClass.subscribesand.recordStatesare Sets instead of arrays now - (@krobipd) Improved: object browser performance on large installations — bursts of object changes cause one tree rebuild instead of several, state-change echoes no longer trigger redraws, subscription bookkeeping is no longer quadratic, and rows outside the viewport skip layout and paint
9.0.22 (2026-08-21)
- (@GermanBluefox) Corrected layout of Config view
9.0.21 (2026-08-19)
- (@GermanBluefox) Added the possibility to show or hide elements depending on the operating system of the host:
os,notOsand the JS variables_os,_arch,_host - (@GermanBluefox) Added the possibility to show or hide elements depending on the docker installation:
dockerand_host.docker
9.0.20 (2026-08-13)
- (@GermanBluefox) Correcting ConfigSelect component
9.0.19 (2026-08-09)
- (@GermanBluefox) Correcting autocompleteSendTo component
9.0.18 (2026-08-07)
- (@GermanBluefox) Updated packages
9.0.14 (2026-07-31)
- (@GermanBluefox) Updated packages
9.0.9 (2026-07-30)
- (@GermanBluefox) Improvement of I18n
9.0.7 (2026-07-26)
- (@GermanBluefox) Breaking: React 19 + MUI 9 + TS 6
- (@GermanBluefox) Added loading of the new custom components
8.5.5 (2026-07-24)
- (@GermanBluefox) Trying to improve the behaviour of tabs
8.5.4 (2026-07-23)
- (@GermanBluefox) Corrected the displaying of zero number values
- (@GermanBluefox) Trying to improve the behaviour of tabs
8.5.3 (2026-07-20)
- (@GermanBluefox) Changed the handling of Tabs
8.5.0 (2026-07-12)
- (@GermanBluefox) No functional updates, but only strict types for all components and attributes. This will help to avoid errors in the future.
8.4.15 (2026-07-04)
- (@GermanBluefox) Extended Credentials Component with AWS and Azure
8.4.13 (2026-06-29)
- (@GermanBluefox) Corrected the file selector component
- (@GermanBluefox) Implemented no translation for the select component
- (@GermanBluefox) Implemented debug mode for components to analyze JS functions
- (@ThomasPohl) Corrected rendering of the link in the static text component
8.4.11 (2026-06-21)
- (@GermanBluefox) Added missing translations
8.4.10 (2026-06-20)
- (@GermanBluefox) Fixed state component
8.4.9 (2026-06-19)
- (@GermanBluefox) Moved translations from adapter-react to this repository
8.4.8 (2026-06-18)
- (@GermanBluefox) Allowed creating credentials directly in the
credentialcomponent (templates with icons, filtered bycredentialType; can be disabled withdisableCreation)
8.4.7 (2026-06-07)
- (@GermanBluefox) Added a credential component
8.4.5 (2026-05-30)
- (@GermanBluefox) Fixing help rendering
8.4.4 (2026-05-29)
- (@GermanBluefox) Corrected groups in the select component
8.4.3 (2026-05-24)
- (@GermanBluefox) Optimization of interfaces
8.4.1 (2026-05-19)
- (@GermanBluefox) Allowed to use
await getObject(data.oid)?.common?.type === 'boolean'in hidden, pattern or disabled
8.3.13 (2026-05-16)
- (@GermanBluefox) Added
_hreftojsonData
8.3.11 (2026-04-29)
- (@GermanBluefox) Added
instanceoption for allsendTocomponents to override the target adapter instance
8.3.9 (2026-04-17)
- (@GermanBluefox) Updated packages
8.3.8 (2026-04-13)
- (@GermanBluefox) Adjust a path to images
8.3.5 (2026-04-11)
- (@GermanBluefox) Extend schema for staticLink and staticImage components
8.3.4 (2026-04-09)
- (@GermanBluefox) Added
horizontaloption forselectcomponent withformat: "radio"to display radio buttons in a row - (@GermanBluefox) Added
iconoption forselectcomponent options to display icons next to labels
8.3.2 (2026-03-31)
- (@GermanBluefox) Added possibility to provide custom components
8.2.22 (2026-03-29)
- (@GermanBluefox) Corrected error for "state" component
8.2.19 (2026-03-27)
- (@GermanBluefox) Added option "small cards" for device manager
8.2.18 (2026-03-25)
- (@GermanBluefox) Added the possibility to use own Client ID for oauth authentication
- (@GermanBluefox) Added the possibility to show a small image and open it in full size by clicking on it
8.2.11 (2026-03-20)
- (@GermanBluefox) Correcting unit in schema
- (@GermanBluefox) Fill other config fields when an object ID is selected
8.2.8 (2026-03-15)
- (@GermanBluefox) Added radio button control for the state component ('select')
8.2.7 (2026-03-14)
- (@GermanBluefox) Made the secondary text in 'select' and 'selectSendTo' smaller, italic and semi-transparent
8.2.6 (2026-03-14)
- (@GermanBluefox) Added description for options in 'select' or 'selectSendTo' component
8.2.5 (2026-03-12)
- (@GermanBluefox) Extended the staticText component with HTML and JSON visualization
8.2.3 (2026-03-04)
- (@GermanBluefox) Increased the QR code padding
8.2.2 (2026-03-03)
- (@GermanBluefox) Added option
sendFirstByClicktoimageSendTo - (@GermanBluefox) Added a new component:
qrCodeSendTo - (@GermanBluefox) Added option
digitstostatecomponent - (@GermanBluefox) Trying to fix indication of the problems in the table
8.1.11 (2026-02-12)
- (@GermanBluefox) Added the copy-to-clipboard dialog for
sendTo
8.1.9 (2026-02-10)
- (@GermanBluefox) Hiding the whole line in the table if shown as card and the line is empty
- (@GermanBluefox) Added the header to the table in the card mode
8.1.3 (2026-02-09)
- (@GermanBluefox) Added component
yamlEditorfor editing YAML files in admin
8.1.1 (2026-02-06)
- (@GermanBluefox) Added
iframeandiframeSendTocomponents
8.0.8 (2026-01-27)
- (@GermanBluefox) Fixing the
alivecomponent - (@GermanBluefox) Fixing the
datePickercomponent
8.0.7 (2026-01-27)
- (@GermanBluefox) Updated adapter-react-v5
8.0.6 (2025-11-10)
- (@GermanBluefox) Added width to many table elements
8.0.5 (2025-10-25)
- (@GermanBluefox) Do not translate certificates names
- (@GermanBluefox) Update packages
8.0.3 (2025-10-23)
- (@GermanBluefox) Do not translate certificates names
8.0.2 (2025-10-23)
- (@GermanBluefox) Renamed gui-components to adapter-react-v5
8.0.1 (2025-10-23)
- (@GermanBluefox) initial commit
License
It shows the license information if not already accepted. One of attributes texts or licenseUrl must be defined. When the license is accepted, the defined configuration attribute will be set to true.
| Property | Description |
|---|---|
texts | array of paragraphs with texts, which will be shown each as a separate paragraph |
licenseUrl | URL to the license file (e.g. https://raw.githubusercontent.com/ioBroker/ioBroker.docs/master/LICENSE) |
title | Title of the license dialog |
agreeText | Text of the agreed button |
checkBox | If defined, the checkbox with the given name will be shown. If checked, the agreed button will be enabled. |
checkDocker
- (admin >= 7.7.2) initial implementation
Special component to check if Docker is installed and running. If docker is installed, a checkbox will be shown to allow the usage of docker.
| Property | Description |
|---|---|
hideVersion | If the information about docker version or error should be hidden (e.g. if used more than one such element on the page the error or version will be shown once |
checkLicense
Very special component to check the license online. It's required exactly license and useLicenseManager properties in native.
| Property | Description |
|---|---|
uuid | Check UUID |
version | Check version |
uuid
Show iobroker UUID
port
Special input for ports. It checks automatically if the port is used by other instances and shows a warning
| Property | Description |
|---|---|
min | minimal allowed port number. It could be 0. And if the value is then zero, the check if the port is occupied will not happen. |
state
- (admin >= 7.1.0) Show control or information from the state
- (admin >= 7.6.4) attributes
showEnterButtonandsetOnEnterKey
| Property | Description |
|---|---|
oid | Which object ID should be taken for the controlling. The ID is without adapter.X. prefix |
system | If true, the state will be taken from system.adapter.X. and not from adapter.X |
foreign | The oid is absolute and no need to add adapter.X or system.adapter.X. to oid |
control | How the value of the state should be shown: text, html, input, slider, select, button, switch, number |
controlled | If true, the state will be shown as switch, select, button, slider or text input. Used only if no control property is defined |
unit | Add unit to the value |
trueText | this text will be shown if the value is true |
trueTextStyle | Style of the text if the value is true |
falseText | this text will be shown if the value is false or if the control is a "button" |
falseTextStyle | Style of the text if the value is false or if the control is a "button" |
trueImage | This image will be shown if the value is true |
falseImage | This image will be shown if the value is false or if the control is a "button" |
min | Minimum value for control type slider or number |
max | Maximum value for control type slider or number |
step | Step value for control type slider or number |
controlDelay | delay in ms for slider or number |
variant | Variant of button: contained, outlined, text |
readOnly | Defines if the control is read-only |
narrow | Normally the title and value are shown on the left and right of the line. With this flag, the value will appear just after the label |
blinkOnUpdate | Value should blink when updated (true or color) |
size | Font size: small, normal, large or number |
addColon | Add to label the colon at the end if not exist in label |
labelIcon | Base64 icon for label |
buttonValue | Optional value, that will be sent for button |
showEnterButton | Show SET button. The value in this case will be sent only when the button is pressed. You can define the text of the button. Default text is "Set" (Only for "input", "number" or "slider") |
setOnEnterKey | The value in this case will be sent only when the "Enter" button is pressed. It can be combined with showEnterButton |
options | Options for select in form ["value1", "value2", ...] or [{"value": "value", "label": "Value1", "color": "red"}, "value2", ...]. If not defiled, the common.states in the object must exist. |
digits | Number of decimal places to display for numeric values in text/html mode (e.g. 2 turns 230.2764537654374 into 230.28) |
ack | Write the value as acknowledged. A control writes a command by default (false), so that the adapter reacts to it |
highlight | Highlight the line on mouse over |
staticInfo
Shows static information in preformatted form, like "Title: value unit" (admin >= 7.3.3) This control is used mostly in dynamic forms
| Property | Description |
|---|---|
data | Value to be shown |
label | Label for the value (could be multi-language) |
unit | (optional) unit (could be multi-language) |
narrow | (optional) Normally the title and value are shown on the left and right of the line. With this flag, the value will appear just after the label |
addColon | (optional) Add to label the colon at the end if not exist in label |
blinkOnUpdate | (optional) Value should blink when updated (true or color) |
blink | (optional) Value should blink continuously (true or color) |
styleLabel | (optional) React CSS Styles |
styleValue | (optional) React CSS Styles |
styleUnit | (optional) React CSS Styles |
copyToClipboard | (optional) Show copy to clipboard button for value |
labelIcon | (optional) base64 icon for label |
size | (optional) font size: small, normal, large or number |
highlight | (optional) Highlight line on mouse over |
booleanAsCheckbox | (optional) Show boolean values as checkbox |
infoBox
Shows closable static text with optional title and icon. (From admin >= 7.6.19)
| Property | Description |
|---|---|
text | Text to be shown |
title | (optional) title for info box |
boxType | (optional) warning, info, error, ok. (Default info) |
closeable | (optional) If the box is closeable (Default true) |
iconPosition | (optional) top, middle (Default middle) |
closed | (optional) Will be shown as closed at the beginning |
deviceManager
show device manager. For that, the adapter must support device manager protocol. See iobroker/dm-utils.
| Property | Description |
|---|---|
smallCards | (optional) Show small device cards in the device manager |
Here is an example of how to show the device manager in a tab:
{
//...
"_deviceManager": {
"type": "panel",
"label": "Device manager",
"items": {
"_dm": {
"type": "deviceManager",
"sm": 12,
"style": {
"width": "100%",
"height": "100%",
"overflow": "hidden"
}
}
},
"style": {
"width": "100%",
"height": "100%",
"overflow": "hidden"
},
"innerStyle": {
"width": "100%",
"height": "100%",
"overflow": "hidden"
}
}
}
License
The MIT License (MIT)
Copyright (c) 2019-2026 @GermanBluefox dogafox@gmail.com
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.