คุณใช้ 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
ทริกเกอร์ ระบบจะไม่ทริกเกอร์อีกเป็นเวลา 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
ตั้งค่าแอตทริบิวต์ลักษณะใน Action
วิธีตั้งค่าแอตทริบิวต์ลักษณะ
- สร้างโหนด
update
ภายในโหนดaction
โดยรวมลักษณะที่เกี่ยวข้องเป็นอาร์กิวเมนต์ไปยังโหนดupdate
ดังนี้action(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)
}
}