从“Accu-Chek Aviva Connect”BG 仪表收集数据的 iOS 应用程序。 (蓝牙低功耗)

Posted

技术标签:

【中文标题】从“Accu-Chek Aviva Connect”BG 仪表收集数据的 iOS 应用程序。 (蓝牙低功耗)【英文标题】:iOS app that collects data from "Accu-Chek Aviva Connect" BG meter. (Bluetooth Low Energy) 【发布时间】:2016-10-23 22:15:40 【问题描述】:

我正在尝试创建一个从 Accu-Chek Aviva Connect 收集数据的 ios 应用。

为了与 BG 仪表配对,我向 Record Access Control Point Characteristic 发送写入请求:

- (void)peripheral:(CBPeripheral *)aPeripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error 

    if ([service.UUID isEqual:[CBUUID UUIDWithString:@"1808"]]) 
        for (CBCharacteristic *aChar in service.characteristics) 

            // Read Glucose Measurement...

            // Read Glucose Measurement Context...

            // Read Glucose Feature...

            // Read Date Time...

            // Read Record Access Control Point
            if ([aChar.UUID isEqual:[CBUUID UUIDWithString:@"2A52"]]) 
                [aPeripheral readValueForCharacteristic:aChar];
                [aPeripheral setNotifyValue:YES forCharacteristic:aChar];

                uint8_t bytes[] = 0x04, 0x01, 0x00;
                NSData *data = [NSData dataWithBytes:(void*)&bytes length:sizeof(bytes)];

                [aPeripheral writeValue:data forCharacteristic:aChar type:CBCharacteristicWriteWithResponse];
            

        
    

在 iPhone 上,我看到一个 UIAlert,其中包含一个输入安全码的字段。我还能将 iPhone 与 Accu-Chek Aviva Connect 配对。但是下次我向 Record Access Control Poin 特征(设备断开连接后)发送一些写入请求时,我得到 “错误:身份验证不足” 并且 iPhone 上没有 UIAlert。

我觉得我做错了一切。

我想从蓝牙设备的日志中读取记录。 AFAIU 我将字节写入读取记录访问控制点 ([aPeripheral writeValue:data forCharacteristic:aChar type:CBCharacteristicWriteWithResponse];) 并在 peripheral:didWriteValueForCharacteristic:error: 中得到答案。但我做不到,因为“错误:身份验证不足”挡住了我的路!

【问题讨论】:

您应该发布抛出“身份验证不足”的代码。我很好奇它是来自iOS还是设备本身?此外,Aviva Connect API 是在哪里描述或找到的?谷歌并不容易...... Accu-Chek 没有官方文档。但它使用官方蓝牙葡萄糖服务:bluetooth.com/specifications/gatt/… 如果您已配对设备并输入了 PIN,则该设备应显示在“设置”->“蓝牙.我的设备”中的蓝牙设备列表中。是吗? 【参考方案1】:

您需要通过身份验证才能向 BG 仪表发出写入请求。身份验证不足意味着您尝试在未经身份验证的情况下发出请求。您不能只是连接然后写入与医学相关的特征。

检查您是否真的发出了身份验证请求(这也需要输入 PIN 码)。如果是,请检查 PIN 是被接受还是被拒绝。

【讨论】:

【参考方案2】:

使用 Accu-Chek Aviva Connect 的方法是通过转到 SettingsWirelessPairingPair Device 进行首次配对。 然后你会看到一个带有数字代码的屏幕和一条消息:“在设备上输入代码”

在 iPhone 上,您发现 Accu-Chek 设备并将值写入读取记录访问控制点特征。例如请求一条记录数:

- (void)peripheral:(CBPeripheral *)aPeripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error 

    if ([service.UUID isEqual:[CBUUID UUIDWithString:@"1808"]]) 
        for (CBCharacteristic *aChar in service.characteristics) 

            // Read Record Access Control Point
            if ([aChar.UUID isEqual:[CBUUID UUIDWithString:@"2A52"]]) 
                [aPeripheral readValueForCharacteristic:aChar];
                [aPeripheral setNotifyValue:YES forCharacteristic:aChar];

                self.readAccessControlPointCharacteristic = aChar;

                NSMutableData *mutableData = [NSMutableData data];
                uint8_t opCode = 0x04; // Report number of stored records
                uint8_t operator = 0x01; // All records

                [mutableData appendData:[NSData dataWithBytes:(void*)&opCode length:sizeof(opCode)]];
                [mutableData appendData:[NSData dataWithBytes:(void*)&operator length:sizeof(operator)]];

                [aPeripheral writeValue:mutableData forCharacteristic:self.readAccessControlPointCharacteristic type:CBCharacteristicWriteWithResponse];
            

        
    

这会导致 iPhone 上的 UIAlertView 要求您输入代码,该代码显示在 Accu-Chek 屏幕上。当您这样做时,您的 iPhone 将与 Accu-Chek Aviva Connect 成功配对

现在。当您想从蓝牙设备读取所有记录时 - 您必须转到 My DataData TransferWireless → 如果您的 Accu-Chek 设备有很多配对,请选择您的 iPhone 名称。 注意: iPhone 必须正在扫描 BT 设备并自动连接到发现的设备。

蓝牙连接将建立,您可以从 iPhone 向蓝牙设备发送任何请求,而不会出现“错误:身份验证不足”

【讨论】:

以上是关于从“Accu-Chek Aviva Connect”BG 仪表收集数据的 iOS 应用程序。 (蓝牙低功耗)的主要内容,如果未能解决你的问题,请参考以下文章

如何从其他面板从 JTextField 获取输入

从PRISM开始学WPFMVVMViewModel?

在 python 中,为啥从数组读取比从列表读取慢?

从图库中挑选或从相机捕获的高质量图像

从PRISM开始学WPFMVVMCommand?

从PRISM开始学WPFPrism?