Визуализация данных с IoT Edge устройств. Event Hub & Message Routing. Урок 9.

Более сложный вариант перенаправления сообщений в CosmosDB и, вероятно, более дорогой, чем рассмотренный ранее — использование Event Hub и маршрутизации сообщений.

  1. На Azure Portal в Create Resources -> Databases -> Azure Cosmos DB -> создаем базу данных и коллекцию «TermoSensorDBCollection».
  2. Создаем Event Hub. На Azure Portal:  Create a resource -> Internet of Things -> Event Hub.
    1. Задаем имя ServiceBus (Name). В моем случае [schneidereq]. Имя общее для всех, так что его нужно выбирать уникальным.
    2. Pricing Tier — Basic или Standard на выбор.
    3. Resource group — в моем случае [SchneiderEq].
    4. Location — West Europe (сервера поближек России).
  3. Переходим в созданный Event Hubs Namespace -> Event Hub -> +Event Hub -> Задаем имя (Name). В моем случае [termosensoreventhub].
  4. Создаем Stream Analitycs Job. На Azure Portal: Create a resource -> Stream Analitycs Job.
  5. В созданном Stream Analytics Job заходим в Inputs -> Add stream input:
    1. Input alias — TermoSensorInput.
    2. Service Bus Namespace — созданный namespace. В моем случае  [schneidereq].
    3. Event Hub name -> Use existing -> В моем случае [termosensoreventhub]
    4. Сохраняем — Save.
  6. В Stream Analytics Job заходим в Outputs -> Add:
    1. Output alias -> TermoSensorOutput.
    2. Select Cosmos DB from your subscriptions.
    3. Database -> Use existing.
    4. Collection name pattern — вводим созданную ранее (в моем случае [TermoSensorDBCollection]).
    5. Сохраняем — Save.
  7. В Stream Analytics Job заходим в Query и задаем простой запрос:
    SELECT
        *
    INTO
        TermoSensorOutput
    FROM
        TermoSensorInput
  8. Переходим в All resources -> созданный IoT Hub -> раздел Messaging -> Message routing -> Add:
    1. В Endpoint нажимаем Add -> Event hubs, чтобы добавить custom endpoint.
    2. Задаем Endpoint name. В моем случае [TermoSensorEndpoint].
    3. Выбираем созданный Event Hub.
    4. Сохраняем.
  9. В routing query вводим правило аналогичное условию WHERE в предыдущей статье:
    $connectionDeviceId = 'TermoSensorWithABB'

  10. Сохраняем.
  11. Запускаем созданный Stream Analytics Job.
  12. Стартуем передачу данных с термодатчика.
  13. Заходим в созданный Event Hub, чтобы убедится, что данные поступают.
  14. Переходим в CosmosDB. Там в выбранной коллекции также появляются данные.
  15. Далее CosmosDB подключается к PowerBI. На эту тему есть достаточно подробная статья, поэтому нет смысла рассматривать этот момент отдельно.

Эксперимент

Если включить Stream Analytics Job фильтрующий сообщения от «TermoSensorWithABB» в предыдущем уроке, то видно, что сообщения до него не доходят.

У маршрута есть параметр Enable/Disable. Посмотрим, как изменится передача сообщений, если отключить маршрут. Azure Portal -> Выбираем ваш IoT Hub -> Раздел «Messaging» -> Message route -> Кликаем на вашем маршруте -> Enable route -> Disable -> И сохраняем «Save».

Event Hub after the message route had switched off.

Stream Analytics Job when the route had switched to disable.

Stream Analytics Job when the route had switched to disable.

Видно, что сообщения от термодатчика перестали поступать на Stream Analytics Job. Логично, что раз маршрут, который перехватывал все обращения удовлетворяющие критерию:

$connectionDeviceId = 'TermoSensorWithABB'

отключился, то при работающем Stream Analytics Job у которого идет фильтрация по такому-же критерию в WHERE данные должны начать поступать.

Stream Analytics Job with QUERY when the message route had switched to disable

Так и есть. После отключения маршрута сообщения начинают поступать на Stream Analytics Job у которого в QUERY прописан запрос:

SELECT
    *
INTO
    TermoSensorStreamAnalyticsOutput
FROM
    TermoSensorStreamAnalyticsInput
WHERE TermoSensorStreamAnalyticsInput.IoTHub.ConnectionDeviceId = 'TermoSensorWithABB'

Всё работает. 🙂

Spread the love
Запись опубликована в рубрике IT опыт, IT рецепты с метками , , . Добавьте в закладки постоянную ссылку.