Comandi iniziali degli eventi pianificati ricorrenti

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

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

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

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

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

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

  1. type, che è SolarTimeType.Sunrise o SolarTimeType.Sunset.
  2. offset, che ti consente di spostare l'ora di inizio rispetto all'evento solare di un qualsiasi intervallo di tempo. I valori positivi introducono un ritardo dopo l'evento solare, mentre i valori negativi fanno sì che lo starter si attivi prima dell'evento solare.

Il seguente esempio è uno starter che avvia l'automazione 15 minuti prima dell'alba ogni giorno:

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

Gli altri due comandi iniziali sono comandi iniziali di eventi programmati ricorrenti, che ti consentono di creare automazioni che vengono eseguite periodicamente in base a criteri più specifici che possono includere condizioni basate sia sull'ora che sul calendario.

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

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

cron espressioni

Forse conosci già cron, un comando utilizzato sui sistemi Unix e Linux per pianificare job ricorrenti.

Gli starter di eventi programmati ricorrenti utilizzano una sintassi delle espressioni di pianificazione simile a quella utilizzata da cron. Per questo motivo, le espressioni di pianificazione utilizzate con questi starter sono chiamate espressioni cron.

Esistono diverse "varianti" di cron e diverse varianti di sintassi tra queste implementazioni. Le espressioni di attivazione degli eventi pianificati ricorrenti cron utilizzano la stessa sintassi dello scheduler Quartz. La sintassi delle espressioni Quartz cron è spiegata nella documentazione di Quartz per CronExpression.

Esempi

Ecco alcuni esempi per illustrare questo concetto.

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

RecurringClockTimeScheduledEvent

In uno starter RecurringClockTimeScheduledEvent, la stringa dell'espressione cron viene assegnata al campo Time.RecurringClockTimeScheduledEvent.cronExpression.

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

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

RecurringSolarTimeScheduleEvent

Lo starter RecurringSolarTimeScheduleEvent accetta due parametri:

  1. 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 in cui verrà avviata l'automazione, pertanto i campi Secondi, Minuti e Ore vengono omessi.

Il seguente esempio è un comando iniziale che avvia 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 *"))
}