Событие или статус подключения устройства Google Core IoT в автономном режиме

Кто-нибудь знает простой способ вызвать событие, когда устройство в Google Core IoT отключается? До того, как я переключился на реализацию Интернета вещей Google, это было очень легко обрабатываться путем запуска события при отключении MQTT, но похоже, что у Google нет простого способа сделать это.

Кто-нибудь знает, планируется ли что-то для этого?

Кто вернулся, мне нужно почесать, чтобы они увидели, что что-то подобное является основным требованием для управления устройствами IoT!

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

Состояние подключения устройства (онлайн / офлайн) к концентратору Auzure iot

Мне жаль, что я не знал об этом, прежде чем писать весь свой код и реализовывать свою настройку с использованием платформы Google IoT, я думаю, что я виноват в том, что предположил что-то настолько простое, и это должно быть стандартным для Будут доступны устройства Интернета вещей.

Как вы собираетесь конкурировать с другими провайдерами IoT, если вы не можете проводить даже базовые офлайн / онлайн-мероприятия ?!

Мой ответ на этот вопрос SO показывает, как мне пришлось написать более 100 строк кода только для создания функции firebase, чтобы проверить, подключено ли устройство к сети (но это все еще не обрабатывает автономные события и является просто взломом для чего-то, что < strong> должен быть встроен в ЛЮБОЙ поставщик услуг IoT!): https://stackoverflow.com/a/54609628/378506

Я надеюсь, что кто-то еще придумал способ сделать это, поскольку я провел много дней в поисках документации SO, Google, Google Core IoT и до сих пор ничего не нашел.

Даже если бы MQTT Last Will поддерживался, мы могли бы это сделать, но даже это НЕ ПОДДЕРЖИВАЕТ Google (https://cloud.google.com/iot/docs/requirements) ... давай, ребята!


person sMyles    schedule 09.02.2019    source источник
comment
@FrankvanPuffelen, хорошо, но это характерно для firebase, мне нужно что-то подобное для устройств Google Core IoT   -  person sMyles    schedule 10.02.2019
comment
Используя ваш другой вопрос SO, я предполагаю, что ваше устройство использует Firebase. Я не разработчик Java, поэтому я не отвечал, но я бы использовал любой поток событий или канал уведомлений, который у вас есть (в JS это был бы rx Observable или Subject), и написал бы поставщик событий на основе онлайн / офлайн. штат?   -  person Dennis Smolek    schedule 18.02.2019
comment
@DennisSmolek, но проблема в том, что удаление firebase не имеет ничего общего с этим ... нет способа определить, когда устройство переходит в автономный режим - я ссылался на Firebase, поскольку это то, что я использовал для ручной проверки состояния устройства, сравнивая временные метки для устройство (или отправка команды и проверка ответа)   -  person sMyles    schedule 19.02.2019
comment
Поэтому мне в основном приходится запускать эту функцию ВСЕГДА, когда мое приложение загружается или изменяется страница, чтобы убедиться, что устройство не отключено. Даже если бы они просто добавили LWT в реализацию MQTT, я мог бы придумать способ запустить pub / sub и обновить базу данных, чтобы пометить ее как офлайн ... но прямо сейчас у Google НИЧЕГО нет для этого, и я просто не могу понять, почему они не   -  person sMyles    schedule 19.02.2019


Ответы (1)


У вашего облачного проекта есть доступ к отдельным событиям подключения / отключения MQTT, но в настоящее время они отображаются только в журналах Stackdriver. В облачной консоли вы можете создать экспортер, который будет публиковать эти события в теме Pub / Sub:

  1. Посетите журналы Stackdriver в Cloud Console.
  2. Введите следующий расширенный фильтр:

    resource.type="cloudiot_device"
    jsonPayload.eventType="DISCONNECT" OR "CONNECT"
    
  3. Нажмите СОЗДАТЬ ЭКСПОРТ.

  4. Введите значение для Имя приемника.
  5. Выберите Cloud Pub / Sub для Sink Service.
  6. Создайте новую тему Cloud Pub / Sub в качестве места назначения

Экспортер публикует полный LogEntry, который затем можно потребляют из облачной функции, подписанной на ту же тему Pub / Sub:

export const checkDeviceOnline = functions.pubsub.topic('online-state').onPublish(async (message) => {
  const logEntry = JSON.parse(Buffer.from(message.data, 'base64').toString());
  const deviceId = logEntry.labels.device_id;

  let online;
  switch (logEntry.jsonPayload.eventType) {
    case 'CONNECT':
      online = true;
      break;
    case 'DISCONNECT':
      online = false;
      break;
    default:
      throw new Error('Invalid message type');
  }

  // ...write updated state to Firebase...

});

Обратите внимание, что в случаях потери связи задержка между недоступностью устройства и фактическим DISCONNECT событием может быть равной интервалу поддержания активности MQTT. Если вам нужна немедленная проверка доступности устройства, вы можете отправить на это устройство команду.

person devunwired    schedule 20.02.2019
comment
Devunwired - вы, сэр, находка! Спасибо, спасибо, спасибо, спасибо! Отлично работает, это потрясающе !! - person sMyles; 22.02.2019
comment
Для тех, кто приходит сюда, пытаясь решить проблему, в devunwired отсутствует шаг. Вы должны включить как минимум ведение журнала информации для своего реестра IoT Core. Перейдите в IoT Core ›Реестры› [ваш реестр] ›Редактировать реестр› Выберите уровень информационного журнала ›Нажмите« Сохранить ». - person calumb; 06.03.2019
comment
Иногда в журналах Stackdriver не поддерживается порядок. Если за DISCONNECT следует событие CONNECT, иногда Stackdriver регистрирует сначала CONNECT, а затем DISCONNECT. Статус Firebase не соответствует фактическому состоянию. Есть идеи избежать этого? - person N.F.; 05.10.2020