Состояние отчета Всегда возвращать 404 после SYNC

Я могу пройти Test Suite, но внезапно я получаю ошибку 404 при первом состоянии отчета после SYNC, что вызывает сбой привязки учетной записи. Я использовал валидатор, предоставленный на портале Smart Home Developer, для моего ответа SYNC, который не вызывает проблем. И я обнаружил, что если ОСТАНОВИТЬ, а затем ЗАПУСТИТЬ свой экземпляр на консоли GCP, эта проблема исчезнет, ​​но вернется после нескольких раз привязки и отмены привязки учетной записи.

SYNC JSON объект:

{
  "requestId": "8044981777755038463",
  "payload": {
  "agentUserId": "123456789",
  "devices": [
    {
      "id": "123-Fan",
      "type": "action.devices.types.FAN",
      "traits": [
        "action.devices.traits.OnOff",
        "action.devices.traits.FanSpeed"
      ],
      "name": {
        "defaultNames": [
          "Simple Connect Fan"
        ],
        "name": "Livingroom Fan",
        "nicknames": [
          "Simple Connect Fan"
        ]
      },
      "willReportState": true,
      "attributes": {
        "availableFanSpeeds": {
          "speeds": [
            {
              "speed_name": "S0",
              "speed_values": [
                {
                  "speed_synonym": [
                    "stopped",
                    "speed 0"
                  ],
                  "lang": "en"
                }
              ]
            },
            {
              "speed_name": "S1",
              "speed_values": [
                {
                  "speed_synonym": [
                    "low",
                    "speed 1"
                  ],
                  "lang": "en"
                }
              ]
            },
            {
              "speed_name": "S2",
              "speed_values": [
                {
                  "speed_synonym": [
                    "medium",
                    "speed 2"
                  ],
                  "lang": "en"
                }
              ]
            },
            {
              "speed_name": "S3",
              "speed_values": [
                {
                  "speed_synonym": [
                    "high",
                    "speed 3"
                  ],
                  "lang": "en"
                }
              ]
            }
          ],
          "ordered": true
        },
        "reversible": false
      },
      "deviceInfo": {
        "manufacturer": "company",
        "model": "test"
      },
      "customData": {
        "speedType": 3
      }
    },
    {
      "id": "123-Light",
      "type": "action.devices.types.LIGHT",
      "traits": [
        "action.devices.traits.OnOff",
        "action.devices.traits.Brightness"
      ],
      "name": {
        "defaultNames": [
          "Simple Connect Light"
        ],
        "name": "Livingroom Light",
        "nicknames": [
          "Simple Connect LIGHT"
        ]
      },
      "willReportState": true,
      "attributes": {
        "commandOnlyOnOff": false
      },
      "deviceInfo": {
        "manufacturer": "company",
        "model": "test"
      }
    }
  ]
}
}

Объект JSON состояния отчета:

{
  "requestId": "11859327534344019896",
  "agentUserId": "123456789",
  "payload": {
    "devices": {
      "states": {
        “123-Fan": {
          "online": true,
          "on": false,
          "currentFanSpeedSetting": "S3"
        },
        “123-Light": {
          "online": true,
          "on": false,
          "brightness": 70
        }
      }
    }
  }
}

person Fei Deng    schedule 11.05.2020    source источник
comment
Через какое время после SYNC вы вызываете состояние отчета?   -  person Nick Felker    schedule 12.05.2020
comment
У меня задержка в 15 секунд после SYNC   -  person Fei Deng    schedule 12.05.2020
comment
Это может быть слишком короткой задержкой.   -  person Nick Felker    schedule 12.05.2020
comment
Домашняя служба отправит ЗАПРОС после начальной синхронизации для сбора состояний устройства и возвращает 404 для состояния отчета. Но это происходит только в это время, остальные запросы QUERY, которые запускаются пользователями, не будут иметь этой проблемы для следующего состояния отчета.   -  person Fei Deng    schedule 12.05.2020


Ответы (1)


Я получаю сообщение об ошибке 404 при первом сообщении о состоянии после SYNC, что приводит к сбою привязки учетной записи.

Эти две вещи не следует связывать напрямую. Процесс связывания учетной записи должен быть успешным, если:

  1. Google успешно получает токен доступа OAuth
  2. Первоначальное SYNC намерение выполнено успешно
  3. Первоначальное QUERY намерение выполнено

Независимо от того, можете ли вы успешно вызвать состояние отчета, не должно вызывать не удалось установить связь с аккаунтом. Это произошло из-за ошибки на одном из вышеуказанных шагов.

Что касается самой ошибки 404, скорее всего, это проблема времени. Пока процесс связывания не завершен, agentUserId и соответствующие идентификаторы устройств еще не записываются в Home Graph. Если вызов API поступит слишком рано, это приведет к ошибке 404.

Однако для процесса привязки учетной записи в этом нет необходимости. Первоначальное QUERY намерение, отправленное во время вышеуказанного потока, выполняет тот же конец, заполняя начальное состояние в Home Graph. Наше руководство по состоянию отчета было недавно обновлено, чтобы отразить это изменение:

После начального SYNC для устройства платформа отправляет запрос QUERY, который собирает состояние устройства для заполнения Home Graph. После этого Home Graph сохраняет только то состояние, которое отправлено с Report State.

Вы должны определить, сможете ли вы добиться успешного связывания учетной записи без первоначального вызова Report State.

person devunwired    schedule 12.05.2020
comment
спасибо за подробную информацию, я согласен, что привязка учетной записи не требует первого прохождения отчета о состоянии на основе последних обновлений. Меня больше всего беспокоит непоследовательность действий. Эта проблема возникает после нескольких успешных попыток привязки учетной записи. Я могу получить успешную синхронизацию и следующий ЗАПРОС, как вы упомянули выше, но сообщение Не удалось обновить настройку. Выскакивает проверьте ваше соединение, иногда устройства подключаются успешно. - person Fei Deng; 13.05.2020
comment
Видите ли вы что-нибудь в своих журналах ошибок проекта, когда это происходит? Что-то вроде OPEN_AUTH_FAILURE, DEADLINE_EXCEEDED или ошибка анализа ответов о намерениях? - person devunwired; 13.05.2020