取消固定HomeKit配件

时间:2015-07-02 07:45:53

标签: ios ios8 ios9 homekit

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

enter image description here

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

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

- &GT;简短版本:

HMService HMCharacteristic 或HomeKit框架中是否有任何方法可以取消家中的特征/服务?

2 个答案:

答案 0 :(得分:1)

服务或特征不能取消配对,实际上不需要这样做 人们可以从家里取消配件。

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

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

配对 - 重置按钮在Homekit附件模拟器中提供了一个选项,您可以随时从iOS应用程序取消配对。

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

重置

答案 1 :(得分: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在概念上是不同的。如果您想更新(可写)HMC特性的值,那么您将在可用的HMServices中搜索该HMC特性。请记住,附件中可用的HMServices和HMC特性将根据其配对状态完全不同。大多数读取或写入和“配对读取”和“配对写入”,当处于未配对状态时,您只能阅读“附件信息服务”(名称,型号等)。

现在,假设您想要读取或更改(写入)HMC特性的值,让我们说这是序列号,步骤如下:

  1. 获取相关的HMCharacteristic
  2. 序列号的示例代码可能是这样的:

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

    +(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. 一旦找到了您想要的HMC特性,您就可以进行HomeKit api调用以进一步提高您的兴趣(如更新值等)。在这里,由于序列号不可写,您只需阅读它即可满足。
    2. 无论如何,可能会花费太多时间并且从主要问题中脱离出来。希望这可以帮助你。欢呼声。