From b03c5c9c2ea2d2de36ff95afeef37a112ac50872 Mon Sep 17 00:00:00 2001 From: Kelly Date: Mon, 4 May 2026 17:39:59 -0700 Subject: [PATCH] fixSchedDay day + time + interval=1 uses daily at time. day + time + interval>1 uses every N days at time. day without time uses every N days. --- config.template | 4 ++-- modules/scheduler.py | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/config.template b/config.template index 4395efd..dc1e1f8 100644 --- a/config.template +++ b/config.template @@ -326,9 +326,9 @@ schedulerMotd = False # 'tide' (time/day), 'solar' (time/day) for automated information broadcasts, matching module needs enabled! # 'custom' for module/scheduler.py custom schedule examples value = -# interval to use when time is not set (e.g. every 2 days) +# interval for recurring schedules (e.g. every 2 days, or every 2 days at a set time) interval = -# time of day in 24:00 hour format when value is 'day' and interval is not set +# time of day in 24:00 hour format when value is 'day' (optional with interval) # Process run :00,:20,:40 try and vary the 20 minute offsets to avoid collision time = diff --git a/modules/scheduler.py b/modules/scheduler.py index 7f26e6f..5b61908 100644 --- a/modules/scheduler.py +++ b/modules/scheduler.py @@ -104,14 +104,23 @@ def setup_scheduler( # Basic Scheduler Options basicOptions = ['day', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun', 'hour', 'min'] + effective_interval = schedulerIntervalInt if any(option in schedulerValue for option in basicOptions): if schedulerValue == 'day': + day_interval = safe_int(schedulerInterval, 1, type="interval") + if day_interval < 1: + logger.debug(f"System: Scheduler config interval '{schedulerInterval}' invalid for day schedule, using default 1") + day_interval = 1 + effective_interval = day_interval if schedulerTime: - # Specific time each day - schedule.every().day.at(schedulerTime).do(send_sched_msg) + # Specific time at a daily or multi-day interval + if day_interval == 1: + schedule.every().day.at(schedulerTime).do(send_sched_msg) + else: + schedule.every(day_interval).days.at(schedulerTime).do(send_sched_msg) else: # Every N days - schedule.every(schedulerIntervalInt).days.do(send_sched_msg) + schedule.every(day_interval).days.do(send_sched_msg) elif 'mon' in schedulerValue and schedulerTime: schedule.every().monday.at(schedulerTime).do(send_sched_msg) elif 'tue' in schedulerValue and schedulerTime: @@ -130,7 +139,7 @@ def setup_scheduler( schedule.every(schedulerIntervalInt).hours.do(send_sched_msg) elif 'min' in schedulerValue: schedule.every(schedulerIntervalInt).minutes.do(send_sched_msg) - logger.debug(f"System: Starting the basic scheduler to send '{scheduler_message}' on schedule '{schedulerValue}' every {schedulerIntervalInt} interval at time '{schedulerTime}' on Device:{schedulerInterface} Channel:{schedulerChannel}") + logger.debug(f"System: Starting the basic scheduler to send '{scheduler_message}' on schedule '{schedulerValue}' every {effective_interval} interval at time '{schedulerTime}' on Device:{schedulerInterface} Channel:{schedulerChannel}") elif 'joke' in schedulerValue: schedule.every(schedulerIntervalInt).minutes.do( lambda: send_message(tell_joke(), schedulerChannel, 0, schedulerInterface)