From 7505c9ec22d7874ed4957aa3d41340c66cd93bac Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 29 Oct 2025 00:37:53 +0000 Subject: [PATCH] Add basic scheduler support for news, readrss, mwx, sysinfo, tide, and sun Co-authored-by: SpudGunMan <12676665+SpudGunMan@users.noreply.github.com> --- etc/custom_scheduler.template | 52 +++++++++++++++++++++++++++++++++++ modules/scheduler.py | 34 +++++++++++++++++++++++ 2 files changed, 86 insertions(+) diff --git a/etc/custom_scheduler.template b/etc/custom_scheduler.template index 4a32b66..daa068d 100644 --- a/etc/custom_scheduler.template +++ b/etc/custom_scheduler.template @@ -14,8 +14,24 @@ def setup_custom_schedules(send_message, tell_joke, welcome_message, handle_wxc, 5. Make sure to uncomment (delete the single #) the example schedules down at the end of the file to enable them Python is sensitive to indentation so be careful when editing this file. https://thonny.org is included on pi's image and is a simple IDE to use for editing python files. + + Available functions you can import and use: + - tell_joke() - Returns a random joke + - welcome_message - A welcome message string + - handle_wxc(message_from_id, deviceID, cmd, days=None) - Weather information + - handleNews(message_from_id, deviceID, message, isDM) - News reader + - get_rss_feed(msg) - RSS feed reader + - handle_mwx(message_from_id, deviceID, cmd) - Marine weather + - sysinfo(message, message_from_id, deviceID, isDM) - System information + - handle_tide(message_from_id, deviceID, channel_number) - Tide information + - handle_sun(message_from_id, deviceID, channel_number) - Sun information + - MOTD - Message of the day string """ try: + # Import additional functions for scheduling (optional, depending on your needs) + from mesh_bot import handleNews, sysinfo, handle_mwx, handle_tide, handle_sun + from modules.rss import get_rss_feed + # Example task functions, modify as needed the channel and interface parameters default to schedulerChannel and schedulerInterface def send_joke(channel, interface): ## uses system.send_message to send the result of tell_joke() @@ -49,6 +65,30 @@ def setup_custom_schedules(send_message, tell_joke, welcome_message, handle_wxc, ## uses system.send_message to send message of the day string which can be updated in runtime send_message(MOTD, channel, 0, interface) + def send_news(channel, interface): + ## uses system.send_message to send the result of handleNews() + send_message(handleNews(0, interface, 'readnews', False), channel, 0, interface) + + def send_rss(channel, interface): + ## uses system.send_message to send the result of get_rss_feed() + send_message(get_rss_feed(''), channel, 0, interface) + + def send_marine_weather(channel, interface): + ## uses system.send_message to send the result of handle_mwx() + send_message(handle_mwx(0, interface, 'mwx'), channel, 0, interface) + + def send_sysinfo(channel, interface): + ## uses system.send_message to send the result of sysinfo() + send_message(sysinfo('', 0, interface, False), channel, 0, interface) + + def send_tide(channel, interface): + ## uses system.send_message to send the result of handle_tide() + send_message(handle_tide(0, interface, channel), channel, 0, interface) + + def send_sun(channel, interface): + ## uses system.send_message to send the result of handle_sun() + send_message(handle_sun(0, interface, channel), channel, 0, interface) + ### Send a joke every 2 minutes #schedule.every(2).minutes.do(lambda: send_joke(schedulerChannel, schedulerInterface)) ### Send a good morning message every day at 9 AM @@ -67,6 +107,18 @@ def setup_custom_schedules(send_message, tell_joke, welcome_message, handle_wxc, #schedule.every().day.at("13:00").do(lambda: send_motd(schedulerChannel, schedulerInterface)) ### Send bbslink message every 2 days at 10 AM #schedule.every(2).days.at("10:00").do(lambda: send_message("bbslink MeshBot looking for peers", schedulerChannel, 0, schedulerInterface)) + ### Send news updates every 6 hours + #schedule.every(6).hours.do(lambda: send_news(schedulerChannel, schedulerInterface)) + ### Send RSS feed every day at 9 AM + #schedule.every().day.at("09:00").do(lambda: send_rss(schedulerChannel, schedulerInterface)) + ### Send marine weather every day at 6 AM + #schedule.every().day.at("06:00").do(lambda: send_marine_weather(schedulerChannel, schedulerInterface)) + ### Send system information every day at 12 PM + #schedule.every().day.at("12:00").do(lambda: send_sysinfo(schedulerChannel, schedulerInterface)) + ### Send tide information every day at 5 AM + #schedule.every().day.at("05:00").do(lambda: send_tide(schedulerChannel, schedulerInterface)) + ### Send sun information every day at 6 AM + #schedule.every().day.at("06:00").do(lambda: send_sun(schedulerChannel, schedulerInterface)) except Exception as e: logger.error(f"Error setting up custom schedules: {e}") \ No newline at end of file diff --git a/modules/scheduler.py b/modules/scheduler.py index 68b2627..b514d8e 100644 --- a/modules/scheduler.py +++ b/modules/scheduler.py @@ -80,7 +80,11 @@ def setup_scheduler( handle_riverFlow, handle_tide, handle_satpass, + handleNews, + handle_mwx, + sysinfo, ) + from modules.rss import get_rss_feed except ImportError as e: logger.warning(f"Some mesh_bot schedule features are unavailable by option disable in config.ini: {e} comment out the use of these methods in your custom_scheduler.py") @@ -140,6 +144,36 @@ def setup_scheduler( partial(send_message, handle_wxc(0, schedulerInterface, 'wx', days=1), schedulerChannel, 0, schedulerInterface) ) logger.debug(f"System: Starting the weather scheduler to send weather updates every {schedulerIntervalInt} hours on Device:{schedulerInterface} Channel:{schedulerChannel}") + elif 'news' in schedulerValue: + schedule.every(schedulerIntervalInt).hours.do( + lambda: send_message(handleNews(0, schedulerInterface, 'readnews', False), schedulerChannel, 0, schedulerInterface) + ) + logger.debug(f"System: Starting the news scheduler to send news updates every {schedulerIntervalInt} hours on Device:{schedulerInterface} Channel:{schedulerChannel}") + elif 'readrss' in schedulerValue: + schedule.every(schedulerIntervalInt).hours.do( + lambda: send_message(get_rss_feed(''), schedulerChannel, 0, schedulerInterface) + ) + logger.debug(f"System: Starting the RSS scheduler to send RSS feeds every {schedulerIntervalInt} hours on Device:{schedulerInterface} Channel:{schedulerChannel}") + elif 'mwx' in schedulerValue: + schedule.every().day.at(schedulerTime).do( + lambda: send_message(handle_mwx(0, schedulerInterface, 'mwx'), schedulerChannel, 0, schedulerInterface) + ) + logger.debug(f"System: Starting the marine weather scheduler to send marine weather updates at {schedulerTime} on Device:{schedulerInterface} Channel:{schedulerChannel}") + elif 'sysinfo' in schedulerValue: + schedule.every(schedulerIntervalInt).hours.do( + lambda: send_message(sysinfo('', 0, schedulerInterface, False), schedulerChannel, 0, schedulerInterface) + ) + logger.debug(f"System: Starting the sysinfo scheduler to send system information every {schedulerIntervalInt} hours on Device:{schedulerInterface} Channel:{schedulerChannel}") + elif 'tide' in schedulerValue: + schedule.every().day.at(schedulerTime).do( + lambda: send_message(handle_tide(0, schedulerInterface, schedulerChannel), schedulerChannel, 0, schedulerInterface) + ) + logger.debug(f"System: Starting the tide scheduler to send tide information at {schedulerTime} on Device:{schedulerInterface} Channel:{schedulerChannel}") + elif 'sun' in schedulerValue: + schedule.every().day.at(schedulerTime).do( + lambda: send_message(handle_sun(0, schedulerInterface, schedulerChannel), schedulerChannel, 0, schedulerInterface) + ) + logger.debug(f"System: Starting the sun scheduler to send sun information at {schedulerTime} on Device:{schedulerInterface} Channel:{schedulerChannel}") elif 'custom' in schedulerValue: try: from modules.custom_scheduler import setup_custom_schedules # type: ignore