Przewodnik po DSL na Androida na potrzeby złożonych automatyzacji

Automatyzacja DSL może służyć do tworzenia automatyzacji bardziej złożonych niż te opisane w przewodniku po DSL – podstawowe automatyzacje na Androidzie.

Sekwencyjny z wieloma działaniami

Sekwencyjny z wieloma działaniami

Automatyzacja może wykonywać więcej niż 1 czynność. 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 {...}
    }
}

Sekwencyjny z wieloma równoległymi działaniami

Sekwencyjny 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, czekają one na wykonanie, aż 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ć i wyłączyć światło 4 razy z 5-sekundową przerwą między każdym włączeniem lub wyłą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()) }
}

Pomijanie aktywatorów

Wyciszanie wyzwalania to funkcja, która pozwala automatyzacji ignorowaćstarter przez określony czas po początkowym zdarzeniu wyzwalają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 wykluczanie reguł, 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 pomijanie reguł wpływa na wszystkie starters w automatyzacji, które poprzedzają suppressFor.

Ustawianie atrybutów cech w działaniu

Aby ustawić wartość atrybutu cechy:

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