0

HomeKit附件模拟器作为一个小按钮,允许不公平的设备。

在此处输入图像描述

鉴于它是一个附件模拟器,我认为有一些硬件编程规范允许编写取消配对功能。

但是,将其也作为HomeKit 框架的一部分来实现并允许客户端开发人员通过HomesController类(和派生类)来实现它可能是有意义的。


--> 短版:

HMServiceHMCharacteristic或 HomeKit 框架中是否有任何方法可以取消与家庭的特征/服务的配对?

4

2 回答 2

1

服务或特征不能取消配对,实际上它不需要这样做。
可以在家中取消配对附件。

您可以调用 HMHome 类的方法来删除/取消配对配件。

- (void)removeAccessory:(HMAccessory *)accessory 
        completionHandler:(void (^)(NSError *error))completion;

并且在 Homekit 配件模拟器中提供了Pairing - Reset按钮作为一个选项,您可以随时取消配件与 iOS 应用程序的配对。

如果您一次没有相同的设备,或者 Homekit 配置从 iOS 应用程序的设置中重置,则可能需要重置。

于 2015-07-03T07:03:00.610 回答
0

取消配对基本上相当于从 HomeKit 主页 (HMHome) 下移除该配件。这可以通过使用 HMHome 下的 api 调用来实现(可以通过从您的视图控制器单击按钮来触发):

示例代码:

[yourHMHome removeAccessory:accessory_ completionHandler:^(NSError *error) {
    if (error) {
        //Handle your error here.
    } else {
        //Removing, or here, un-pairing was successful, do anything else
       //Example
        [[YourExampleHomeStore sharedStore] updateAccessoryDelegates];
        YourCompletionHandler(error);
    }
}];

这回答了您关于取消配对的问题。HMService 和 HMCharacteristic 在概念上是不同的。如果您想更新(可写)HMCharacteristic 的值,那么您将在可用的 HMServices 中搜索该 HMCharacteristic。请记住,配件上可用的 HMServices 以及因此 HMCharacteristics 将根据其配对状态而完全不同。大多数读写和'paired-read'和'paired-write',当处于未配对状态时,您只能读取'附件信息服务'(名称,型号等)

现在,假设您想读取或更改(写入)HMCharacteristic 的值,假设它是序列号,步骤如下:

  1. 获取相关的 HMCharacteristic

序列号的示例代码可能是这样的:

注意:如果附件无法访问,则返回空字符串。

+(NSString *)getSerialNumberFromHMAccessory:(HMAccessory *)accessory
{

if (!accessory || !accessory.reachable) { return @""; }

for (HMService *service in accessory.services) {
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@", @"characteristicType", HMCharacteristicTypeSerialNumber];
    NSArray *result = [service.characteristics filteredArrayUsingPredicate:predicate];
    if (result && [result count] > 0 && [result[0] isKindOfClass:[HMCharacteristic class]]) {
        HMCharacteristic *serialNumChar = (HMCharacteristic *)result[0];
        NSString *serialNum = [serialNumChar valueForKey:@"value"];
        if (serialNum && [serialNum length] > 0) {
            NSLog(@"Found serial number: %@ for accessory named \"%@\"", serialNum, accessory.name);
            return serialNum;
        }
    }
}

return @"";
}
  1. 一旦你找到了你想要的 HMCharacteristic,你就可以调用 HomeKit api 来增加你的兴趣(比如更新值等)。在这里,由于序列号是不可写的,您只需阅读它就可以了。

无论如何,可能咆哮的时间太长了,偏离了主要问题。希望这对你有帮助。干杯。

于 2015-07-03T14:27:15.680 回答