首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解钉HomeKit附件

解钉HomeKit附件
EN

Stack Overflow用户
提问于 2015-07-02 07:45:52
回答 2查看 421关注 0票数 0

HomeKit配件仿真器是一个小小的小按钮,允许不公平的设备。

考虑到这是一个辅助模拟器,我猜想有一些硬件编程规范允许编写非配对函数。

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

->短版本:

在HMCharacteristic、、HMService、或HomeKit框架中,是否有任何方法可以从家庭中解锁特征/服务?

EN

回答 2

Stack Overflow用户

发布于 2015-07-03 07:03:00

服务或特性不可能是一对,实际上它不需要做。

一个人可以从家里拆下附件。

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

代码语言:javascript
复制
- (void)removeAccessory:(HMAccessory *)accessory 
        completionHandler:(void (^)(NSError *error))completion;

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

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

票数 1
EN

Stack Overflow用户

发布于 2015-07-03 14:27:15

解除配对相当于从HomeKit home (HMHome)下移除该附件。这可以通过使用HMHome下的api调用来实现(可以通过单击视图控制器的按钮来触发):

样本代码:

代码语言:javascript
复制
[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将根据其配对状态完全不同。大多数是读或写,“成对读”和“成对写”,当处于非配对状态时,只能阅读“附属信息服务”(名称、型号等)。

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

  1. 获取相关的HMCharacteristic

序列号的示例代码可能如下所示:

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

代码语言:javascript
复制
+(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调用,以提高您的兴趣(比如更新值等)。在这里,由于序列号是不可写的,您需要满足于仅仅阅读它。

不管怎么说,可能是太长时间的咆哮,偏离了主要的问题。希望这对你有帮助。干杯。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31178484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档