Guida DSL - Automazioni complesse

Il DSL di automazione può essere utilizzato per creare automazioni più complesse di quelle descritte nella guida al DSL - automazioni di base.

Sequenziale con più azioni

Sequenziale con più azioni

Un'automazione può fare più di una cosa. Ad esempio, al posto del singolo action, puoi avere più nodi action, che vengono eseguiti in ordine sequenziale:

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

Sequenziale con più azioni parallele

Sequenziale con più azioni parallele

Se inserisci più nodi action in un nodo parallel, le azioni vengono eseguite contemporaneamente.

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

Se nel nodo sequential sono presenti nodi action che seguono il nodo parallel, questi rimangono in attesa fino al completamento dell'esecuzione di tutti i nodi all'interno del nodo parallel.

Ritardi

Puoi inserire interruzioni nelle automazioni utilizzando la parola chiave delayFor, che accetta un argomento java.time.Duration rappresentante il tempo di pausa prima di continuare l'esecuzione. La durata della pausa può essere compresa tra cinque secondi e 24 ore.

Ad esempio, per attivare/disattivare una luce quattro volte con una pausa di cinque secondi tra ogni attivazione/disattivazione:

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

Eliminazione degli attivatori

La soppressione dell'attivatore è una funzionalità che consente all'automazione di ignorare un starter per un determinato periodo di tempo dopo l'evento di attivazione iniziale. Ad esempio, se l'automazione ha un starter attivato dal rilevamento di movimento e se specifichi una durata di soppressione dell'attivatore di cinque minuti, quando starter si attiva, non si attiverà di nuovo per i cinque minuti successivi. In questo modo, l'automazione non si attiva più volte di seguito.

Per applicare la soppressione degli attivatori all'automazione, utilizza la parola chiave suppressFor con un argomento java.time.Duration che indica il tempo di attesa prima di rispondere agli attivatori successivi. La durata dell'eliminazione può variare da un minimo di cinque secondi a un massimo di 24 ore.

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

Tieni presente che l'eliminazione degli attivatori interessa tutti i starters in un'automazione che precede il suppressFor.

Impostare gli attributi dei tratti in un'azione

Per impostare il valore di un attributo tratto:

  1. Crea un nodo update all'interno di un nodo action, includendo il tratto pertinente come argomento del nodo update:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
  2. All'interno del nodo update, per ogni attributo da modificare, utilizza una funzione di modificatore e passa il nuovo valore. Per formare il nome della funzione di mutazione:
    1. Usare le lettere maiuscole per il nome dell'attributo
    2. Anteponi la parola set.
    Ad esempio, per aggiornare un attributo denominato defaultMoveRate, dovrai utilizzare una funzione di modificatore denominata setDefaultMoveRate.

Tieni presente che un nodo update può avere più funzioni di modificatore. Ecco un esempio in cui vengono aggiornati due attributi:

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