Я только начал использовать Bluetooth и хочу считывать результаты измерения состава тела со шкалы (модель: adeVital Analysis BA 1401) через Bluetooth.
Когда я настроил свой iPhone как центральный и подключил его к весам (это CBPeripheral), я могу прочитать информацию о весах устройства, такую как номер версии оборудования, производитель и т. Д. Я не могу получить фактические данные измерений.
Я перебрал все сервисы и характеристики и установил флаг уведомления.
[peripheral setNotifyValue:YES forCharacteristic:aCharacteristic]
для каждой характеристики. И метод делегата
- (void) peripheral:(CBPeripheral *)peripheral didUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error {
вызывается без ошибок. Когда я проверяю обновленное периферийное устройство, я обнаруживаю следующее:
<CBCharacteristic: 0x1740949b0, UUID = 8A82, properties = 0x20, value = <a1014711 f3000000 00000000 00000000 00000000>, notifying = YES>
Все это происходит при включении весов (еще ничего не измерив). Теперь, когда я встаю на весы и измерение завершено, отображается значок Bluetooth, указывающий на передачу данных, однако приложение iOS не получает никаких уведомлений. Что мне не хватает?
Итак, вкратце: периферийное устройство подключается к центральному и обновляет характеристику до, которую оно измеряет, но после этого больше никаких уведомлений не появляется.
Может ли значение в обновленной характеристике CBC быть UUID для службы, на которую мне придется каким-то образом подписаться, чтобы получить фактические данные?
Надеюсь, кто-нибудь сможет мне помочь здесь
РЕДАКТИРОВАТЬ:
Поскольку это может быть актуально, вот услуги и характеристики, которые я получаю:
Services:
"<CBService: 0x17407dc40, isPrimary = YES, UUID = Device Information>",
"<CBService: 0x174070f80, isPrimary = YES, UUID = 7802>"
Characteristics
"<CBCharacteristic: 0x1740959a0, UUID = Serial Number String, properties = 0x2, value = (null), notifying = NO>",
"<CBCharacteristic: 0x174095900, UUID = Hardware Revision String, properties = 0x2, value = (null), notifying = NO>",
"<CBCharacteristic: 0x1740952c0, UUID = Firmware Revision String, properties = 0x2, value = (null), notifying = NO>",
"<CBCharacteristic: 0x1740958b0, UUID = Manufacturer Name String, properties = 0x2, value = (null), notifying = NO>",
"<CBCharacteristic: 0x174095860, UUID = Software Revision String, properties = 0x2, value = (null), notifying = NO>"
"<CBCharacteristic: 0x170095ea0, UUID = 8A21, properties = 0x20, value = (null), notifying = NO>",
"<CBCharacteristic: 0x170095e50, UUID = 8A22, properties = 0x20, value = (null), notifying = NO>",
"<CBCharacteristic: 0x1700952c0, UUID = 8A20, properties = 0x2, value = (null), notifying = NO>",
"<CBCharacteristic: 0x170095e00, UUID = 8A81, properties = 0x8, value = (null), notifying = NO>",
"<CBCharacteristic: 0x170095db0, UUID = 8A82, properties = 0x20, value = (null), notifying = NO>"
РЕДАКТИРОВАТЬ 2:
CBCharacteristics имеет следующие свойства:
8A20 = Read
8A21 = Indicate
8A22 = Indicate
8A81 = Write
8A82 = Indicate
все остальные свойства - BOOL NO
Когда я включаю уведомления для 8A21, 8A22 и 8A82, я получаю NSData от 8A82 в самом начале, когда шкала включена (так что это не может быть измерением в этой точке). Полагаю, актуальные данные измерений обновляются по характеристике 8А21. Однако он не уведомит моего делегата, и я не могу понять, почему.
Просматривая системный журнал, вы можете увидеть, что официальное приложение производителя выводит журнал следующим образом:
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = receive push data(<a1018b3b 02000000 00000000 00000000 00000000>),with command(a1), from characteristic(8A82)
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = receive randomnumber (37456641)
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = next step is :operating_receive_random_number
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = next step is :operating_write_xor_results
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = write command with data:<200eff57 c5>
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = write command data((null)) to characteristic(8A81)
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = write success with status - operating_write_xor_results
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = next step is :operating_write_utc_time
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = write command with data:<02033b8b 0b>
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = write command data((null)) to characteristic(8A81)
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = write success with status - operating_write_utc_time
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = next step is :operating_write_disconnect
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = write command with data:<22>
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = write command data((null)) to characteristic(8A81)
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = write success with status - operating_write_disconnect
Feb 20 14:19:49 i6S lifesensehealth1_1[4163]: message = next step is :operating_uploaded_results_process
0x181B
(состав тела), ни0x181D
(весы). Дополнительная информация: при использовании официального приложения производителя необходимо выполнить сопряжение (InApp) шкалы перед считыванием ее значений. Возможно ли / вероятно, что для связи с весами необходимо обменять privateKey, хотя связь BLE не помечена как зашифрованная? - person stm   schedule 07.12.2014