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

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

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

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

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

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

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

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

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

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

अगर sequential नोड में parallel नोड के बाद आने वाले action नोड हैं, तो वे तब तक एक्ज़ीक्यूट नहीं होते, जब तक 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)
  }
}