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

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

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

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

  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)
  }
}