Przewodnik po DSL – złożone automatyzacje

Automatyzacji DSL można używać do tworzenia automatyzacji bardziej złożonych niż te omówione w przewodniku po DSL – podstawowe automatyzacje.

Sekwencyjny z wieloma działaniami

Sekwencyjny z wieloma działaniami

Automatyzacja może wykonywać więcej niż 1 działanie. Na przykład zamiast pojedynczego węzła action możesz mieć kilka węzłów action, które działają sekwencyjnie:

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

Sekwencyjnie z wieloma równoległymi działaniami

Sekwencyjnie z wieloma równoległymi działaniami

Jeśli w węźle parallel umieścisz wiele węzłów action, działania będą wykonywane równolegle.

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

Jeśli w węźle sequential występują węzły action, które występują po węźle parallel, oczekują one na wykonanie do momentu, gdy wszystkie węzły w węźle parallel zostaną wykonane.

opóźnieniach,

Możesz wprowadzić przerwy w automatyzacjach za pomocą słowa kluczowego delayFor, które przyjmuje argument java.time.Duration określający, jak długo ma trwać przerwa przed wznowieniem wykonywania. Czas pauzy może wynosić od 5 sekund do 24 godzin.

Aby na przykład włączyć światło 4 razy z 5-sekundową przerwą między każdym włączeniem:

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

Wyciszanie aktywatorów

Wyciszanie zdarzeń to funkcja, która pozwala automatyzacji ignorować zdarzeniestarter przez określony czas po początkowym zdarzeniu wywołującym. Jeśli na przykład automatyzacja ma działanie starter, które jest wywoływane przez wykrywanie ruchu, a Ty określisz czas trwania tłumienia działania na 5 minut, to gdy starter zostanie uruchomione, nie zostanie uruchomione ponownie przez kolejne 5 minut. Zapobiega to wielokrotnemu i szybkiemu uruchamianiu automatyzacji.

Aby zastosować w automatyzacji wykluczenie reguły, użyj słowa kluczowego suppressFor z argumentem java.time.Duration, który określa, jak długo należy czekać na reakcję na kolejne reguły. Czas blokowania może wynosić od 5 sekund do 24 godzin.

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

Pamiętaj, że wykluczenie reguły wpływa na wszystkie starters w automatyzacji, które poprzedzają suppressFor.

Ustawianie atrybutów cech w działaniu

Aby ustawić wartość atrybutu cech:

  1. Utwórz węzeł update w węźle action, podając odpowiednią cechę jako argument węzła update:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
  2. W każdym węźle update dla każdego atrybutu, który ma zostać zmodyfikowany, użyj funkcji modyfikującej i przekaż jej nową wartość. Aby utworzyć nazwę funkcji mutatora:
    1. Upewnij się, że nazwa atrybutu jest zapisana wielkimi literami.
    2. Dodaj przed nim słowo set.
    Aby na przykład zaktualizować atrybut o nazwie defaultMoveRate, użyjesz funkcji modyfikującej o nazwie setDefaultMoveRate.

Pamiętaj, że węzeł update może mieć wiele funkcji modyfikatora. Oto przykład, w którym zaktualizowano 2 atrybuty:

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