คู่มือ DSL - การทำงานอัตโนมัติที่ซับซ้อน

Automation DSL สามารถใช้ในการสร้างการทำงานอัตโนมัติที่มีความซับซ้อนมากกว่าการทำงานอัตโนมัติที่กล่าวถึงในคู่มือ DSL - การทำงานอัตโนมัติพื้นฐาน

การดำเนินการตามลำดับหลายรายการ

การดำเนินการตามลำดับหลายรายการ

การทำงานอัตโนมัติทําได้หลายอย่าง ตัวอย่างเช่น คุณอาจมีโหนด 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

ตั้งค่าแอตทริบิวต์ลักษณะในการดำเนินการ

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

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

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

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