Files
LEDMatrix/wiki/WIKI_DISPLAY_MANAGERS.md
2025-08-09 11:04:39 -05:00

501 lines
11 KiB
Markdown

# Display Managers Guide
The LEDMatrix system uses a modular architecture where each feature is implemented as a separate "Display Manager". This guide covers all available display managers and their configuration options.
## Overview
Each display manager is responsible for:
1. **Data Fetching**: Retrieving data from APIs or local sources
2. **Data Processing**: Transforming raw data into displayable format
3. **Display Rendering**: Creating visual content for the LED matrix
4. **Caching**: Storing data to reduce API calls
5. **Configuration**: Managing settings and preferences
## Core Display Managers
### 🕐 Clock Manager (`src/clock.py`)
**Purpose**: Displays current time in various formats
**Configuration**:
```json
{
"clock": {
"enabled": true,
"format": "%I:%M %p",
"update_interval": 1
}
}
```
**Features**:
- Real-time clock display
- Configurable time format
- Automatic timezone handling
- Minimal resource usage
**Display Format**: `12:34 PM`
---
### 🌤️ Weather Manager (`src/weather_manager.py`)
**Purpose**: Displays current weather, hourly forecasts, and daily forecasts
**Configuration**:
```json
{
"weather": {
"enabled": true,
"update_interval": 1800,
"units": "imperial",
"display_format": "{temp}°F\n{condition}"
}
}
```
**Features**:
- Current weather conditions
- Hourly forecast (next 24 hours)
- Daily forecast (next 7 days)
- Weather icons and animations
- UV index display
- Wind speed and direction
- Humidity and pressure data
**Display Modes**:
- Current weather with icon
- Hourly forecast with temperature trend
- Daily forecast with high/low temps
---
### 💰 Stock Manager (`src/stock_manager.py`)
**Purpose**: Displays stock prices, crypto prices, and financial data
**Configuration**:
```json
{
"stocks": {
"enabled": true,
"update_interval": 600,
"scroll_speed": 1,
"scroll_delay": 0.01,
"toggle_chart": false,
"symbols": ["AAPL", "MSFT", "GOOGL", "TSLA"]
},
"crypto": {
"enabled": true,
"update_interval": 600,
"symbols": ["BTC-USD", "ETH-USD"]
}
}
```
**Features**:
- Real-time stock prices
- Cryptocurrency prices
- Price change indicators (green/red)
- Percentage change display
- Optional mini charts
- Scrolling ticker format
- Company/crypto logos
**Data Sources**:
- Yahoo Finance API for stocks
- Yahoo Finance API for crypto
- Automatic market hours detection
---
### 📰 Stock News Manager (`src/stock_news_manager.py`)
**Purpose**: Displays financial news headlines for configured stocks
**Configuration**:
```json
{
"stock_news": {
"enabled": true,
"update_interval": 3600,
"scroll_speed": 1,
"scroll_delay": 0.01,
"max_headlines_per_symbol": 1,
"headlines_per_rotation": 2
}
}
```
**Features**:
- Financial news headlines
- Stock-specific news filtering
- Scrolling text display
- Configurable headline limits
- Automatic rotation
---
### 🎵 Music Manager (`src/music_manager.py`)
**Purpose**: Displays currently playing music from Spotify or YouTube Music
**Configuration**:
```json
{
"music": {
"enabled": true,
"preferred_source": "ytm",
"YTM_COMPANION_URL": "http://192.168.86.12:9863",
"POLLING_INTERVAL_SECONDS": 1
}
}
```
**Features**:
- Spotify integration
- YouTube Music integration
- Album art display
- Song title and artist
- Playback status
- Real-time updates
**Supported Sources**:
- Spotify (requires API credentials)
- YouTube Music (requires YTMD companion server)
---
### 📅 Calendar Manager (`src/calendar_manager.py`)
**Purpose**: Displays upcoming Google Calendar events
**Configuration**:
```json
{
"calendar": {
"enabled": true,
"credentials_file": "credentials.json",
"token_file": "token.pickle",
"update_interval": 3600,
"max_events": 3,
"calendars": ["birthdays"]
}
}
```
**Features**:
- Google Calendar integration
- Event date and time display
- Event title (wrapped to fit display)
- Multiple calendar support
- Configurable event limits
---
### 🏈 Sports Managers
The system includes separate managers for each sports league:
#### NHL Managers (`src/nhl_managers.py`)
- **NHLLiveManager**: Currently playing games
- **NHLRecentManager**: Completed games (last 48 hours)
- **NHLUpcomingManager**: Scheduled games
#### NBA Managers (`src/nba_managers.py`)
- **NBALiveManager**: Currently playing games
- **NBARecentManager**: Completed games
- **NBAUpcomingManager**: Scheduled games
#### MLB Managers (`src/mlb_manager.py`)
- **MLBLiveManager**: Currently playing games
- **MLBRecentManager**: Completed games
- **MLBUpcomingManager**: Scheduled games
#### NFL Managers (`src/nfl_managers.py`)
- **NFLLiveManager**: Currently playing games
- **NFLRecentManager**: Completed games
- **NFLUpcomingManager**: Scheduled games
#### NCAA Managers
- **NCAA Football** (`src/ncaa_fb_managers.py`)
- **NCAA Baseball** (`src/ncaa_baseball_managers.py`)
- **NCAA Basketball** (`src/ncaam_basketball_managers.py`)
#### Soccer Managers (`src/soccer_managers.py`)
- **SoccerLiveManager**: Currently playing games
- **SoccerRecentManager**: Completed games
- **SoccerUpcomingManager**: Scheduled games
#### MiLB Managers (`src/milb_manager.py`)
- **MiLBLiveManager**: Currently playing games
- **MiLBRecentManager**: Completed games
- **MiLBUpcomingManager**: Scheduled games
**Common Sports Configuration**:
```json
{
"nhl_scoreboard": {
"enabled": true,
"live_priority": true,
"live_game_duration": 20,
"show_odds": true,
"test_mode": false,
"update_interval_seconds": 3600,
"live_update_interval": 30,
"show_favorite_teams_only": true,
"favorite_teams": ["TB"],
"logo_dir": "assets/sports/nhl_logos",
"show_records": true,
"display_modes": {
"nhl_live": true,
"nhl_recent": true,
"nhl_upcoming": true
}
}
}
```
**Sports Features**:
- Live game scores and status
- Team logos and records
- Game times and venues
- Odds integration (where available)
- Favorite team filtering
- Automatic game switching
- ESPN API integration
---
### 🎲 Odds Ticker Manager (`src/odds_ticker_manager.py`)
**Purpose**: Displays betting odds for upcoming sports games
**Configuration**:
```json
{
"odds_ticker": {
"enabled": true,
"show_favorite_teams_only": true,
"games_per_favorite_team": 1,
"max_games_per_league": 5,
"show_odds_only": false,
"sort_order": "soonest",
"enabled_leagues": ["nfl", "mlb", "ncaa_fb", "milb"],
"update_interval": 3600,
"scroll_speed": 1,
"scroll_delay": 0.01,
"loop": true,
"future_fetch_days": 50,
"show_channel_logos": true
}
}
```
**Features**:
- Multi-league support (NFL, NBA, MLB, NCAA)
- Spread, money line, and over/under odds
- Team logos display
- Scrolling text format
- Game time display
- ESPN API integration
---
### 🎨 Custom Display Managers
#### Text Display Manager (`src/text_display.py`)
**Purpose**: Displays custom text messages
**Configuration**:
```json
{
"text_display": {
"enabled": true,
"text": "Subscribe to ChuckBuilds",
"font_path": "assets/fonts/press-start-2p.ttf",
"font_size": 8,
"scroll": true,
"scroll_speed": 40,
"text_color": [255, 0, 0],
"background_color": [0, 0, 0],
"scroll_gap_width": 32
}
}
```
**Features**:
- Custom text messages
- Configurable fonts and colors
- Scrolling text support
- Static text display
- Background color options
#### YouTube Display Manager (`src/youtube_display.py`)
**Purpose**: Displays YouTube channel statistics
**Configuration**:
```json
{
"youtube": {
"enabled": true,
"update_interval": 3600
}
}
```
**Features**:
- Subscriber count display
- Video count display
- View count display
- YouTube API integration
#### Of The Day Manager (`src/of_the_day_manager.py`)
**Purpose**: Displays various "of the day" content
**Configuration**:
```json
{
"of_the_day": {
"enabled": true,
"display_rotate_interval": 20,
"update_interval": 3600,
"subtitle_rotate_interval": 10,
"category_order": ["word_of_the_day", "slovenian_word_of_the_day", "bible_verse_of_the_day"],
"categories": {
"word_of_the_day": {
"enabled": true,
"data_file": "of_the_day/word_of_the_day.json",
"display_name": "Word of the Day"
},
"slovenian_word_of_the_day": {
"enabled": true,
"data_file": "of_the_day/slovenian_word_of_the_day.json",
"display_name": "Slovenian Word of the Day"
},
"bible_verse_of_the_day": {
"enabled": true,
"data_file": "of_the_day/bible_verse_of_the_day.json",
"display_name": "Bible Verse of the Day"
}
}
}
}
```
**Features**:
- Word of the day
- Slovenian word of the day
- Bible verse of the day
- Rotating display categories
- Local JSON data files
---
## Display Manager Architecture
### Common Interface
All display managers follow a consistent interface:
```python
class DisplayManager:
def __init__(self, config, display_manager):
# Initialize with configuration and display manager
def update_data(self):
# Fetch and process new data
def display(self, force_clear=False):
# Render content to the display
def is_enabled(self):
# Check if manager is enabled
```
### Data Flow
1. **Configuration**: Manager reads settings from `config.json`
2. **Data Fetching**: Retrieves data from APIs or local sources
3. **Caching**: Stores data using `CacheManager`
4. **Processing**: Transforms data into display format
5. **Rendering**: Uses `DisplayManager` to show content
6. **Rotation**: Returns to main display controller
### Error Handling
- API failures fall back to cached data
- Network timeouts are handled gracefully
- Invalid data is filtered out
- Logging provides debugging information
## Configuration Best Practices
### Enable/Disable Managers
```json
{
"weather": {
"enabled": true // Set to false to disable
}
}
```
### Set Display Durations
```json
{
"display": {
"display_durations": {
"weather": 30, // 30 seconds
"stocks": 60, // 1 minute
"nhl_live": 20 // 20 seconds
}
}
}
```
### Configure Update Intervals
```json
{
"weather": {
"update_interval": 1800 // Update every 30 minutes
}
}
```
### Set Favorite Teams
```json
{
"nhl_scoreboard": {
"show_favorite_teams_only": true,
"favorite_teams": ["TB", "DAL"]
}
}
```
## Performance Considerations
### API Rate Limits
- Weather: 1000 calls/day (OpenWeatherMap)
- Stocks: 2000 calls/hour (Yahoo Finance)
- Sports: ESPN API (no documented limits)
- Music: Spotify/YouTube Music APIs
### Caching Strategy
- Data cached based on `update_interval`
- Cache persists across restarts
- Failed API calls use cached data
- Automatic cache invalidation
### Resource Usage
- Each manager runs independently
- Disabled managers use no resources
- Memory usage scales with enabled features
- CPU usage minimal during idle periods
## Troubleshooting Display Managers
### Common Issues
1. **No Data Displayed**: Check API keys and network connectivity
2. **Outdated Data**: Verify update intervals and cache settings
3. **Display Errors**: Check font files and display configuration
4. **Performance Issues**: Reduce update frequency or disable unused managers
### Debugging
- Enable logging for specific managers
- Check cache directory for data files
- Verify API credentials in `config_secrets.json`
- Test individual managers in isolation
---
*For detailed technical information about each display manager, see the [Display Manager Details](WIKI_DISPLAY_MANAGER_DETAILS.md) page.*