Как получить несколько атрибутов устройства из одного HTTP-запроса в Thingsboard?

#httprequest #thingsboard

Вопрос:

Я хочу повторно использовать несколько атрибутов устройства из одного вызова HTTP API. TB позволяет мне выполнить запрос get для повторного получения данных устройства с соответствующим маркером доступа, указанным в запросе. Есть ли какие-либо варианты получения всех данных устройств из группы устройств?

Ответ №1:

Когда вы говорите о нескольких атрибутах устройства, вы просите:

  1. Получить ВСЕ атрибуты с ОДНОГО устройства? Если это так, вы можете использовать:
    curl -v -X GET "https://thingsboard.cloud/api/v1/$ACCESS_TOKEN/attributes
  2. Получите ВСЕ атрибуты для ВСЕХ устройств в определенной группе устройств. Это сложнее, вам нужно будет использовать полный rest api, найденный по адресу https://cloud.thingsboard.io/swagger-ui.html

Если вам нужен вариант 2, вам понадобится пользовательский сценарий, чтобы получить токен JWT для ваших учетных данных пользователя (или учетной записи пользователя api с низким уровнем доступа) и использовать его для аутентификации вызовов REST по указанной выше ссылке.

Псевдопроцесс:

  • Создайте токен JWT, используя учетные данные пользователя.
  • Используйте вызовы REST для entity-group-controller > getEntityGroupsByType с groupType = 'DEVICE'
  • Просмотрите это для группы, которую вы хотите
  • Используйте соответствующий entity-group-controller > getEntities идентификатор группы в вызове
  • Выполните цикл по возвращенным сущностям и либо выполните метод 1 (выше) для них, либо выполните telemetry-controller > getAttributes вызов.

Однако это гораздо больше, чем 1 HTTP-вызов…

Вы могли бы обернуть его в функцию, чтобы упростить его использование, но я не думаю, что вы сможете еще больше сократить количество вызовов.

Комментарии:

1. Большое спасибо за ответ. На самом деле мне нужно получить атрибуты устройств для более чем 1000 устройств. Я думал о том, чтобы получить все атрибуты, вызвав API одной группы устройств. Но я думаю, что я должен следовать вашему пути и должен вызывать несколько http-запросов. Кажется, это отнимает очень много времени. Надеюсь, есть какая-нибудь альтернатива.

2. @PallabChowdhury, Честно говоря, может быть лучший способ сделать это, но в настоящее время это лучший метод, о котором я знаю (я также использую его в своем приложении). Если вы найдете альтернативу, я бы хотел услышать об этом. Овации

3. Конечно. Теперь я экспортирую все данные устройств на другой сервер и получаю данные оттуда. Я думаю, что будет лучше использовать TB в качестве промежуточного брокера и использовать отдельный сервер для производства. Надеюсь, это поможет.