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

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

एक्ज़ीक्यूशन की संख्या सीमित करें

यह तय किया जा सकता है कि किसी ऑटोमेशन को कितनी बार चलने की अनुमति है.

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

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