คู่มือ DSL ของ Android สําหรับการทำงานอัตโนมัติที่ซับซ้อน

คุณใช้ 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

วิธีตั้งค่าแอตทริบิวต์ลักษณะ

  1. สร้างโหนด update ภายในโหนด action โดยรวมลักษณะที่เกี่ยวข้องเป็นอาร์กิวเมนต์ไปยังโหนด update ดังนี้
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
  2. ภายในโหนด update ให้ใช้ฟังก์ชัน Mutator และส่งค่าใหม่ไปยังแอตทริบิวต์แต่ละรายการที่จะแก้ไข วิธีตั้งชื่อฟังก์ชัน Mutator
    1. ขึ้นต้นชื่อแอตทริบิวต์ด้วยตัวพิมพ์ใหญ่
    2. โดยใส่คำว่า set นำหน้า
    ตัวอย่างเช่น หากต้องการอัปเดตแอตทริบิวต์ที่ชื่อ defaultMoveRate คุณจะต้องใช้ฟังก์ชัน Mutator ที่ชื่อ setDefaultMoveRate

โปรดทราบว่าโหนด update มีฟังก์ชัน Mutator ได้หลายฟังก์ชัน ต่อไปนี้เป็น ตัวอย่างการอัปเดตแอตทริบิวต์ 2 รายการ

action(device, Fan) {
  update(FanControl) {
    setPercentSetting(50u)
    setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
  }
}