Skip to main content

Scheduler Service

Overview

The SchedulerService manages periodic background jobs that process queued messages, handle automation, and maintain system state.

SchedulerService

APScheduler-based async task scheduler with multiple concurrent jobs.

Jobs

1. Expire Pending Orders (5 minute interval)

  • Checks for orders exceeding pending timeout
  • Marks expired orders as cancelled
  • Frees up reserved inventory

2. Process MQTT Messages (10 second interval)

  • Pulls batches from message_queue
  • Invokes MQTTMessageProcessor
  • Persists feed data to FeedValue table
  • Updates Feed.last_value
  • Single database transaction per batch

3. Process Device Status Messages (500ms interval, Priority)

  • Pulls batches from device_status_queue
  • Invokes DeviceStatusProcessor
  • Updates Device status, temperature, humidity, location, last_seen
  • Broadcasts updates via WebSocket

4. Media Schedule Trigger (5 second interval)

  • Queries pending MediaSchedule records
  • Checks if trigger_time <= current time
  • Builds MQTT message with ScheduleMessageBuilder
  • Publishes message to device topic
  • Updates schedule status as triggered

Configuration

  • max_instances: 1 per job (prevents concurrent runs of same job)
  • Startup: Initialized during app lifespan, started after MQTT service
  • Shutdown: Gracefully stopped during app shutdown