創(chuàng)建動(dòng)作集和觸發(fā)器

2018-09-14 11:44 更新

創(chuàng)建動(dòng)作集和觸發(fā)器

一個(gè)動(dòng)作集合 HMActionSet 和觸發(fā)器 HMTimerTrigger 允許你同時(shí)控制多個(gè)智能電器。比如,一個(gè)動(dòng)作集合可能會(huì)在用戶(hù)上床休息之前執(zhí)行一組動(dòng)作 HMAction。一個(gè)寫(xiě)動(dòng)作向一個(gè)特性寫(xiě)入了值。動(dòng)作集合中的動(dòng)作是以不確定的順序執(zhí)行的。一個(gè)觸發(fā)器會(huì)在一個(gè)特定的時(shí)間出發(fā)一個(gè)動(dòng)作集并可以重復(fù)執(zhí)行。每一個(gè)動(dòng)作集合在一個(gè)家庭中都有唯一的名稱(chēng)并可被 Siri 識(shí)別。

創(chuàng)建寫(xiě)入動(dòng)作

寫(xiě)入動(dòng)作會(huì)向一個(gè)服務(wù)的特性寫(xiě)入值并被加入到動(dòng)作集合中去。HMAction 類(lèi)是 HMCharacteristicWriteAction 具體類(lèi)的抽象基類(lèi)。一個(gè)動(dòng)作有一個(gè)相關(guān)聯(lián)的特性對(duì)象,你可以通過(guò) Accessing Services and Characteristics 中描述的來(lái)獲取相關(guān)的服務(wù)和特性,然后創(chuàng)建這個(gè) HMCharacteristicWriteAction。

為了創(chuàng)建一個(gè)動(dòng)作,我們使用 HMCharacteristicWriteAction類(lèi)中的initWithCharacteristic:targetValue:方法。

HMCharacteristicWriteAction *action = [[HMCharacteristicWriteAction alloc] initWithCharacteristic:characteristic targetValue:value];

在你的代碼中,你使用對(duì)應(yīng)的特性的期望來(lái)替換 value 參數(shù),并使用對(duì)應(yīng)的 HMCharacteristic 對(duì)象來(lái)替換 characteristic 參數(shù)。

創(chuàng)建并執(zhí)行動(dòng)作集

一個(gè)動(dòng)作集就是一個(gè)共同執(zhí)行的動(dòng)作的集合。比如一個(gè)夜間動(dòng)作集合可能包含關(guān)閉電燈,調(diào)低恒溫水平和鎖上房門(mén)。

為了創(chuàng)建一個(gè)動(dòng)作集我們使用 addActionSetWithName:completionHandler:異步方法。

[self.home addActionSetWithName:@"NightTime" completionHandler:^(HMActionSet *actionSet, NSError *error) {
    if (error == nil) {
        // 成功添加了一個(gè)動(dòng)作集
    } else {
        // 添加一個(gè)動(dòng)作集失敗
    }
}];

為了添加一個(gè)動(dòng)作到動(dòng)作集,我們使用 addAction:completionHandler:異步方法。

[actionSet addAction:action completionHandler:^(NSError *error) {
    if (error == nil) {
        // 成功添加了一個(gè)動(dòng)作到動(dòng)作集
    } else {
    // 添加一個(gè)動(dòng)作到動(dòng)作集失敗
    }
}];

想要移除一個(gè)動(dòng)作,可使用 removeAction:completionHandler:方法。

想要執(zhí)行一個(gè)動(dòng)作集,可使用 HMHome 類(lèi)的 executeActionSet:completionHandler:方法。比如,用戶(hù)希望控制所有的節(jié)日彩燈。我們就創(chuàng)建一個(gè)動(dòng)作集來(lái)打開(kāi)所有的節(jié)日彩燈,另外一個(gè)動(dòng)作集來(lái)關(guān)閉所有的節(jié)日彩燈。為了打開(kāi)所有的節(jié)日彩燈,發(fā)送executeActionSet:completionHandler:消息給 home 對(duì)象,并傳遞"打開(kāi)節(jié)日彩燈"動(dòng)作集。

創(chuàng)建并開(kāi)啟觸發(fā)器

觸發(fā)器會(huì)執(zhí)行一個(gè)或多個(gè)動(dòng)作集。iOS會(huì)在后臺(tái)管理和運(yùn)行你的觸發(fā)器。HMTrigger 類(lèi)是 HMTimerTrigger 具體類(lèi)的抽象類(lèi)。當(dāng)你創(chuàng)建一個(gè)定時(shí)觸發(fā)器時(shí),你需要指定觸發(fā)時(shí)間和觸發(fā)的周期。創(chuàng)建并開(kāi)啟一個(gè)定時(shí)觸發(fā)器需要多個(gè)步驟來(lái)完成。

遵循下面幾步來(lái)創(chuàng)建并啟動(dòng)一個(gè)定時(shí)觸發(fā)器

創(chuàng)建一個(gè)定時(shí)觸發(fā)器

1.創(chuàng)建定時(shí)觸發(fā)器。

self.trigger = [[HMTimerTrigger alloc] initWithName:name
fireDate:fireDate
timeZone:niL
recurrence:nil
recurrenceCalendar:nil];

觸發(fā)時(shí)間必須設(shè)置在將來(lái)的某個(gè)時(shí)刻,第二個(gè)參數(shù)必須為 0。如果你設(shè)置了一個(gè)周期,周期的最小值是 5 分鐘,最大值是 5周。關(guān)于如何使用NSDateComponents和NSCalendar來(lái)設(shè)置周期,請(qǐng)閱讀Date and Time Programming Guide

2.添加一個(gè)動(dòng)作集到觸發(fā)器。

使用 HMTrigger 基類(lèi)方法 addActionSet:completionHandler:,來(lái)添加一個(gè)動(dòng)作集到觸發(fā)器。

3.添加一個(gè)觸發(fā)器到家庭。

使用 HMHome 類(lèi)中的addTrigger:completionHandler:方法來(lái)添加一個(gè)觸發(fā)器到家庭。

4.啟動(dòng)觸發(fā)器。

新創(chuàng)建的觸發(fā)器默認(rèn)是未啟動(dòng)的。需要使用 enable:complationHandler:方法啟動(dòng)觸發(fā)器。

一個(gè)定時(shí)觸發(fā)器被啟動(dòng)后,會(huì)周期性的運(yùn)行它的動(dòng)作集。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)