API-интерфейсы менеджера
Версия: 1.26.0
API OpenRemote Manager состоит из следующих API, каждый API требует аутентификации (за исключением read/write общедоступного asset attributes, см. Asset Security).
Чтобы иметь возможность пройти аутентификацию, вам необходимо создать пользователя службы с помощью пользовательского интерфейса Manager (для доступа к этой функции необходимо войти в систему как суперпользователь), см. руководство пользователя пользовательского интерфейса Manager; токены доступа можно получить из конечной точки токена с использованием стандартных методов OAuth 2.0.
- Конечная точка токена OAuth 2.0:
/auth/realms/{realm}/protocol/openid-connect/token. - Типы грантов, поддерживаемые обычным пользователем:
authorizationCode. - Типы разрешений, поддерживаемые пользователем службы:
client_credentials.
HTTP API
Это традиционный API ответа на запрос, описанный в главе REST API.
Оперативная документация также доступна через пользовательский интерфейс Swagger (см. URL-адрес /swagger/ вашего менеджера) или вы можете просмотреть демо-среду Swagger UI.
Аутентификация выполняется с использованием стандартного токена носителя заголовка Authorization, где этот токен является действительным токеном доступа, полученным из конечной точки токена OAuth 2.0.
- Базовый URL-адрес:
/api/{realm}/. - Заголовок авторизации:
Authorization: Bearer {accessToken}.
API WS (WebSocket)
Это API публикации и подписки, основанный на событиях, где события имеют тип SharedEvent. Аутентификация выполняется с использованием параметра запроса Authorization с действительным токеном доступа, полученным из конечной точки токена. Область аутентифицирующего пользователя также должна быть включена в качестве параметра запроса Realm.
- URL:
/websocket/events?Realm={realm}&Authorization=Bearer%20{accessToken}, например.wss://localhost:8080/websocket/events?Realm=smartcity&Authorization=Bearer%20eye2238f3a-e43c-3f54-a05a-dd2e4bd4631f
Подписки
Подписка создается путем отправки EventSubscription как JSON с префиксом SUBSCRIBE:. Когда отправляется сообщение о подписке, сервер определяет, имеет ли запрашивающий пользователь право на такую подписку, и если да, то менеджер ответит тем же объектом подписки JSON, но с префиксом SUBSCRIBED:. Если пользователь не авторизован, то объект подписки JSON будет возвращен, но с префиксом UNAUTHORIZED:.
Когда в диспетчере происходит событие, соответствующее существующей подписке, клиенту отправляется TriggeredEventSubscription в формате JSON с префиксом TRIGGERED:.
Опубликовать
AttributeEvents можно опубликовать, и вы можете подождать, пока произойдет изменение, и будет возвращен AttributeEvent, когда атрибут действительно обновится.
Также можно эмулировать модель «запрос — ответ» HTTP API при чтении данных через WebSocket API. Для этого отправьте EventRequestResponseWrapper в формате JSON с префиксом REQUESTRESPONSE:. Поле messageId позволяет связать запрос с ответом. Такой режим можно использовать, например, для чтения актива.
Для получения более подробной информации о структуре сообщений обратитесь к Javadoc каждого типа объекта.
API MQTT (брокер MQTT)
Еще один API публикации и подписки. Для аутентификации требуется имя пользователя и секрет 'Пользователя службы' и выполняется с использованием стандартного механизма имени пользователя и пароля MQTT для подключения к брокеру:- Хост: Хост менеджера (например, demo.openremote.io).
- Порт: 8883 (при работе с SSL, т. е. стандартный стек с обратным прокси-сервером SSL) 1883 (при работе без прокси-сервера SSL)
- Шифрование/TLS: true (порт 8883), false (порт 1883).
- Имя пользователя:
{realm}:{username} - Пароль:
{secret} - ClientId: все что угодно (но не используйте один и тот же ClientId более одного раза)
Примечания
- Чтобы создать имя пользователя и секретный ключ, помните, что вам необходимо создать «Пользователя службы» (а не обычного пользователя).
- Важно, чтобы
clientIdв следующих разделах совпадал с учетными данными MQTT.
Подписки
AssetEvents
На эти события можно подписаться, используя формат темы:
{realm}/{clientId}/asset/{assetId}
Примеры:
{realm}/{clientId}/asset/#— все события активов в области.{realm}/{clientId}/asset/+- Все события активов для прямых дочерних элементов области.{realm}/{clientId}/asset/{assetId}- Все события актива для указанного актива.{realm}/{clientId}/asset/{assetId}/#- Все события актива для потомков указанного актива{realm}/{clientId}/asset/{assetId}/+- Все события актива для прямых дочерних элементов указанного актива.
AttributeEvents
На эти события можно подписаться, используя формат темы:
{realm}/{clientId}/attribute/{attributeName}/{assetId}
Примеры:
{realm}/{clientId}/attribute/+/#— все события атрибутов в области.{realm}/{clientId}/attribute/+/+— все события атрибутов для прямых дочерних элементов области.{realm}/{clientId}/attribute/+/{assetId}- Все события атрибутов для указанного актива.{realm}/{clientId}/attribute/{attributeName}/#— все события атрибута для указанного имени атрибута.{realm}/{clientId}/attribute/{attributeName}/+— все события атрибутов для прямых дочерних активов области с указанным именем атрибута.{realm}/{clientId}/attribute/{attributeName}/{assetId}- Все события атрибута для указанного актива с указанным именем атрибута.{realm}/{clientId}/attribute/{attributeName}/{assetId}/#- Все события атрибута для потомков указанного актива с указанным именем атрибута.{realm}/{clientId}/attribute/{attributeName}/{assetId}/+- Все события атрибута для прямых дочерних элементов указанного актива с указанным именем атрибута.
Примечание
Префикс темы attributevalue можно использовать вместо attribute, чтобы возвращать только значение AttributeEvent, а не все событие.
Опубликовать
Можно публиковать атрибутивные события для определенных активов, используя следующие темы и полезные данные:
{realm}/{clientId}/writeattributevalue/{attributeName}/{assetId}- Полезная нагрузка:JSONзначения атрибута.{realm}/{clientId}/writeattribute/{attributeName}/{assetId}- Полезная нагрузка:{"value": <VALUE>, "timestamp": <TIMESTAMP>}, где<VALUE>— этоJSONзначения атрибута, а<TIMESTAMP>— это временная метка события в миллисекундах эпохи.
Последняя публикация
Клиенты могут настроить тему и полезную нагрузку последней воли, как определено в спецификации MQTT; тема и полезные данные могут использовать стандартную тему публикации атрибута/полезную нагрузку, поэтому можно обновить атрибут, когда клиентское соединение неожиданно закрывается; клиент должен иметь разрешение на доступ к указанному атрибуту.
Пользовательские обработчики MQTT
Можно внедрить собственные обработчики для сообщений MQTT, реализовав абстрактный класс MQTTHandler и зарегистрировав его с помощью стандартного механизма загрузчика служб (т. е. добавив его в resources/META-INF/services/org.openremote.manager.mqtt.MQTTHandler). Пользовательский обработчик может выбрать перехват сообщений в зависимости от темы, пользователя и/или того, является ли это запросом на публикацию или подзапросом. Дополнительные сведения см. в Javadoc MQTTHandler.
Уведомление о лицензии: атрибуция документации OpenRemote