Руководство DSL - комплексная автоматизация,Руководство DSL - комплексная автоматизация

Automation DSL можно использовать для создания более сложных средств автоматизации, чем те, которые обсуждаются в руководстве по базовой автоматизации DSL .

Последовательный с несколькими действиями

Последовательный с несколькими действиями

Автоматизация может делать больше, чем одну вещь. Например, вместо одного узла action вы можете иметь несколько узлов action , которые выполняются в последовательном порядке:

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

Последовательный с несколькими параллельными действиями

Последовательный с несколькими параллельными действиями

Если вы поместите несколько узлов action в parallel узел, действия будут выполняться одновременно.

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

Если в sequential узле есть узлы action , которые идут после parallel узла, они ждут выполнения до тех пор, пока все узлы в parallel узле не завершат выполнение.

Задержки

Вы можете вводить паузы в свою автоматизацию, используя ключевое слово delayFor , которое принимает аргумент java.time.Duration , указывающий, как долго нужно делать паузу перед продолжением выполнения. Продолжительность паузы может составлять от пяти секунд до 24 часов.

Например, чтобы переключить свет четыре раза с пятисекундной паузой между каждым переключением:

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 , который срабатывает при обнаружении движения, и если вы укажете продолжительность подавления триггера в пять минут, то при срабатывании starter он не будет срабатывать снова в течение следующих пяти минут. Это предотвращает повторное быстрое срабатывание автоматики.

Чтобы применить подавление триггеров к вашей автоматизации, используйте ключевое слово suppressFor с аргументом java.time.Duration , указывающим, как долго ждать, прежде чем реагировать на последующие триггеры. Продолжительность подавления может составлять от пяти секунд до 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 может иметь несколько функций-мутаторов. Вот пример обновления двух атрибутов:

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