Опубликовать сообщение в определенной подпапке - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь использовать Google Cloud Platform для создания небольшого проекта IoT.

Я создал реестр и устройство в разделе «IoT Core» и подключил реестр к теме по умолчанию.Я также указал три подпапки для этой темы: «события», «config» и «status».Теперь я хотел бы подключить «облачную функцию» для входящих сообщений, но не могу найти, как настроить отдельную подпапку, чтобы отслеживать, как публиковать сообщения на них в разделе «Cloud Pub / Sub».

Вся документация говорит об отдельных темах, так что ... Мне не хватает какой-то базовой концепции о том, как это работает?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Нужно сделать резервную копию шага.Что вы пытаетесь сделать с различными подпапками?Это может быть неправильным пониманием того, как происходит обмен данными с устройством в облаке и из него.

Итак, есть 3 темы MQTT, это события / config / состояние (не статус).Они НЕ отображаются в темах Pub ​​/ Sub.Каждый из них обрабатывается отдельно в IoT Core.

События - это устройство-> Облако, и они помещаются в тему публикации / подписки, которую вы указываете при создании реестра.Настройка подпапок - это разделение телеметрии с одного устройства на несколько мест для обработки.Так, например, у вас есть временные данные, которые вы хотите поместить в одну публикацию / подтему, и данные, которые вы хотите поместить в другую.Другой способ справиться с этим - прикрепить функцию к основному пабу / подтему, проанализировать телеметрию, а затем повторно выпустить сообщение паб / подпункт в разные места в зависимости от самой полезной нагрузки.

ConfigОблако-> устройство и инициируется вызовами в IoT Core Admin SDK.Если ваше устройство подписывается на тему / config / MQTT, то оно получит обратный вызов обработчика on_message клиента MQTT (точный код, конечно, зависит от используемой библиотеки), когда какой-либо внешний объект отправляет сообщение конфигурации в IoT Core для вашего устройства..

Состояние - device-> Cloud, но оно специально обрабатывается и не относится к какой-либо теме Pub / Sub.Результаты могут быть получены с помощью IoT Core Admin SDK.Это способ для устройства сообщать о своем состоянии, а затем внешним процессам / приложениям получать этот статус без необходимости обратного вызова самого устройства.Это особенно полезно, когда у вас есть устройства, которые не остаются подключенными, например, но вы все еще хотите иметь возможность выполнять действия, основанные на последнем известном состоянии.

Так что единственное, что вы можете использовать CloudФункции с является / события / тема.Для этого нужно развернуть облачную функцию и выбрать ловушку публикации Pub / Sub в качестве механизма запуска функции, а также указать тему Pub / Sub реестра IoT Core в качестве источника событий.Затем в любое время, когда ваше устройство публикует телеметрию в теме / events / MQTT, оно будет опубликовано в этой теме Pub / Sub (я знаю, что это сбивает с толку, потому что мы называем их обеими темами), и облачная функция срабатывает.

Надеемся,это проясняет, что происходит?Или я полностью пропустил вопрос?:)

0 голосов
/ 25 ноября 2018

Я считаю, что правильный способ настроить это - создать одну тему pubsub для каждой подпапки.Из базовой документации по облаку:

Устройства могут публиковать данные в отдельных темах Pub ​​/ Sub, указав подпапку в теме MQTT.Подпапка является подтемой после {device-id} / events.Например, если устройство публикует в теме MQTT / devices / {device-id} / events / alerts, подпапка представляет собой строку предупреждений.Эта подпапка должна быть настроена в поле eventNotificationConfigs.subfolderMatches ресурса реестра устройства с соответствующей темой Pub / Sub в поле eventNotificationConfigs.pubsubTopicName.Когда данные отправляются в подпапку, они публикуются в соответствующей теме публикации / подпапки.

https://cloud.google.com/iot/docs/how-tos/mqtt-bridge#publishing_telemetry_events_to_separate_pubsub_topics

...