IoT Core публикует в теме в другом реестре

Я пытаюсь опубликовать сообщение с устройства в одном реестре на устройство в другом реестре.

Я выяснил, что вы можете публиковать только темы в реестре, в котором находится ваше устройство, и если вы попытаетесь опубликовать тему в другом реестре, вы получите EOFException и отключитесь от сервера MQTT.

Поток, который я пытался использовать, заключается в том, что у меня есть registry мобильных устройств (телефонов), у которых есть свои собственные темы для работы, но они также должны связываться с hub registry, который взаимодействует с устройствами IoT (получает / обновляет информацию об устройстве), который также есть свои IoT registry

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

Нет ли возможности поддерживать связь между реестрами?

Каков «стандартный» способ связи между устройствами по разным темам, если вы не можете выполнять перекрестный реестр?


person tyczj    schedule 15.03.2018    source источник


Ответы (1)


Вы можете достичь своей цели, используя облачные функции, которые обрабатывают данные, полученные через Cloud IoT Core и PubSub в реестре A, а затем отправляя эти данные в виде сообщения конфигурации, выполняющего устройство в реестре B.

Поток будет примерно таким: Устройство 1> MQTT Server Registry A> Pub / Sub Topic Registry A> Cloud Functions> HTTP Config message to> Registry B> MQTT Server Registry B> Devices 2

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

Ссылка на руководство: https://medium.com/google-cloud/gps-cellular-asset-tracking-using-google-cloud-iot-core-firestore-and-mongooseos-4dd74921f582

Часть кода, которая отправляет сообщения конфигурации, но в моем коде реестр является постоянной переменной: https://github.com/alvarowolfx/asset-tracker-gcp-mongoose-os/blob/master/functions/index.js#L22

Надеюсь, это поможет вам.

person Alvaro Viebrantz    schedule 15.03.2018
comment
Я наткнулся на ваш учебник около месяца назад, но еще не прочитал его, я обязательно это сделаю. Однако в чем смысл реестров, если вы не можете общаться между ними, это кажется очень ограниченным, и я не вижу сценария, в котором вы хотели бы / нуждаться в этом - person tyczj; 16.03.2018
comment
Но ни в коем случае нельзя разговаривать между устройствами, использующими Cloud IoT Core. Чтобы отправлять сообщения с одного устройства на другое, вы должны следовать тем же путем, который я сказал. Единственный способ для устройства получить сообщение - это сообщения конфигурации. Если вы попытаетесь опубликовать сообщение в теме другого устройства напрямую, вы получите отказ в разрешении, только если вы сохраните сертификаты для подключения к темам обоих устройств, но это не имеет особого смысла. - person Alvaro Viebrantz; 16.03.2018
comment
Ах, так что я не могу создавать свои собственные темы? Кажется, я могу публиковать только на device/{deviceId}/events, и я могу подписаться только на /devices/{deviceId}/config, и я действительно вижу это в вашем примере, так что это единственные 2 темы, на которые вы можете подписывать / публиковать? - person tyczj; 16.03.2018
comment
Да, вы не можете создать свою собственную тему, но вы можете использовать подпапки после темы событий. Вы можете публиковать только в своем собственном дереве устройств, как вы упомянули (device/{deviceId}/events), а также подписываться только на тему конфигурации вашего собственного устройства. cloud.google.com/iot/docs/how-tos/ Из любопытства в AWS IoT Shadow тоже есть такое ограничение. - person Alvaro Viebrantz; 17.03.2018