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

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

Материал из XIOT Wiki
Добавлено описание локального API контроллера
 
Английские адреса Wiki: обновление ссылок с сохранением русских подписей
 
(не показано 5 промежуточных версий этого же участника)
Строка 1: Строка 1:
Локальное API контроллера XIOT работает на контроллере по HTTP на порту 5552.
{{DISPLAYTITLE:Локальное API контроллера XIOT}}
'''Локальное API контроллера XIOT''' — входящий HTTP-интерфейс XIOT-PLC. Внешняя система в доверенной локальной сети может через него прочитать объекты и характеристики загруженного проекта или передать команду. API не создаёт новые адреса: оно использует дом, этажи, комнаты, виртуальные устройства и характеристики, которые уже есть в действующей конфигурации контроллера.


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


Все запросы к API должны передавать ключ локального API. Запрос без ключа или с неверным ключом возвращает HTTP 401:
Описанный контракт проверен по опубликованному пакету XIOT-PLC <code>14.1-1-1</code>. В этой версии контроллер принимает запросы по схеме HTTP на своём IP-адресе и порту <code>5552</code>.


<syntaxhighlight lang="json">
== Перед началом ==
{"error":"unauthorized"}
 
</syntaxhighlight>
* Загрузите на XIOT-PLC актуальную конфигурацию проекта и убедитесь, что нужное виртуальное устройство связано с реальным оборудованием: [[Device-bindings|Привязка реальных устройств к виртуальным]].
* Подключайте внешнюю систему только из доверенной локальной сети либо через защищённый VPN.
* Не пробрасывайте порт <code>5552</code> на маршрутизаторе и не публикуйте его в Интернете.
* Для первой команды выберите известное устройство с безопасной и видимой реакцией. Не начинайте проверку на замках, воротах, насосах, отоплении, защитной автоматике и другом оборудовании, неожиданное включение которого опасно.
 
== Получение и обновление ключа ==
 
# Откройте привязанный контроллер в XIOT-EDITOR.
# Откройте окно '''Настройки контроллера'''.
# Скопируйте значение поля '''Ключ локального API (порт 5552)'''.
 
Это единый секрет контроллера: с ним можно читать данные проекта и отправлять команды доступным через API объектам. Храните ключ как пароль. Не помещайте его в вики, исходный код, скриншоты, обращения в поддержку и общие журналы.
 
Кнопка '''Обновить ключ локального API''' создаёт новый ключ. Старый ключ после этого перестаёт проходить авторизацию, поэтому обновите его во всех разрешённых интеграциях. Если ключ мог попасть к посторонним, обновите его сразу.
 
== Подготовка запроса ==


Ключ хранится на контроллере в системном теге <code>/system/plc/apikey</code> и сохраняется в <code>SaveVal</code>. В редакторе он отображается в окне '''Настройки контроллера''' в строке '''Ключ локального API (порт 5552)'''.
В примерах ниже используются две переменные, значения которых задаются только в вашей локальной среде:


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


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


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
curl -H "X-XIOT-API-Key: <ключ>" "http://<ip-контроллера>:5552/api/v1/remote/get/devices"
read -r -p "Базовый адрес XIOT API: " XIOT_API
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 <ключ>" "http://<ip-контроллера>:5552/api/v1/remote/get/devices"
curl --silent --show-error --max-time 10 \
  -H "X-XIOT-API-Key: ${XIOT_API_KEY}" \
  "${XIOT_API}/api/v1/remote/get/devices"
</syntaxhighlight>
</syntaxhighlight>


Для простых GET-запросов также поддерживается параметр URL <code>key</code>, <code>api_key</code> или <code>apikey</code>:
Также поддерживается заголовок <code>Authorization: Bearer</code>. Не передавайте ключ в адресе запроса: адрес может сохраниться в истории, журналах и системах мониторинга.
 
<syntaxhighlight lang="text">
http://<ip-контроллера>:5552/api/v1/remote/get/devices?key=<ключ>
</syntaxhighlight>


Рекомендуемый способ для интеграций - HTTP-заголовок <code>X-XIOT-API-Key</code>.
Текущая реализация использует метод HTTP <code>GET</code> и для чтения, и для команд изменения. Не открывайте командные адреса в браузере, не сохраняйте их в закладках и не пропускайте через кэширующие или автоматически повторяющие запросы посредники.


== Получение данных ==
== Получение данных ==
Базовый адрес:
<syntaxhighlight lang="text">
http://<ip-контроллера>:5552
</syntaxhighlight>
Доступные GET-методы:


{| 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;floorid&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;roomid&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;devid&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 lang="text">
/api/v1/remote/set/<тип>/<id>/<характеристика>/<значение>
</syntaxhighlight>
</syntaxhighlight>


Ответ содержит объект, где ключом является идентификатор сущности. Характеристики возвращаются в поле <code>characteristic</code>.
Поддержаны типы <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>


Управление выполняется GET-запросом <code>/api/v1/remote/set/...</code>. При успешной записи API возвращает:
Ответ обработчика на принятую команду:


<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Строка 84: Строка 106:
</syntaxhighlight>
</syntaxhighlight>


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


<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Строка 90: Строка 112:
</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"
! Метод
! Наблюдение
! Описание
! Что оно означает
|-
|-
| <code>/api/v1/remote/set/home/&lt;homeid&gt;/&lt;характеристика&gt;/&lt;значение&gt;</code>
| HTTP <code>401</code> и <code>{"error":"unauthorized"}</code>
| Установить характеристику дома.
| Ключ отсутствует или не совпадает с текущим ключом контроллера.
|-
|-
| <code>/api/v1/remote/set/floor/&lt;floorid&gt;/&lt;характеристика&gt;/&lt;значение&gt;</code>
| HTTP <code>200</code> и непустой JSON объекта
| Установить характеристику этажа.
| Запрос чтения обработан; содержимое всё равно нужно проверить.
|-
|-
| <code>/api/v1/remote/set/room/&lt;roomid&gt;/&lt;характеристика&gt;/&lt;значение&gt;</code>
| HTTP <code>200</code> и <code>{}</code>
| Установить характеристику комнаты.
| Объект не найден, путь не распознан либо в текущей конфигурации нет данных. Код <code>200</code> сам по себе не доказывает правильность пути.
|-
|-
| <code>/api/v1/remote/set/device/&lt;devid&gt;/&lt;характеристика&gt;/&lt;значение&gt;</code>
| HTTP <code>200</code> и <code>{"set":"ok"}</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. Команда '''Загрузить конфигурацию на контроллер''' сначала сохраняет проект локально и после успешной записи отправляет сохранённую конфигурацию на XIOT-PLC. Облачное сохранение и публикацию приложения проверяют отдельно: успешная загрузка на PLC их не подтверждает. Отдельное сохранение без загрузки не изменяет набор объектов API на контроллере.
 
После добавления, удаления или повторного создания объектов заново запросите списки, проверьте идентификаторы и выполните безопасную приёмку интеграции. Не считайте старые идентификаторы бессрочным контрактом.


Пример выключения устройства:
== Если запрос не работает ==


<syntaxhighlight lang="bash">
# Убедитесь, что XIOT-PLC включён и доступен по его текущему IP-адресу из той же доверенной сети.
curl -H "X-XIOT-API-Key: <ключ>" \
# Проверьте, что используется порт <code>5552</code>, а ключ передан ровно в одном поддерживаемом заголовке.
  "http://192.168.1.10:5552/api/v1/remote/set/device/12/On/0"
# При ошибке <code>401</code> заново скопируйте текущий ключ; после обновления ключа старое значение уже не подходит.
</syntaxhighlight>
# При пустом ответе сначала проверьте полный путь и получите актуальные идентификаторы списочным запросом.
# При <code>{"set":"error"}</code> сверьте объект и направление характеристики в проекте.
# Если получено <code>{"set":"ok"}</code>, но оборудование не отреагировало, проверьте адрес управления, адрес состояния, драйвер и физическое оборудование. Полезны [[Xiot-plc-system-log-events|Системные события в журнале XIOT-PLC]] и [[Xiot-tags|Механизм работы тегов в XIOT]].


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


Адреса вида <code>/api/v1/mplayer/...</code> передаются в модуль <code>mplayer</code>. Они также требуют ключ локального API.
== Следующие шаги ==


== Безопасность ==
* [[Driver-setup|Настройка драйверов]] — исходящие интеграционные модули и протоколы.
* [[Device-bindings|Привязка реальных устройств к виртуальным]] — связь команды API с физическим оборудованием.
* [[Xiot-tags|Механизм работы тегов в XIOT]] — адреса управления и состояния.


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

Текущая версия от 22:12, 2 октября 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. Команда Загрузить конфигурацию на контроллер сначала сохраняет проект локально и после успешной записи отправляет сохранённую конфигурацию на XIOT-PLC. Облачное сохранение и публикацию приложения проверяют отдельно: успешная загрузка на PLC их не подтверждает. Отдельное сохранение без загрузки не изменяет набор объектов API на контроллере.

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

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

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

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

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