जटिल ऑटोमेशन के लिए 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)
  }
}