Comandi iniziali degli eventi pianificati ricorrenti

Tre diversi comandi iniziali ti consentono di pianificare un'automazione in anticipo:

  1. Time.ScheduledTimeEvent
  2. Time.RecurringClockTimeScheduledEvent
  3. Time.RecurringSolarTimeScheduledEvent

Il primo, Time.ScheduledTimeEvent, consente di pianificare l'avvio di un'automazione in un singolo istante preciso nel futuro o su base ricorrente, in base all'ora dell'orologio o a un evento solare (ad es. alba o tramonto).

Ad esempio, questo comando iniziale avvia l'automazione alle 22:00 di ogni giorno:

starter<_>(structure, Time.ScheduledTimeEvent) {
  parameter(Time.ScheduledTimeEvent.clockTime(LocalTime.of(22, 0, 0, 0)))
}

In alternativa, puoi specificare l'evento dell'ora solare anziché l'ora dell'orologio. Il parametro per questo tipo di comando iniziale è un SolarTimeStruct costituito da:

  1. type, che può essere SolarTimeType.Sunrise o SolarTimeType.Sunset.
  2. offset, che ti consente di modificare l'ora di inizio rispetto all'evento solare per qualsiasi quantità di tempo. I valori positivi introducono un ritardo dopo l'evento solare, mentre i valori negativi fanno sì che l'avviatore si attivi prima dell'evento solare.

L'esempio seguente è un comando iniziale che avvia l'automazione ogni giorno 15 minuti prima dell'alba:

starter<_>(structure, Time.ScheduledTimeEvent) {
  parameter(
    Time.ScheduledTimeEvent.solarTime(
      SolarTimeStruct(SolarTimeType.Sunrise, java.time.Duration.ofMinutes(-15))
    )
  )
}

I due comandi iniziali successivi sono comandi iniziali per eventi pianificati ricorrenti, che ti consentono di creare automazioni che vengono eseguite periodicamente in base a criteri più specifici che possono includere condizioni basate sul tempo e sul calendario.

Time.RecurringClockTimeScheduledEvent ti consente di pianificare un'automazione in base a una o più condizioni di data o ora. Questo comando iniziale utilizza una sintassi simile a quella utilizzata dall'utilità cron di Unix per specificare la pianificazione di un'automazione ricorrente.

Time.RecurringSolarTimeScheduledEvent ti consente di pianificare un'automazione in base all'ora dell'alba o del tramonto, optionally in combinazione con una condizione basata sul calendario.

Espressioni cron

Potresti già conoscere cron, un comando utilizzato sui sistemi Unix e Linux per pianificare i job ricorrenti.

I comandi iniziali per gli eventi pianificati ricorrenti utilizzano una sintassi di espressione di pianificazione simile a quella utilizzata da cron e, per questo motivo, le espressioni di pianificazione utilizzate con questi comandi iniziali sono chiamate espressioni cron.

Esistono diversi "flavor" di cron e diverse varianti di sintassi tra queste implementazioni. Le espressioni cron iniziale degli eventi pianificati ricorrenti utilizzano la stessa sintassi del programma schedulatore Quartz. La sintassi delle espressioni cron di Quartz è spiegata nella documentazione di CronExpression di Quartz.

Esempi

Ecco alcuni esempi per chiarire.

Caso d'uso Secondo Minuto Ora Giorno del mese Mese Giorno della settimana Anno
Esegui ogni 24 ore, a mezzanotte 0 0 0 ? * * *
Esegui ogni martedì alle 06:00 0 30 19 ? * 3 *
Eseguita alle 15:15, ogni ora, durante il mese di febbraio 0 15 * ? 2 * *
Esegui una volta all'ora 0 0 * ? * * *
Esegui ogni 24 ore, a mezzanotte, da gennaio a marzo, il giorno feriale più vicino al 1° giorno del mese 0 0 0 ? 1-3 1W *
Il secondo giovedì di febbraio, una volta ogni ora, a un quarto di ora 0 15 * ? 2 5#2 *
Esegui ogni ora a un quarto dopo l'ora, l'ultimo giorno del mese di febbraio 0 15 * L 2 ? *
Eseguila alle 06:00 ogni martedì e giovedì 0 30 19 ? * 3,5 *

RecurringClockTimeScheduledEvent

In un comando iniziale RecurringClockTimeScheduledEvent, la stringa dell'espressione cron viene assegnata al campo Time.RecurringClockTimeScheduledEvent.cronExpression.

Di seguito è riportato un esempio di comando iniziale RecurringClockTimeScheduledEvent che avvia l'automazione alle 20:00 di ogni mercoledì di aprile:

starter<_>(structure, event = Time.RecurringClockTimeScheduledEvent) {
  parameter(Time.RecurringClockTimeScheduledEvent.cronExpression("0 0 20 ? 4 4 *"))
}

RecurringSolarTimeScheduleEvent

Il comando iniziale RecurringSolarTimeScheduleEvent accetta due parametri:

  1. Un SolarTimeStruct.
  2. cronExpression: un sottoinsieme di un'espressione cron costituito solo dai campi Giorno-del-mese, Mese, Giorno-della-settimana e Anno. L'ora solare determina l'ora esatta di inizio dell'automazione, pertanto i campi Secondi, Minuti e Ore vengono omessi.

L'esempio seguente è un comando iniziale che fa avviare un'automazione un'ora dopo l'alba, ogni mercoledì di aprile:

starter<_>(structure, event = Time.RecurringSolarTimeScheduledEvent) {
  parameter(
    Time.RecurringSolarTimeScheduledEvent.solarTime(
      TimeTrait.SolarTimeStruct(SolarTimeType.Sunrise, Duration.ofHours(1))
    )
  )
  parameter(Time.RecurringSolarTimeScheduledEvent.cronExpression("? 4 4 *"))
}