Panduan DSL - otomatisasi kompleks

DSL Otomatisasi dapat digunakan untuk membuat otomatisasi yang lebih kompleks daripada yang dibahas dalam panduan DSL - otomatisasi dasar.

Berurutan dengan beberapa tindakan

Berurutan dengan beberapa tindakan

Otomatisasi dapat melakukan lebih dari satu hal. Misalnya, sebagai ganti node action tunggal, Anda dapat memiliki beberapa node action, yang berjalan dalam urutan berurutan:

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

Serial dengan beberapa tindakan paralel

Serial dengan beberapa tindakan paralel

Jika Anda menempatkan beberapa node action di node parallel, tindakan akan dijalankan secara serentak.

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

Jika ada node action di node sequential yang muncul setelah node parallel, node tersebut akan menunggu untuk dieksekusi hingga semua node dalam node parallel selesai dieksekusi.

Keterlambatan

Anda dapat memasukkan jeda dalam otomatisasi menggunakan kata kunci delayFor, yang menggunakan argumen java.time.Duration yang mewakili berapa lama jeda sebelum melanjutkan eksekusi. Durasi jeda dapat berlangsung selama lima detik atau hingga 24 jam.

Misalnya, untuk mengalihkan lampu empat kali dengan jeda lima detik di antara setiap pengalihan:

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

Pencegahan pemicu

Penekanan pemicu adalah kemampuan yang memungkinkan otomatisasi Anda mengabaikan starter selama jangka waktu tertentu setelah peristiwa pemicu awal. Misalnya, jika otomatisasi memiliki starter yang dipicu oleh deteksi gerakan, dan jika Anda menentukan durasi penekanan pemicu selama lima menit, saat starter dipicu, pemicu tidak akan dipicu lagi selama lima menit ke depan. Hal ini mencegah otomatisasi memicu berulang kali dengan cepat.

Untuk menerapkan penekanan pemicu ke otomatisasi Anda, gunakan kata kunci suppressFor dengan argumen java.time.Duration yang mewakili berapa lama waktu tunggu sebelum merespons pemicu berikutnya. Durasi penekanan dapat berkisar dari lima detik hingga 24 jam.

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

Perhatikan bahwa penekanan pemicu memengaruhi semua starters dalam otomatisasi yang mendahului suppressFor.

Menetapkan atribut ciri dalam tindakan

Untuk menetapkan nilai atribut sifat:

  1. Buat node update dalam node action, termasuk karakteristik yang relevan sebagai argumen ke node update:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
  2. Dalam node update, untuk setiap atribut yang akan diubah, gunakan fungsi pengubah, dan teruskan nilai baru. Untuk membentuk nama fungsi pengubah:
    1. Menulis nama atribut dengan huruf besar
    2. Beri awalan dengan kata set.
    Misalnya, untuk memperbarui atribut yang disebut defaultMoveRate, Anda akan menggunakan fungsi pengubah yang disebut setDefaultMoveRate.

Perhatikan bahwa node update dapat memiliki beberapa fungsi pengubah. Berikut adalah contoh saat dua atribut diperbarui:

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