जटिल ऑटोमेशन के लिए iOS DSL गाइड

ऑटोमेशन डीएसएल का इस्तेमाल, ऐसे ऑटोमेशन बनाने के लिए किया जा सकता है जो डीएसएल गाइड - iOS पर बुनियादी ऑटोमेशन में बताए गए ऑटोमेशन से ज़्यादा जटिल हों.

एक के बाद एक कई कार्रवाइयां

एक के बाद एक कई कार्रवाइयां

ऑटोमेशन की मदद से एक से ज़्यादा काम किए जा सकते हैं. उदाहरण के लिए, एक action नोड की जगह, आपके पास कई action नोड हो सकते हैं. ये नोड क्रम से चलते हैं:

import GoogleHomeSDK
import GoogleHomeTypes

automation (
...
) {

  starter(...)
  condition {...}
  action {...}
  action {...}
  action {...}

}

एक के बाद एक कई कार्रवाइयां

एक के बाद एक कई कार्रवाइयां

अगर किसी parallel नोड में एक से ज़्यादा action नोड रखे जाते हैं, तो कार्रवाइयां एक साथ होती हैं.

import GoogleHomeSDK
import GoogleHomeTypes

automation (
...
) {

  starter(...)
  condition {...}
  parallel {
    action {...}
    action {...}
    action {...}
  }

}

अगर sequential नोड में action नोड हैं, जो parallel नोड के बाद आते हैं, तो वे तब तक एक्ज़ीक्यूट नहीं होते, जब तक parallel नोड में मौजूद सभी नोड एक्ज़ीक्यूट नहीं हो जाते.

विलंब

ऑटोमेशन में कुछ समय के लिए रुकावटें डालने के लिए, delay(for:) तरीके का इस्तेमाल किया जा सकता है. यह Duration आर्ग्युमेंट लेता है, जो यह दिखाता है कि रुकावट डालने के बाद, ऑटोमेशन को कितनी देर तक रोकना है. वीडियो को पांच सेकंड से लेकर 24 घंटे तक रोका जा सकता है.

उदाहरण के लिए, अगर आपको लाइट को चार बार टॉगल करना है और हर टॉगल के बीच पांच सेकंड का समय देना है, तो यह तरीका अपनाएं:

typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias OnOffTrait = Matter.OnOffTrait

sequential {
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
  delay(for:.seconds(5))
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
  delay(for:.seconds(5))
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
  delay(for:.seconds(5))
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}

ट्रिगर को दबाना

ट्रिगर को दबाने की सुविधा, ऑटोमेशन को starter को तय समय के लिए अनदेखा करने की अनुमति देती है. यह समय, ट्रिगर करने वाले शुरुआती इवेंट के बाद शुरू होता है. उदाहरण के लिए, अगर ऑटोमेशन में starter है, जो मोशन डिटेक्शन से ट्रिगर होता है. साथ ही, अगर आपने ट्रिगर को बंद रखने की अवधि पांच मिनट तय की है, तो starter के ट्रिगर होने के बाद, अगले पांच मिनट तक यह ट्रिगर नहीं होगा. इससे ऑटोमेशन को बार-बार तेज़ी से ट्रिगर होने से रोका जा सकता है.

अपने ऑटोमेशन में ट्रिगर सप्रेस करने की सुविधा लागू करने के लिए, इस suppress(for:) कीवर्ड का इस्तेमाल करें. साथ ही, इस Duration आर्ग्युमेंट का इस्तेमाल करें. यह आर्ग्युमेंट बताता है कि अगले ट्रिगर का जवाब देने से पहले कितनी देर तक इंतज़ार करना है. वीडियो को छिपाने की अवधि पांच सेकंड से लेकर 24 घंटे तक हो सकती है.

typealias OccupancySensorDevice = Matter.OccupancySensorDeviceType
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias MotionDetectionTrait = Google.MotionDetectionTrait
typealias OnOffTrait = Matter.OnOffTrait

automation {
  let starterNode = starter(device, OccupancySensorDevice.self, MotionDetectionTrait.self)
  starterNode
  suppress(for: .seconds(30 * 60)  // 30 minutes
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}

ध्यान दें कि ट्रिगर को दबाने से, ऑटोमेशन में मौजूद उन सभी starters पर असर पड़ता है जो Suppression से पहले आते हैं.

किसी कार्रवाई में ट्रेट एट्रिब्यूट सेट करना

किसी ट्रेट एट्रिब्यूट की वैल्यू सेट करने के लिए:

  1. action नोड में update नोड बनाएं. साथ ही, update नोड के लिए आर्ग्युमेंट के तौर पर, काम की विशेषता शामिल करें:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
    
  2. update नोड में, बदलाव की जाने वाली हर एट्रिब्यूट के लिए, म्यूटेटर फ़ंक्शन का इस्तेमाल करें और उसे नई वैल्यू पास करें. म्यूटेटर फ़ंक्शन का नाम बनाने के लिए:
    1. एट्रिब्यूट के नाम का पहला अक्षर कैपिटल करें
    2. इसके पहले set शब्द जोड़ें.
    उदाहरण के लिए, defaultMoveRate नाम के एट्रिब्यूट को अपडेट करने के लिए, आपको setDefaultMoveRate नाम के म्यूटेटर फ़ंक्शन का इस्तेमाल करना होगा.

ध्यान दें कि किसी update नोड में एक से ज़्यादा म्यूटेटर फ़ंक्शन हो सकते हैं. यहां एक उदाहरण दिया गया है, जिसमें दो एट्रिब्यूट अपडेट किए गए हैं:

typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait

action(fan, FanDeviceType.self) {
  update(FanControlTrait.self) {
    $0.setFanMode(.on)
  }
}