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

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

एक के बाद एक होने वाली कई कार्रवाइयां

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

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

automation {
  sequential {
    starter<_>(...)
    condition {...}
    action {...}
    action {...}
    action {...}
    }
}

एक के बाद एक होने वाली कई कार्रवाइयां, जो एक साथ भी हो सकती हैं

एक के बाद एक होने वाली कई कार्रवाइयां

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

automation {
  sequential {
    starter<_>(...)
    condition {...}
    parallel {
      action {...}
      action {...}
      action {...}
    }
  }
}

अगर sequential नोड में action नोड शामिल हैं और वे parallel नोड के बाद आते हैं, तो वे तब तक काम नहीं करते, जब तक parallel नोड में शामिल सभी नोड काम करना पूरा नहीं कर लेते.

विलंब

delayFor कीवर्ड का इस्तेमाल करके, अपने ऑटोमेशन में पॉज़ जोड़े जा सकते हैं. यह कीवर्ड, java.time.Duration आर्ग्युमेंट लेता है. इससे यह तय होता है कि कार्रवाई जारी रखने से पहले, कितने समय के लिए पॉज़ लेना है. पॉज़ की अवधि पांच सेकंड से लेकर 24 घंटे तक हो सकती है.

उदाहरण के लिए, किसी लाइट को चार बार टॉगल करने के लिए. हर टॉगल के बीच पांच सेकंड का पॉज़ लेना होगा:

sequential {
  action(light, OnOffLightDevice) { command(OnOff.toggle()) }
  delayFor(Duration.ofSeconds(5))
  action(light, OnOffLightDevice) { command(OnOff.toggle()) }
  delayFor(Duration.ofSeconds(5))
  action(light, OnOffLightDevice) { command(OnOff.toggle()) }
  delayFor(Duration.ofSeconds(5))
  action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}

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

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

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

automation {
  sequential {
    val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
    suppressFor(Duration.ofMinutes(30))
    action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}

ध्यान दें कि ट्रिगर को दबाने की सुविधा, किसी ऑटोमेशन में suppressFor से पहले आने वाले सभी starters पर असर डालती है.

कार्रवाइयों की संख्या सीमित करना

ऑटोमेशन को रन करने की संख्या सीमित की जा सकती है.

उदाहरण के लिए, हो सकता है कि आपको एक बार चलने वाला ऐसा ऑटोमेशन सेट अप करना हो जो आपके घर से बाहर रहने के दौरान, वैक्यूम क्लीनर को चलाए.

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

automation {
  // The automation can only be executed once.
  maxExecutionCount = 1
  // When the door lock state changes
  sequential {
    val doorLockEvent = starter<_>(doorLock, DoorLockDevice, LockOperationEvent)
    // if the door is unlocked
    condition() {
      expression = (doorLockEvent.lockOperationType equals LockOperationTypeEnum.Unlock)
    }
    // turn the light on
    action(light, DimmableLightDevice) { command(OnOff.on()) }
  }
}

ऑटोमेशन के आखिरी बार चलने और maxExecutionCount तक पहुंचने के बाद, उसे तुरंत मिटा दिया जाता है. ऑटोमेशन की हिस्ट्री की एंट्री, Google Home app (GHA) के गतिविधि टैब में बनी रहती है. इसमें automation_id भी शामिल होता है.

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

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

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

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

action(device, Fan) {
  update(FanControl) {
    setPercentSetting(50u)
    setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
  }
}