Состояние подключения вещи в AWS IoT ненадежное - PullRequest
1 голос
/ 02 июля 2019

Мне нужно получить достоверное состояние устройств IoT.

Теперь у меня есть Lambda, подключенный к SELECT * FROM '$aws/events/presence/#' событиям в IoT.

Но я не могу получить надежный статус устройства в случаекогда подключенное устройство было отключено и подключено обратно в течение ~ 40 секунд.Результат этого сценария - события в следующем порядке: 1. Подключено - вскоре после повторного подключения устройства 2. Отключено - через ~ 40 секунд.

Похоже, сообщение disconnected не сбрасывается, когда устройствов любом случае подключился обратно и отправил сигнал после истечения времени ожидания подключения.

Я нашел обходной путь - запрос подключения устройства из AWS_Things индекса IoT.На самом деле, я также получаю предыдущее состояние подключения, но у него есть поле метки времени.Затем я просто сравниваю текущую метку события.time с меткой времени индекса и, если она превышает 30 секунд, я молча отбрасываю событие disconnected.Но этот подход ненадежен, потому что я все еще могу получить неправильное поведение при более быстром переключении устройства - с интервалом 5 секунд.Это неприемлемо для моего проекта.

Возможно ли использовать события IoT для решения моей проблемы?Я не хотел бы идти в опрос устройства индекса ..

1 Ответ

0 голосов
/ 17 июля 2019

Ну, на данный момент я просто использую StepFunction, связанную с событием SELECT * FROM '$aws/events/presence/#', которое проверяет фактическое состояние вещи после 10-секундной задержки:

step function diagram

{
  "StartAt": "ChoiceEvent",
  "States": {
    "ChoiceEvent": {
      "Type": "Choice",
      "Choices": [
          {
            "Variable": "$.eventType",
            "StringEquals": "disconnected",
            "Next": "WaitDelay"
          }
      ],
      "Default": "CheckStatus"
    },
    "WaitDelay": {
      "Type": "Wait",
      "Seconds": 30,
      "Next": "CheckStatus"
    },
    "CheckStatus": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:xxxxxxx:function:connectivity-check",
      "End": true
    }
  }
}

Лямбда connectivity-check просто проверяет фактическое состояние вещи в реестре IoT, когда eventType равен disconnected

...