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