Запрос "beaconinfo.getforobserved" после задержки (2-3 дня) с момента получения пакетов от BLE, маяк возвращает НЕТ данных и расшифровывает данные TLM

Я использую маяки iBKS 105 BLE от Accent Systems. Я получаю пакеты данных Eddystone, как указано в их примере кода на GitHub. Маяки зарегистрированы на Google Proximity Beacon Dashboard моего проекта.

Основные поля данных, которые меня интересуют:

- TimestampNanos
- Advertised ID (EID)
- EncryptedTLMData, Salt, IntegrityCheck

Объявленные данные зашифрованы, поэтому для получения данных вложения маяка я использую HTTP-запрос beaconinfo.getforobserved API Google Bexon API.

21 марта 1818 года я получил следующие данные от маяка:

"timestampNanos" : 201887331447701,
"advertisedEID" : "326846421e0df00d",
"telemetry" : {
    "encryptedDataTLM" : "39769a4b12d45bee0457e83a",
    "salt" : "37fa",
    "integrityCheck" : "01e6"
}

Преобразование его в кодировку "base64" в соответствии с требованиями конечной точки:

{
    "observations": [{
        "advertisedId": {
            "type": "EDDYSTONE_EID",
            "id": "MmhGQh4N8A0="
        },
        "telemetry": "IAE5dppLEtRb7gRX6Do3+gHm",
        "timestampMs": "8367-07-23T03:47:27.701000000Z"
    }],
    "namespacedTypes": ["*"]
}

В тот день, когда я немедленно запросил запрос "getforobserved", он корректно вернул вложения маяков, сохраненные на панели инструментов. Но когда я делаю запрос с использованием тех же параметров сегодня (24 марта), никакие данные не возвращаются. Я не менял никаких вложений, и маяк все еще отмечен как "АКТИВНЫЙ" на приборной панели.

  • Что является причиной этого?
  • Как мы можем запросить конечную точку "getforobserved" для кэшированных наблюдений, если в это время нет подключения к Интернету?
  • Можно ли дешифровать рекламируемые EID локально на устройстве Android?
  • Конечная точка getforobserved не возвращает дешифрованные данные TLM. Как мы можем расшифровать данные TLM с помощью API маяка Google Proximity, чтобы получить оценку срока службы батареи?

Любая помощь или указатели будут с благодарностью.

2 ответа

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

Вся эта система опирается на точные часы в маяке, поэтому зашифрованный идентификатор маяка синхронизируется с часами на стороне распознавателя (по сути, это серверы Google). Если часы на маяке смещаются слишком далеко, разрешение перестает работать. Это вероятно то, что вы видите. Вы можете подтвердить это, перерегистрировав маяк, чтобы увидеть, начинает ли работать разрешение снова. Если это действительно проблема, вам необходимо уточнить у производителя маяка вопрос о стабильности часов и о том, как долго они должны разрешиться после регистрации. Я надеюсь, что это будет сделано в течение одного дня! Возможно, у вас плохой юнит?

Хотя существует возможность создания распознавателя, независимого от системы Google (я сам создал его для тестирования на этапе предварительной версии Edystone-EID), я не знаю никаких альтернатив, доступных для общего использования. Теоретически вы можете создать его в своем приложении, но опять же, я не знаю ни о какой общедоступной библиотеке, которая делает это.

Итог: вам нужно будет использовать серверные распознаватели Google или создать свои собственные.

Если вы используете сервер Google для регистрации пакета Eddystone-EID, необходимо учитывать, что он работает со строгим временем, маяк и сервер используют одно и то же значение тактового сигнала и необходимы для его одновременного изменения (допускается задержка в секундах или минутах, но не намного). Для правильного разрешения EID на сервере Google необходимо использовать последние значения EID (рассчитанные с учетом фактических часов) и интернет-соединение. Если вы используете значения EID три дня назад, сервер Google не сможет правильно определить EID. Это не означает, что Google Server не допускает задержку дней в EID, но повторная синхронизация может длиться часами или днями. Эта проблема не имеет ничего общего с дрейфом часов маяка.

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