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

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

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

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

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

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

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

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

Мой ответ на этот SO-вопрос показывает, как мне пришлось написать более 100 строк кода только для того, чтобы создать функцию firebase, чтобы проверить, подключено ли устройство (но оно по-прежнему не обрабатывает офлайн-события и является просто хаком для чего-то, что должно быть родным ЛЮБОМУ провайдеру IoT!): /questions/6762815/opoveschenie-google-iot-na-kazhdoe-ustrojstvo-s-pomoschyu-stackdriver/6762823#6762823

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

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

2 ответа

Решение

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

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

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

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

Экспортер публикует полный 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. Если вам нужна немедленная проверка доступности устройства, вы можете отправить команду на это устройство.

Лучшее решение, я думаю, это то, что

      We need 3 things
  cloud sheduler ,
 and 2 cloud functions 

Первой функцией будет ответ @devunwired, но момент

      // ...write updated state to Firebase... schedule a second function to trigger in 2-3 min (let device to recconect)

вторая функция отправит команду на устройство

      if the device resposne to command
     if stored status is connected dont do nothing 
     else if the stored status is disconnected then update the status to connected and do what ever you want maybe email 
else 
     if stored status is disconnected dont do nothing 
     if stored status is connected change the status alert by email or something 
Другие вопросы по тегам