Веб-Bluetooth получить сохраненные данные с устройства ГАТТ - PullRequest
0 голосов
/ 08 апреля 2019

Моя цель - получить данные, хранящиеся на устройстве.

Как устройство, которое измеряет температуру или что-то еще, и сохранить его в своей памяти.Мне нужно запросить все данные устройства через точку контроля доступа к записи (RACP).

  1. Первая мысль, чтобы достичь этого, была

    • получить характеристику

    • стартовые уведомления

    • записать код в дескриптор

    • получить все данные через eventListener

результат: выдает ошибку при использовании примеров запуска уведомлений:

https://googlechrome.github.io/samples/web-bluetooth/notifications-async-await.html https://bugs.chromium.org/p/chromium/issues/detail?id=664863

Следующей мыслью было не запускать уведомление, поскольку характеристика имеет тип INDICATE, WRITE.Так что думал о добавлении слушателя и записи в код дескриптора из документации устройства, которая гласит:

Код операции: 1 - Отчет о сохраненных записях

даже с удаленными startNotificationsстрока выдает ошибку, поэтому мой пример кода:

const mainService = 'my correct service uuid';
    const characteristicUUID1 = 'my correct char uuid';
    const characteristicUUID2 = 'my correct char uuid';
    const descriptorUUID = '00002902-0000-1000-8000-00805f9b34fb';
    let deviceCache = null;
    let serverCache = null;
    let serviceCache = null;
    let characteristicCacheA = null;
    let characteristicCacheB = null;
    let descriptorCache = null;

    try {
      deviceCache = await navigator.bluetooth.requestDevice({ filters: [{ name: 'my device' }] });

      console.log('Connecting to GATT Server...');
      serverCache = await deviceCache.gatt.connect();

      console.log('Getting Services...');
      serviceCache = await serverCache.getPrimaryService(mainService);

      console.log('Getting Characteristics A...');
      characteristicCacheA = await serviceCache.getCharacteristic(characteristicUUID1);

      console.log('Start Notifications A...');
      await characteristicCacheA.startNotifications();

      console.log('Getting Characteristics B...');
      characteristicCacheB = await serviceCache.getCharacteristic(characteristicUUID2);

      console.log('Start Notifications B...');
      await characteristicCacheB.startNotifications();

      console.log('Add event listener...');
      characteristicCacheA.addEventListener('characteristicvaluechanged', this.handleNotifications);

      console.log('Getting Descriptor...');
      descriptorCache = await characteristicCacheA.getDescriptor(descriptorUUID);

      console.log('Write value to descr...');
      await descriptorCache.writeValue(new Uint8Array([1]));


    } catch (error) {
      console.log(error.message, 'error');
    }

Ошибка с уведомлениями (с экспериментальными функциями chrome не выдает ошибку):

ошибка: сбой операции GATTпо неизвестной причине.

Ошибка с дескриптором:

writeValue () вызывается для объекта, занесенного в блок-лист, отмеченного как исключение-запись.

Также мое устройство запрашиваетПин, но сеть подключается, ничего не запрашивая.И поэтому, возможно, в нем говорится, что запись в дескриптор заблокирована.

Как обрабатывать ввод с помощью пин-кода - понятия не имею (как только я получил приглашение ввести пин-код после включения экспериментальных функций Chrome, не уверен, что он связан).1061 * Правильна ли моя логика?- не думаю.

Есть предложения?

Что я исследовал до сих пор?

  1. https://googlechrome.github.io/samples/web-bluetooth/
  2. https://www.oreilly.com/library/view/getting-started-with/9781491900550/ch04.html
  3. https://webbluetoothcg.github.io/web-bluetooth/

Редактировать: После прочтения этой статьи - https://medium.com/@devdevcharlie/experimenting-with-web-bluetooth-1f1176047ddd

Я думаю, что правильная логика должна быть, записать в команду характерные команды, которые вам нужны (как получить все данные).После этого найдите в документации на устройство правильную характеристику, отвечающую за эти данные, и запустите уведомления, добавьте EventListener и получите данные.

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

На данный момент chrome не может или имеет проблемы с обменом данными с защищенными характеристиками в Windows 10, в MacOS все работает отлично.Я опубликовал вопрос на Chrome Chrome Tracker, если кто-то хочет его посмотреть.https://bugs.chromium.org/p/chromium/issues/detail?id=960258#c6

0 голосов
/ 08 апреля 2019

Сбой вызова writeValue(), поскольку доступ к CCCD в черном списке .Вызов startNotifications() будет записывать в дескриптор по мере необходимости для включения уведомлений.

Нам нужно выяснить эту «неизвестную причину» для сбоя startNotifications().Какую операционную систему ты используешь?Пожалуйста, следуйте инструкциям для сообщения о веб-ошибках Bluetooth и зарегистрируйте проблему в трекере проблем проекта Chromium.

...