ऑटोमेशन डीएसएल का इस्तेमाल, उन ऑटोमेशन को बनाने के लिए किया जा सकता है जो डीएसएल गाइड - Android पर बुनियादी ऑटोमेशन में बताए गए ऑटोमेशन से ज़्यादा जटिल हैं.
एक के बाद एक कई कार्रवाइयां
ऑटोमेशन की मदद से एक से ज़्यादा काम किए जा सकते हैं. उदाहरण के लिए, एक action नोड की जगह, आपके पास कई action नोड हो सकते हैं. ये नोड क्रम से चलते हैं:
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
एक के बाद एक होने वाली कई कार्रवाइयां
अगर किसी parallel नोड में एक से ज़्यादा action नोड रखे जाते हैं, तो कार्रवाइयां एक साथ होती हैं.
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 भी शामिल है.
किसी कार्रवाई में ट्रेट एट्रिब्यूट सेट करना
किसी ट्रेट एट्रिब्यूट की वैल्यू सेट करने के लिए:
actionनोड मेंupdateनोड बनाएं. साथ ही,updateनोड के आर्ग्युमेंट के तौर पर, काम की विशेषता शामिल करें:action(deviceReference, deviceType) { update(trait) { } }updateनोड में, जिस एट्रिब्यूट में बदलाव करना है उसके लिए, म्यूटेटर फ़ंक्शन का इस्तेमाल करें और उसे नई वैल्यू पास करें. म्यूटेटर फ़ंक्शन का नाम बनाने के लिए:- एट्रिब्यूट के नाम को कैपिटल लेटर में लिखें
- इसके पहले
setशब्द जोड़ें.
defaultMoveRateनाम के एट्रिब्यूट को अपडेट करने के लिए, आपकोsetDefaultMoveRateनाम के म्यूटेटर फ़ंक्शन का इस्तेमाल करना होगा.
ध्यान दें कि किसी update नोड में एक से ज़्यादा म्यूटेटर फ़ंक्शन हो सकते हैं. यहां एक उदाहरण दिया गया है, जिसमें दो एट्रिब्यूट अपडेट किए गए हैं:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}