Перейти к содержанию

Xiot-controller-local-api: различия между версиями

Материал из XIOT Wiki
Уточнено описание локального API контроллера
OLD-04E: безопасная инструкция локального API XIOT-PLC и маршрут из обзора драйверов
Строка 1: Строка 1:
Локальное API контроллера XIOT позволяет внешним системам получать состояние дома и управлять устройствами в локальной сети. API работает на контроллере по адресу:
'''Локальное API контроллера XIOT''' — входящий HTTP-интерфейс XIOT-PLC. Внешняя система в доверенной локальной сети может через него прочитать объекты и характеристики загруженного проекта или передать команду. API не создаёт новые адреса: оно использует дом, этажи, комнаты, виртуальные устройства и характеристики, которые уже есть в действующей конфигурации контроллера.


<syntaxhighlight lang="text">
Не путайте локальное API с исходящим модулем REST API: локальное API принимает обращения внешней системы на XIOT-PLC, а исходящий модуль сам обращается к другому серверу. Обзор интеграционных модулей: [[Настройка драйверов]].
http://<ip-контроллера>:5552
 
</syntaxhighlight>
Описанный контракт проверен по опубликованному пакету XIOT-PLC <code>14.1-1-1</code>. В этой версии контроллер принимает запросы по схеме HTTP на своём IP-адресе и порту <code>5552</code>.
 
== Перед началом ==
 
* Загрузите на XIOT-PLC актуальную конфигурацию проекта и убедитесь, что нужное виртуальное устройство связано с реальным оборудованием: [[Привязка реальных устройств к виртуальным]].
* Подключайте внешнюю систему только из доверенной локальной сети либо через защищённый VPN.
* Не пробрасывайте порт <code>5552</code> на маршрутизаторе и не публикуйте его в Интернете.
* Для первой команды выберите известное устройство с безопасной и видимой реакцией. Не начинайте проверку на замках, воротах, насосах, отоплении, защитной автоматике и другом оборудовании, неожиданное включение которого опасно.
 
== Получение и обновление ключа ==


== Ключ доступа ==
# Откройте привязанный контроллер в XIOT-EDITOR.
# Откройте окно '''Настройки контроллера'''.
# Скопируйте значение поля '''Ключ локального API (порт 5552)'''.


Для работы с API нужен ключ доступа. Он отображается в редакторе XIOT:
Это единый секрет контроллера: с ним можно читать данные проекта и отправлять команды доступным через API объектам. Храните ключ как пароль. Не помещайте его в вики, исходный код, скриншоты, обращения в поддержку и общие журналы.


<syntaxhighlight lang="text">
Кнопка '''Обновить ключ локального API''' создаёт новый ключ. Старый ключ после этого перестаёт проходить авторизацию, поэтому обновите его во всех разрешённых интеграциях. Если ключ мог попасть к посторонним, обновите его сразу.
Настройки контроллера -> Ключ локального API (порт 5552)
</syntaxhighlight>


Все запросы к API должны передавать этот ключ. Если ключ не указан или указан неверно, контроллер вернет ошибку авторизации.
== Подготовка запроса ==


Ключ можно обновить в том же окне настроек кнопкой '''Обновить ключ локального API'''. После обновления старый ключ перестает работать, поэтому его нужно заменить во всех внешних интеграциях.
В примерах ниже используются две переменные, значения которых задаются только в вашей локальной среде:


== Как передавать ключ ==
* <code>XIOT_API</code> — базовый адрес из схемы <code>http</code>, IP-адреса контроллера и порта <code>5552</code>;
* <code>XIOT_API_KEY</code> — текущий ключ локального API.


Рекомендуемый способ - передавать ключ в HTTP-заголовке:
Для разовой проверки в <code>bash</code> или <code>zsh</code> значения можно ввести интерактивно, не записывая их в историю команд:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
curl -H "X-XIOT-API-Key: <ключ>" \
read -r -p "Базовый адрес XIOT API: " XIOT_API
  "http://192.168.1.10:5552/api/v1/remote/get/devices"
read -r -s -p "Ключ XIOT API: " XIOT_API_KEY
printf '\n'
</syntaxhighlight>
</syntaxhighlight>


Также поддерживается заголовок авторизации:
Рекомендуемый вариант авторизации — заголовок <code>X-XIOT-API-Key</code>:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
curl -H "Authorization: Bearer <ключ>" \
curl --silent --show-error --max-time 10 \
   "http://192.168.1.10:5552/api/v1/remote/get/devices"
  -H "X-XIOT-API-Key: ${XIOT_API_KEY}" \
   "${XIOT_API}/api/v1/remote/get/devices"
</syntaxhighlight>
</syntaxhighlight>


Для простых проверок ключ можно передать в адресе запроса:
Также поддерживается заголовок <code>Authorization: Bearer</code>. Не передавайте ключ в адресе запроса: адрес может сохраниться в истории, журналах и системах мониторинга.


<syntaxhighlight lang="text">
Текущая реализация использует метод HTTP <code>GET</code> и для чтения, и для команд изменения. Не открывайте командные адреса в браузере, не сохраняйте их в закладках и не пропускайте через кэширующие или автоматически повторяющие запросы посредники.
http://192.168.1.10:5552/api/v1/remote/get/devices?key=<ключ>
</syntaxhighlight>
 
Для постоянных интеграций лучше использовать заголовок, а не параметр в адресе.


== Получение данных ==
== Получение данных ==
Запросы чтения возвращают данные в формате JSON.


{| class="wikitable"
{| class="wikitable"
! Запрос
! Путь
! Что возвращает
! Результат
|-
|-
| <code>/api/v1/remote/get/home</code>
| <code>/api/v1/remote/get/home</code>
| Дом и его характеристики.
| Дом и его характеристики. Идентификатор дома в текущей реализации — <code>1</code>.
|-
|-
| <code>/api/v1/remote/get/floors</code>
| <code>/api/v1/remote/get/floors</code>
| Список этажей.
| Все этажи.
|-
|-
| <code>/api/v1/remote/get/floor/&lt;id_этажа&gt;</code>
| <code>/api/v1/remote/get/floor/&lt;id&gt;</code>
| Один этаж.
| Один этаж с указанным идентификатором.
|-
|-
| <code>/api/v1/remote/get/rooms</code>
| <code>/api/v1/remote/get/rooms</code>
| Список комнат.
| Все комнаты с данными об этажах.
|-
|-
| <code>/api/v1/remote/get/room/&lt;id_комнаты&gt;</code>
| <code>/api/v1/remote/get/room/&lt;id&gt;</code>
| Одна комната.
| Одна комната с указанным идентификатором.
|-
|-
| <code>/api/v1/remote/get/devices</code>
| <code>/api/v1/remote/get/devices</code>
| Список устройств.
| Все виртуальные устройства с комнатами, этажами и характеристиками.
|-
|-
| <code>/api/v1/remote/get/device/&lt;id_устройства&gt;</code>
| <code>/api/v1/remote/get/device/&lt;id&gt;</code>
| Одно устройство.
| Одно виртуальное устройство с указанным идентификатором.
|}
|}


Пример запроса устройства:
Ответ имеет формат JSON. Объекты индексируются их идентификаторами. Для устройств возвращаются имя, тип, сведения о комнате и этаже, а также объект <code>characteristic</code> с текущими значениями характеристик. Набор полей и характеристики зависят от загруженного проекта.
 
<syntaxhighlight lang="bash">
curl -H "X-XIOT-API-Key: <ключ>" \
  "http://192.168.1.10:5552/api/v1/remote/get/device/12"
</syntaxhighlight>


В ответе используется идентификатор объекта и список его характеристик.
Сначала запросите списки и возьмите идентификаторы из фактического ответа. Не угадывайте идентификатор и не переносите его из чужого примера. После изменения структуры проекта выполните обнаружение заново.


== Управление устройствами ==
== Отправка команды ==


Управление выполняется запросами вида:
Форма пути команды:


<syntaxhighlight lang="text">
<syntaxhighlight lang="text">
Строка 88: Строка 89:
</syntaxhighlight>
</syntaxhighlight>


При успешном выполнении контроллер вернет:
Поддержаны типы <code>home</code>, <code>floor</code>, <code>room</code> и <code>device</code>. Идентификатор и имя характеристики берите из текущего проекта и ответа API. До команды проверьте в XIOT-EDITOR или в документации виртуального устройства, что характеристика предназначена для управления. Если сегмент содержит специальные символы, его нужно корректно кодировать для URL.
 
Пример с заранее проверенными локальными переменными:
 
<syntaxhighlight lang="bash">
curl --silent --show-error --max-time 10 \
  -H "X-XIOT-API-Key: ${XIOT_API_KEY}" \
  "${XIOT_API}/api/v1/remote/set/device/${DEVICE_ID}/${CHARACTERISTIC}/${VALUE}"
</syntaxhighlight>
 
Ответ обработчика на принятую команду:


<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Строка 94: Строка 105:
</syntaxhighlight>
</syntaxhighlight>


Если команда не выполнена:
Этот ответ означает, что обработчик нашёл объект и характеристику и вызвал внутреннюю команду XIOT. Он не подтверждает физическое выполнение оборудованием. Если обработчик не нашёл объект или характеристику либо не смог вызвать команду, обычно возвращается:


<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Строка 100: Строка 111:
</syntaxhighlight>
</syntaxhighlight>


Доступные команды:
Оба ответа могут прийти с кодом HTTP <code>200</code>, поэтому проверяйте и код, и JSON, и фактический результат.
 
== Безопасная проверка ==
 
# Выполните <code>/api/v1/remote/get/devices</code> и найдите нужное устройство по фактическому ответу.
# Сверьте его идентификатор, характеристику управления и допустимое значение с текущим проектом.
# Выберите безопасную нагрузку с видимой реакцией и запишите исходное состояние.
# Отправьте одну команду. Не настраивайте автоматические повторы при неопределённом результате.
# Проверьте физическую реакцию оборудования, затем повторно запросите <code>/api/v1/remote/get/device/&lt;id&gt;</code> и сравните состояние.
# Если значение было изменено только для теста, верните исходное состояние и ещё раз проверьте оборудование.
 
Ответ API без физической реакции не считается успешной приёмкой всей цепочки. Если адрес состояния не отражает реальность, сначала исправьте привязку устройства.
 
== Коды и ответы ==


{| class="wikitable"
{| class="wikitable"
! Запрос
! Наблюдение
! Что делает
! Что оно означает
|-
| HTTP <code>401</code> и <code>{"error":"unauthorized"}</code>
| Ключ отсутствует или не совпадает с текущим ключом контроллера.
|-
|-
| <code>/api/v1/remote/set/home/&lt;id_дома&gt;/&lt;характеристика&gt;/&lt;значение&gt;</code>
| HTTP <code>200</code> и непустой JSON объекта
| Устанавливает характеристику дома.
| Запрос чтения обработан; содержимое всё равно нужно проверить.
|-
|-
| <code>/api/v1/remote/set/floor/&lt;id_этажа&gt;/&lt;характеристика&gt;/&lt;значение&gt;</code>
| HTTP <code>200</code> и <code>{}</code>
| Устанавливает характеристику этажа.
| Объект не найден, путь не распознан либо в текущей конфигурации нет данных. Код <code>200</code> сам по себе не доказывает правильность пути.
|-
|-
| <code>/api/v1/remote/set/room/&lt;id_комнаты&gt;/&lt;характеристика&gt;/&lt;значение&gt;</code>
| HTTP <code>200</code> и <code>{"set":"ok"}</code>
| Устанавливает характеристику комнаты.
| Внутренняя команда вызвана; физический результат ещё нужно проверить.
|-
|-
| <code>/api/v1/remote/set/device/&lt;id_устройства&gt;/&lt;характеристика&gt;/&lt;значение&gt;</code>
| HTTP <code>200</code> и <code>{"set":"error"}</code>
| Устанавливает характеристику устройства.
| Команда не принята обработчиком; проверьте полный путь, тип, идентификатор и характеристику.
|-
| Нет HTTP-ответа
| Проверьте питание и доступность контроллера, его текущий IP-адрес, маршрут, локальный межсетевой экран и порт <code>5552</code>.
|}
|}


Пример включения устройства:
Не рассчитывайте на отдельный код <code>404</code> для каждого неверного пути: текущий обработчик может вернуть пустой JSON с кодом <code>200</code>.


<syntaxhighlight lang="bash">
== Безопасность сети ==
curl -H "X-XIOT-API-Key: <ключ>" \
 
  "http://192.168.1.10:5552/api/v1/remote/set/device/12/On/1"
* API слушает порт <code>5552</code> на сетевых интерфейсах контроллера и рассчитан на доверенный контур.
</syntaxhighlight>
* Встроенный интерфейс использует обычный HTTP без TLS. В недоверенной сети можно перехватить и ключ, и команды.
* Разрешайте соединение только нужным узлам локальной сети. Для удалённого доступа используйте администрируемый VPN с ограничением маршрутов и источников.
* Не открывайте порт <code>5552</code> в Интернет, даже если используется сложный ключ.
* Не передавайте ключ в строке запроса. Не записывайте полные заголовки авторизации в журналы.
* При увольнении подрядчика, компрометации компьютера или публикации конфигурации обновите ключ и удалите старое значение из всех хранилищ и журналов, где это возможно.
 
== После изменения проекта ==


Пример выключения устройства:
Локальное API работает с конфигурацией, фактически загруженной на XIOT-PLC. Команда '''Загрузить конфигурацию на контроллер''' автоматически сохраняет проект, создаёт одну новую версию и передаёт на привязанный контроллер точный снимок этой версии. Отдельное сохранение без загрузки не изменяет набор объектов API на контроллере.


<syntaxhighlight lang="bash">
После добавления, удаления или повторного создания объектов заново запросите списки, проверьте идентификаторы и выполните безопасную приёмку интеграции. Не считайте старые идентификаторы бессрочным контрактом.
curl -H "X-XIOT-API-Key: <ключ>" \
  "http://192.168.1.10:5552/api/v1/remote/set/device/12/On/0"
</syntaxhighlight>


== Ошибка авторизации ==
== Если запрос не работает ==


Если ключ не передан или указан неверно, контроллер возвращает код 401 и ответ:
# Убедитесь, что XIOT-PLC включён и доступен по его текущему IP-адресу из той же доверенной сети.
# Проверьте, что используется порт <code>5552</code>, а ключ передан ровно в одном поддерживаемом заголовке.
# При ошибке <code>401</code> заново скопируйте текущий ключ; после обновления ключа старое значение уже не подходит.
# При пустом ответе сначала проверьте полный путь и получите актуальные идентификаторы списочным запросом.
# При <code>{"set":"error"}</code> сверьте объект и направление характеристики в проекте.
# Если получено <code>{"set":"ok"}</code>, но оборудование не отреагировало, проверьте адрес управления, адрес состояния, драйвер и физическое оборудование. Полезны [[Системные события в журнале XIOT-PLC]] и [[Механизм работы тегов в XIOT]].


<syntaxhighlight lang="json">
Если причина не найдена, обратитесь на страницу [[Связь с поддержкой]]. Передавайте время проверки, версию XIOT-PLC и обезличенный путь запроса; не отправляйте ключ и полные заголовки авторизации.
{"error":"unauthorized"}
</syntaxhighlight>


В этом случае проверьте ключ в настройках контроллера и обновите его во внешней системе.
== Следующие шаги ==


== Рекомендации ==
* [[Настройка драйверов]] — исходящие интеграционные модули и протоколы.
* [[Привязка реальных устройств к виртуальным]] — связь команды API с физическим оборудованием.
* [[Механизм работы тегов в XIOT]] — адреса управления и состояния.


* Не передавайте ключ третьим лицам.
[[Категория:XIOT-PLC]]
* Не публикуйте ключ в открытых проектах, скриншотах и документации.
[[Категория:Интеграции]]
* Если ключ мог попасть к посторонним, обновите его в настройках контроллера.
* API работает в локальной сети без шифрования, поэтому не используйте его через недоверенные сети.

Версия от 22:43, 13 сентября 2026

Локальное API контроллера XIOT — входящий HTTP-интерфейс XIOT-PLC. Внешняя система в доверенной локальной сети может через него прочитать объекты и характеристики загруженного проекта или передать команду. API не создаёт новые адреса: оно использует дом, этажи, комнаты, виртуальные устройства и характеристики, которые уже есть в действующей конфигурации контроллера.

Не путайте локальное API с исходящим модулем REST API: локальное API принимает обращения внешней системы на XIOT-PLC, а исходящий модуль сам обращается к другому серверу. Обзор интеграционных модулей: Настройка драйверов.

Описанный контракт проверен по опубликованному пакету XIOT-PLC 14.1-1-1. В этой версии контроллер принимает запросы по схеме HTTP на своём IP-адресе и порту 5552.

Перед началом

  • Загрузите на XIOT-PLC актуальную конфигурацию проекта и убедитесь, что нужное виртуальное устройство связано с реальным оборудованием: Привязка реальных устройств к виртуальным.
  • Подключайте внешнюю систему только из доверенной локальной сети либо через защищённый VPN.
  • Не пробрасывайте порт 5552 на маршрутизаторе и не публикуйте его в Интернете.
  • Для первой команды выберите известное устройство с безопасной и видимой реакцией. Не начинайте проверку на замках, воротах, насосах, отоплении, защитной автоматике и другом оборудовании, неожиданное включение которого опасно.

Получение и обновление ключа

  1. Откройте привязанный контроллер в XIOT-EDITOR.
  2. Откройте окно Настройки контроллера.
  3. Скопируйте значение поля Ключ локального API (порт 5552).

Это единый секрет контроллера: с ним можно читать данные проекта и отправлять команды доступным через API объектам. Храните ключ как пароль. Не помещайте его в вики, исходный код, скриншоты, обращения в поддержку и общие журналы.

Кнопка Обновить ключ локального API создаёт новый ключ. Старый ключ после этого перестаёт проходить авторизацию, поэтому обновите его во всех разрешённых интеграциях. Если ключ мог попасть к посторонним, обновите его сразу.

Подготовка запроса

В примерах ниже используются две переменные, значения которых задаются только в вашей локальной среде:

  • XIOT_API — базовый адрес из схемы http, IP-адреса контроллера и порта 5552;
  • XIOT_API_KEY — текущий ключ локального API.

Для разовой проверки в bash или zsh значения можно ввести интерактивно, не записывая их в историю команд:

read -r -p "Базовый адрес XIOT API: " XIOT_API
read -r -s -p "Ключ XIOT API: " XIOT_API_KEY
printf '\n'

Рекомендуемый вариант авторизации — заголовок X-XIOT-API-Key:

curl --silent --show-error --max-time 10 \
  -H "X-XIOT-API-Key: ${XIOT_API_KEY}" \
  "${XIOT_API}/api/v1/remote/get/devices"

Также поддерживается заголовок Authorization: Bearer. Не передавайте ключ в адресе запроса: адрес может сохраниться в истории, журналах и системах мониторинга.

Текущая реализация использует метод HTTP GET и для чтения, и для команд изменения. Не открывайте командные адреса в браузере, не сохраняйте их в закладках и не пропускайте через кэширующие или автоматически повторяющие запросы посредники.

Получение данных

Путь Результат
/api/v1/remote/get/home Дом и его характеристики. Идентификатор дома в текущей реализации — 1.
/api/v1/remote/get/floors Все этажи.
/api/v1/remote/get/floor/<id> Один этаж с указанным идентификатором.
/api/v1/remote/get/rooms Все комнаты с данными об этажах.
/api/v1/remote/get/room/<id> Одна комната с указанным идентификатором.
/api/v1/remote/get/devices Все виртуальные устройства с комнатами, этажами и характеристиками.
/api/v1/remote/get/device/<id> Одно виртуальное устройство с указанным идентификатором.

Ответ имеет формат JSON. Объекты индексируются их идентификаторами. Для устройств возвращаются имя, тип, сведения о комнате и этаже, а также объект characteristic с текущими значениями характеристик. Набор полей и характеристики зависят от загруженного проекта.

Сначала запросите списки и возьмите идентификаторы из фактического ответа. Не угадывайте идентификатор и не переносите его из чужого примера. После изменения структуры проекта выполните обнаружение заново.

Отправка команды

Форма пути команды:

/api/v1/remote/set/<тип>/<id>/<характеристика>/<значение>

Поддержаны типы home, floor, room и device. Идентификатор и имя характеристики берите из текущего проекта и ответа API. До команды проверьте в XIOT-EDITOR или в документации виртуального устройства, что характеристика предназначена для управления. Если сегмент содержит специальные символы, его нужно корректно кодировать для URL.

Пример с заранее проверенными локальными переменными:

curl --silent --show-error --max-time 10 \
  -H "X-XIOT-API-Key: ${XIOT_API_KEY}" \
  "${XIOT_API}/api/v1/remote/set/device/${DEVICE_ID}/${CHARACTERISTIC}/${VALUE}"

Ответ обработчика на принятую команду:

{"set":"ok"}

Этот ответ означает, что обработчик нашёл объект и характеристику и вызвал внутреннюю команду XIOT. Он не подтверждает физическое выполнение оборудованием. Если обработчик не нашёл объект или характеристику либо не смог вызвать команду, обычно возвращается:

{"set":"error"}

Оба ответа могут прийти с кодом HTTP 200, поэтому проверяйте и код, и JSON, и фактический результат.

Безопасная проверка

  1. Выполните /api/v1/remote/get/devices и найдите нужное устройство по фактическому ответу.
  2. Сверьте его идентификатор, характеристику управления и допустимое значение с текущим проектом.
  3. Выберите безопасную нагрузку с видимой реакцией и запишите исходное состояние.
  4. Отправьте одну команду. Не настраивайте автоматические повторы при неопределённом результате.
  5. Проверьте физическую реакцию оборудования, затем повторно запросите /api/v1/remote/get/device/<id> и сравните состояние.
  6. Если значение было изменено только для теста, верните исходное состояние и ещё раз проверьте оборудование.

Ответ API без физической реакции не считается успешной приёмкой всей цепочки. Если адрес состояния не отражает реальность, сначала исправьте привязку устройства.

Коды и ответы

Наблюдение Что оно означает
HTTP 401 и {"error":"unauthorized"} Ключ отсутствует или не совпадает с текущим ключом контроллера.
HTTP 200 и непустой JSON объекта Запрос чтения обработан; содержимое всё равно нужно проверить.
HTTP 200 и {} Объект не найден, путь не распознан либо в текущей конфигурации нет данных. Код 200 сам по себе не доказывает правильность пути.
HTTP 200 и {"set":"ok"} Внутренняя команда вызвана; физический результат ещё нужно проверить.
HTTP 200 и {"set":"error"} Команда не принята обработчиком; проверьте полный путь, тип, идентификатор и характеристику.
Нет HTTP-ответа Проверьте питание и доступность контроллера, его текущий IP-адрес, маршрут, локальный межсетевой экран и порт 5552.

Не рассчитывайте на отдельный код 404 для каждого неверного пути: текущий обработчик может вернуть пустой JSON с кодом 200.

Безопасность сети

  • API слушает порт 5552 на сетевых интерфейсах контроллера и рассчитан на доверенный контур.
  • Встроенный интерфейс использует обычный HTTP без TLS. В недоверенной сети можно перехватить и ключ, и команды.
  • Разрешайте соединение только нужным узлам локальной сети. Для удалённого доступа используйте администрируемый VPN с ограничением маршрутов и источников.
  • Не открывайте порт 5552 в Интернет, даже если используется сложный ключ.
  • Не передавайте ключ в строке запроса. Не записывайте полные заголовки авторизации в журналы.
  • При увольнении подрядчика, компрометации компьютера или публикации конфигурации обновите ключ и удалите старое значение из всех хранилищ и журналов, где это возможно.

После изменения проекта

Локальное API работает с конфигурацией, фактически загруженной на XIOT-PLC. Команда Загрузить конфигурацию на контроллер автоматически сохраняет проект, создаёт одну новую версию и передаёт на привязанный контроллер точный снимок этой версии. Отдельное сохранение без загрузки не изменяет набор объектов API на контроллере.

После добавления, удаления или повторного создания объектов заново запросите списки, проверьте идентификаторы и выполните безопасную приёмку интеграции. Не считайте старые идентификаторы бессрочным контрактом.

Если запрос не работает

  1. Убедитесь, что XIOT-PLC включён и доступен по его текущему IP-адресу из той же доверенной сети.
  2. Проверьте, что используется порт 5552, а ключ передан ровно в одном поддерживаемом заголовке.
  3. При ошибке 401 заново скопируйте текущий ключ; после обновления ключа старое значение уже не подходит.
  4. При пустом ответе сначала проверьте полный путь и получите актуальные идентификаторы списочным запросом.
  5. При {"set":"error"} сверьте объект и направление характеристики в проекте.
  6. Если получено {"set":"ok"}, но оборудование не отреагировало, проверьте адрес управления, адрес состояния, драйвер и физическое оборудование. Полезны Системные события в журнале XIOT-PLC и Механизм работы тегов в XIOT.

Если причина не найдена, обратитесь на страницу Связь с поддержкой. Передавайте время проверки, версию XIOT-PLC и обезличенный путь запроса; не отправляйте ключ и полные заголовки авторизации.

Следующие шаги