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 tym węźle zostaną wykonane.parallel

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 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 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 wyłączenie reguły ma wpływ na wszystkie starters w automatyzacji poprzedzającej 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)
  }
}