Activadores de eventos programados recurrentes

Tres activadores diferentes te permiten programar una automatización con anticipación:

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

El primero, Time.ScheduledTimeEvent, le permite programar una automatización para que comience en un único instante preciso en el futuro o de forma recurrente, según la hora del reloj o un evento solar (es decir, el amanecer o el atardecer).

Por ejemplo, este activador inicia la automatización a las 10 p.m. todos los días:

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

Como alternativa, puedes especificar un evento de hora solar en lugar de la hora del reloj. El parámetro para este tipo de iniciador es un SolarTimeStruct que consta de lo siguiente:

  1. type, que es SolarTimeType.Sunrise o SolarTimeType.Sunset
  2. offset, que te permite cambiar la hora de inicio en relación con el evento solar en cualquier cantidad de tiempo. Los valores positivos introducen una demora después del evento solar, y los valores negativos hacen que el dispositivo de inicio se active antes del evento solar.

El siguiente ejemplo es un activador que inicia la automatización 15 minutos antes del amanecer todos los días:

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

Los otros dos activadores son activadores de eventos programados recurrentes, que te permiten crear automatizaciones que se ejecutan periódicamente según criterios más específicos que pueden incluir condiciones basadas en el tiempo y el calendario.

Time.RecurringClockTimeScheduledEvent te permite programar una automatización en función de una o más condiciones de hora o fecha. Este iniciador usa una sintaxis similar a la que usa la utilidad cron de Unix para especificar la programación de una automatización recurrente.

Time.RecurringSolarTimeScheduledEvent te permite programar una automatización según la hora del amanecer o el atardecer, opcionalmente en combinación con una condición basada en el calendario.

cron expresiones

Es posible que ya conozcas cron, un comando que se usa en sistemas Unix y Linux para programar trabajos recurrentes.

Los iniciadores de eventos programados recurrentes utilizan una sintaxis de expresión de programación similar a la utilizada por cron, y por esta razón, las expresiones de programación utilizadas con estos iniciadores se denominan expresiones cron.

Existen diferentes "sabores" de cron y varias variaciones de sintaxis en estas implementaciones. Las expresiones de inicio de eventos programados recurrentes cron usan la misma sintaxis que el programador Quartz. La sintaxis de la expresión cron de Quartz se explica en la documentación de CronExpression de Quartz.

Ejemplos

A continuación, se incluyen algunos ejemplos para ilustrarlo.

Caso de uso Segundo Minuto Hora Día del mes Mes Día de la semana Año
Se ejecuta cada 24 horas, a medianoche. 0 0 0 ? * * *
Se ejecuta todos los martes a las 6 a.m. 0 30 19 ? * 3 *
Ejecutar a las y cuarto, cada hora, durante el mes de febrero 0 15 * ? 2 * *
Se ejecuta una vez por hora 0 0 * ? * * *
Se ejecuta cada 24 horas, a la medianoche, de enero a marzo, en el día hábil más cercano al 1ᵉʳ día del mes. 0 0 0 ? 1-3 1W *
El segundo jueves de febrero, una vez por hora, a los quince minutos 0 15 * ? 2 5#2 *
Se ejecuta cada cuarto de hora, cada hora, el último día de febrero 0 15 * L 2 ? *
Se ejecuta a las 6:00 a.m. todos los martes y jueves 0 30 19 ? * 3,5 *

RecurringClockTimeScheduledEvent

En un iniciador de RecurringClockTimeScheduledEvent, la cadena de expresión cron se asigna al campo Time.RecurringClockTimeScheduledEvent.cronExpression.

A continuación, se muestra un ejemplo de un activador RecurringClockTimeScheduledEvent que inicia la automatización a las 8 p.m. todos los miércoles de abril:

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

RecurringSolarTimeScheduleEvent

El iniciador RecurringSolarTimeScheduleEvent toma dos parámetros:

  1. Un SolarTimeStruct.
  2. cronExpression: Un subconjunto de una expresión cron que consta únicamente de los campos Día del mes, Mes, Día de la semana y Año. La hora solar determina la hora exacta en la que comenzará la automatización, por lo que se omiten los campos de segundos, minutos y horas.

El siguiente ejemplo es un activador que hace que una automatización comience una hora después del amanecer, todos los miércoles de abril:

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