Hướng dẫn về DSL – các quy trình tự động hoá phức tạp

Bạn có thể sử dụng DSL tự động hoá để tạo các quy trình tự động hoá phức tạp hơn những quy trình được thảo luận trong Hướng dẫn về DSL – quy trình tự động hoá cơ bản.

Tuần tự với nhiều hành động

Tuần tự với nhiều hành động

Một thao tác tự động có thể làm nhiều việc. Ví dụ: thay vì một nút action, bạn có thể có nhiều nút action chạy theo thứ tự tuần tự:

automation {
  sequential {
    starter<_>(...)
    condition {...}
    action {...}
    action {...}
    action {...}
    }
}

Tuần tự với nhiều hành động song song

Tuần tự với nhiều hành động song song

Nếu bạn đặt nhiều nút action trong một nút parallel, các thao tác sẽ thực thi đồng thời.

automation {
  sequential {
    starter<_>(...)
    condition {...}
    parallel {
      action {...}
      action {...}
      action {...}
    }
  }
}

Nếu có các nút action trong nút sequential nằm sau nút parallel, thì các nút này sẽ chờ thực thi cho đến khi tất cả các nút trong nút parallel thực thi xong.

Các hoạt động gây trở ngại giao thông

Bạn có thể tạm dừng quy trình tự động bằng cách sử dụng từ khoá delayFor. Từ khoá này sẽ lấy đối số java.time.Duration đại diện cho khoảng thời gian tạm dừng trước khi tiếp tục thực thi. Thời lượng tạm dừng có thể ngắn nhất là 5 giây hoặc dài nhất là 24 giờ.

Ví dụ: để bật/tắt đèn bốn lần với thời gian tạm dừng 5 giây giữa mỗi lần bật/tắt:

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()) }
}

Chặn điều kiện kích hoạt

Tính năng chặn điều kiện kích hoạt là một chức năng cho phép quy trình tự động của bạn bỏ qua một starter trong một khoảng thời gian cụ thể sau sự kiện kích hoạt ban đầu. Ví dụ: nếu quy trình tự động hoá có starter được kích hoạt bằng tính năng phát hiện chuyển động và nếu bạn chỉ định thời lượng chặn điều kiện kích hoạt là 5 phút, thì khi starter kích hoạt, quy trình này sẽ không kích hoạt lại trong 5 phút tiếp theo. Điều này giúp ngăn quá trình tự động hoá kích hoạt liên tục.

Để áp dụng tính năng chặn điều kiện kích hoạt cho quy trình tự động hoá, hãy sử dụng từ khoá suppressFor với đối số java.time.Duration thể hiện khoảng thời gian chờ trước khi phản hồi các điều kiện kích hoạt tiếp theo. Thời lượng chặn có thể ngắn nhất là 5 giây và dài nhất là 24 giờ.

automation {
  sequential {
    val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
    suppressFor(Duration.ofMinutes(30))
    action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}

Xin lưu ý rằng tính năng chặn điều kiện kích hoạt ảnh hưởng đến tất cả starters trong một quy trình tự động hoá đi trước suppressFor.

Đặt thuộc tính đặc điểm trong một hành động

Cách đặt giá trị của thuộc tính đặc điểm:

  1. Tạo một nút update trong nút action, bao gồm cả đặc điểm liên quan làm đối số cho nút update:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
  2. Trong nút update, đối với mỗi thuộc tính cần sửa đổi, hãy sử dụng một hàm đối tượng thay đổi và truyền giá trị mới vào hàm đó. Cách tạo tên cho hàm đối tượng sửa đổi:
    1. Viết hoa tên thuộc tính
    2. Đặt tiền tố là từ set.
    Ví dụ: để cập nhật một thuộc tính có tên là defaultMoveRate, bạn sẽ sử dụng một hàm đối tượng sửa đổi có tên là setDefaultMoveRate.

Xin lưu ý rằng một nút update có thể có nhiều hàm đối tượng sửa đổi. Sau đây là ví dụ về việc cập nhật hai thuộc tính:

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