Google iot основной статус соединения

Я использую ядро ​​Google IOT с Mongoose OS. Я хотел обновить статус подключения устройства к firestore. Но я не могу найти событие, которое сообщает о состоянии соединения mqtt в pub/sub, например, когда устройство отключается или переподключается, т.е. если устройство отключено или нет.

Я застрял на этой проблеме в течение нескольких дней. Любая помощь будет оценена

3 ответа

Решение

Есть несколько значений, которые вы можете посмотреть, которые отслеживаются в метаданных конфигурации устройства, которые вы можете использовать, чтобы узнать, когда устройство в последний раз было в сети:

  1. Время последней отправки конфигурации - отправляется каждый раз, когда ваше устройство подключается / конфигурация опубликована
  2. Время последнего события - последний раз, когда с устройства отправлялось событие
  3. Last State Time - последнее время состояние было отправлено с устройства
  4. Время последнего пульса - последний раз, когда было отправлено MQTT-пульс

Для начала приведем пример использования API Explorer, который можно заполнить идентификатором проекта, регионом, реестром и устройством для запроса метаданных конкретного устройства.

В течение 1...3 вы можете управлять ими через диспетчер устройств и публикуя данные. MQTT пульс обновляется, если ваше устройство отправляет MQTT_PINGREQ сообщение в течение "периода проверки связи" без отправки других сообщений.

В любом случае, вы можете использовать любое из этих значений времени обновления, чтобы увидеть, когда устройство в последний раз работало или работало. Вы можете запрашивать состояния ваших устройств после перечисления устройств в реестре и можете периодически обновлять RTDB Firebase, если вы именно так хотите сообщить (например, с помощью AppEngine TaskQueue). Обратите внимание, что вы также можете просто получить эти "последние подключенные" значения из Google Cloud Console.

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

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

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

Там в настоящее время нет способа сделать это, что я смог найти (через год после этого оригинального сообщения). Я также разместил здесь вопрос на SO по этому вопросу, с более подробной информацией и ссылкой на пример кода, который я должен был использовать для обработки этого: автономное событие устройства Google Core IoT или состояние подключения

Платформа IoT AWS публикует сообщения по специальной теме MQTT (с префиксом $aws) когда ваше устройство подключается / отключается. Вы можете легко использовать их для мониторинга этих событий - однако, вы должны знать, что протокол MQTT разработан таким образом, чтобы быть устойчивым к плохим сетевым условиям, и брокер на стороне AWS, вероятно, не думает, что отключение клиента - это не проблема, Брокер ожидает, что клиент просто переподключится и поставит в очередь сообщения на мгновение в течение этого процесса (что может быть большой проблемой для микроконтроллера).

Все сказанное, темы AWS, которые вы бы посмотрели:

$aws/events/presence/connected/{clientId}

а также

$aws/events/presence/disconnected/{clientId}

и документация для этих (и других) событий жизненного цикла находится по адресу: https://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html

Другие вопросы по тегам