คุณสามารถใช้ Automation DSL เพื่อสร้างการทำงานอัตโนมัติที่ซับซ้อนกว่า ที่กล่าวถึงใน คู่มือ DSL - การทำงานอัตโนมัติพื้นฐานใน Android
การทำงานอัตโนมัติตามลำดับที่มีการดำเนินการหลายอย่าง
การทำงานอัตโนมัติสามารถทำได้มากกว่า 1 อย่าง เช่น คุณสามารถมีโหนด action หลายโหนดแทนโหนด action โหนดเดียว ซึ่งจะทำงานตามลำดับ
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
การทำงานอัตโนมัติตามลำดับที่มีการดำเนินการแบบขนานหลายอย่าง
หากคุณวางโหนด action หลายโหนดในโหนด parallel การดำเนินการจะทำงานพร้อมกัน
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
หากมีโหนด action ในโหนด sequential ที่อยู่หลังโหนด parallel โหนดเหล่านั้นจะรอให้โหนดทั้งหมดภายในโหนด parallel ทำงานเสร็จก่อนจึงจะทำงาน
ความล่าช้า
คุณสามารถหยุดการทำงานอัตโนมัติชั่วคราวได้โดยใช้คีย์เวิร์ด
delayFor
ซึ่งรับอาร์กิวเมนต์
java.time.Duration
ที่แสดงระยะเวลาที่จะหยุดชั่วคราวก่อนดำเนินการต่อ ระยะเวลาหยุดชั่วคราวอาจสั้นเพียง 5 วินาทีหรือนานถึง 24 ชั่วโมง
ตัวอย่างเช่น หากต้องการสลับไฟ 4 ครั้งโดยหยุดชั่วคราว 5 วินาทีระหว่างการสลับแต่ละครั้ง ให้ทำดังนี้
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 ที่ทริกเกอร์โดยการตรวจจับการเคลื่อนไหว และหากคุณระบุระยะเวลาการระงับการทริกเกอร์เป็น 5 นาที เมื่อ starter ทริกเกอร์แล้ว starter จะไม่ทริกเกอร์อีกครั้งในอีก 5 นาทีข้างหน้า ซึ่งจะป้องกันไม่ให้การทำงานอัตโนมัติทริกเกอร์ซ้ำๆ อย่างรวดเร็ว
หากต้องการใช้การระงับการทริกเกอร์กับการทำงานอัตโนมัติ ให้ใช้
suppressFor
คีย์เวิร์ดกับ
java.time.Duration
อาร์กิวเมนต์ที่แสดงระยะเวลาที่จะรอการตอบสนองต่อการทริกเกอร์ครั้งต่อๆ ไป
ระยะเวลาการระงับอาจสั้นเพียง 5 วินาทีหรือนานถึง 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
ตั้งค่าแอตทริบิวต์ลักษณะในการดำเนินการ
วิธีตั้งค่าแอตทริบิวต์ลักษณะ
- สร้างโหนด
updateภายในโหนดactionโดยใส่ลักษณะที่เกี่ยวข้องเป็นอาร์กิวเมนต์ของโหนดupdateaction(deviceReference, deviceType) { update(trait) { } } - ภายในโหนด
updateให้ใช้ฟังก์ชัน Mutator สำหรับแต่ละแอตทริบิวต์ที่จะแก้ไข และส่งค่าใหม่ไปยังฟังก์ชันดังกล่าว วิธีสร้างชื่อฟังก์ชัน Mutator- ขึ้นต้นชื่อแอตทริบิวต์ด้วยตัวพิมพ์ใหญ่
- นำหน้าด้วยคำว่า
set
defaultMoveRate, คุณจะต้องใช้ฟังก์ชัน Mutator ที่ชื่อว่าsetDefaultMoveRate.
โปรดทราบว่าโหนด update มีฟังก์ชัน Mutator ได้หลายฟังก์ชัน ตัวอย่างต่อไปนี้แสดงการอัปเดตแอตทริบิวต์ 2 รายการ
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}