Поскольку один HMActionSet не может быть добавлен к HMHome и HMTrigger, как я могу добавить HMActionSet к HMTrigger?
Мой код:
// Create Action Set
[_myHome addActionSetWithName:@"Night" completionHandler:^(HMActionSet *actionSet, NSError *error) {
if (error) {
NSLog(@"%@", error);
}else {
NSLog(@"Add action set");
}
}];
// Create Time Trigger
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.second = 5;
HMTimerTrigger *timeTrigger = [[HMTimerTrigger alloc] initWithName:@"Night Trigger" fireDate:[NSDate dateWithTimeIntervalSinceNow:5] timeZone:[NSTimeZone localTimeZone] recurrence:dateComponents recurrenceCalendar:[NSCalendar currentCalendar]];
// Add Action Set to Trigger
for (HMActionSet *actionSet in _myHome.actionSets) {
if ([actionSet.name isEqualToString:@"Night"]) {
[timeTrigger addActionSet:actionSet completionHandler:^(NSError *error) {
if (error) {
NSLog(@"%@", error);
}else {
NSLog(@"Add Action Set to Trigger");
}
}];
}
}
// Add Trigger to My Home
[_myHome addTrigger:timeTrigger completionHandler:^(NSError *error) {
if (error) {
NSLog(@"%@", error);
}else {
NSLog(@"Add Trigger");
}
}];
Сначала я добавляю HMActionSet под названием "Ночь" в HMHome. Затем я добавляю тот же HMActionSet в HMTrigger. HomeKit выдает ошибку: Error Domain = HMErrorDomain Code = 12 "Операция не может быть завершена. (HMErrorDomain error 12.)", что означает ObjectAlreadyAssociatedToHome.
Я предполагаю, что вы не можете добавить один и тот же набор HMActionSet как в HMHome, так и в HMTrigger. Поэтому я пытаюсь создать HMActionSet и добавить его в HMTrigger, а затем добавить HMTrigger в HMHome. Но я столкнулся с проблемой при создании HMActionSet, так как он не может быть инициирован.
У кого-нибудь есть решение для этого?
3 ответа
Твоя проблема:
dateComponents.second = 5;
Триггеры таймера устанавливаются только в начале минуты. Секунды не используются, и будет возвращена ошибка, если дата срабатывания включает значение секунд, отличное от 0. Когда срабатывает таймер, он обычно срабатывает в течение 1 минуты после запланированной даты срабатывания или расчетной даты срабатывания, в зависимости от мощности системы и Управление ресурсами.
Вы должны вызвать триггер добавления после успешного добавления набора действий, то есть в обработчике завершения.
HMActionSet может быть добавлен в HMTrigger, если он уже добавлен в дом.
HMActionset - это сцена (которая представляет собой набор доступных для записи характеристик любого аксессуара). Который может быть выполнен с помощью одной команды.
Так что либо можно просто выполнить HMActionSet, либо его можно добавить в Trigger для выполнения этой сцены в определенные моменты времени.
Должно быть два разных представления для обработки HMActionSet (Добавить, переименовать, удалить, изменить значения характеристики).
И для триггеров. Он создаст триггер и "назначит" набор HMActionSet из того же дома этому триггеру.
Тем не менее, вам нужно управлять повторением, запускать и активировать свойство, чтобы триггер работал идеально.