15 KiB
Configuration Guide
The LEDMatrix system is configured through JSON files that control every aspect of the display. This guide covers all configuration options and their effects.
Configuration Files
Main Configuration (config/config.json)
Contains all non-sensitive settings for the system.
Secrets Configuration (config/config_secrets.json)
Contains API keys and sensitive credentials.
System Configuration
Display Hardware Settings
{
"display": {
"hardware": {
"rows": 32,
"cols": 64,
"chain_length": 2,
"parallel": 1,
"brightness": 95,
"hardware_mapping": "adafruit-hat-pwm",
"scan_mode": 0,
"pwm_bits": 9,
"pwm_dither_bits": 1,
"pwm_lsb_nanoseconds": 130,
"disable_hardware_pulsing": false,
"inverse_colors": false,
"show_refresh_rate": false,
"limit_refresh_rate_hz": 120
},
"runtime": {
"gpio_slowdown": 3
}
}
}
Hardware Settings Explained:
rows/cols: Physical LED matrix dimensions (32x64 for 2 panels)chain_length: Number of LED panels connected (2 for 128x32 total)parallel: Number of parallel chains (usually 1)brightness: Display brightness (0-100)hardware_mapping:"adafruit-hat-pwm": With jumper mod (recommended)"adafruit-hat": Without jumper mod
pwm_bits: Color depth (8-11, higher = better colors)gpio_slowdown: Timing adjustment (3 for Pi 3, 4 for Pi 4)
Display Durations
{
"display": {
"display_durations": {
"clock": 15,
"weather": 30,
"stocks": 30,
"hourly_forecast": 30,
"daily_forecast": 30,
"stock_news": 20,
"odds_ticker": 60,
"nhl_live": 30,
"nhl_recent": 30,
"nhl_upcoming": 30,
"nba_live": 30,
"nba_recent": 30,
"nba_upcoming": 30,
"nfl_live": 30,
"nfl_recent": 30,
"nfl_upcoming": 30,
"ncaa_fb_live": 30,
"ncaa_fb_recent": 30,
"ncaa_fb_upcoming": 30,
"ncaa_baseball_live": 30,
"ncaa_baseball_recent": 30,
"ncaa_baseball_upcoming": 30,
"calendar": 30,
"youtube": 30,
"mlb_live": 30,
"mlb_recent": 30,
"mlb_upcoming": 30,
"milb_live": 30,
"milb_recent": 30,
"milb_upcoming": 30,
"text_display": 10,
"soccer_live": 30,
"soccer_recent": 30,
"soccer_upcoming": 30,
"ncaam_basketball_live": 30,
"ncaam_basketball_recent": 30,
"ncaam_basketball_upcoming": 30,
"music": 30,
"of_the_day": 40
}
}
}
Duration Settings:
- Each value controls how long (in seconds) that display mode shows
- Higher values = more time for that content
- Total rotation time = sum of all enabled durations
System Settings
{
"web_display_autostart": true,
"schedule": {
"enabled": true,
"start_time": "07:00",
"end_time": "23:00"
},
"timezone": "America/Chicago",
"location": {
"city": "Dallas",
"state": "Texas",
"country": "US"
}
}
System Settings Explained:
web_display_autostart: Start web interface automaticallyschedule: Control when display is activetimezone: System timezone for accurate timeslocation: Default location for weather and other location-based services
Display Manager Configurations
Clock Configuration
{
"clock": {
"enabled": false,
"format": "%I:%M %p",
"update_interval": 1
}
}
Clock Settings:
enabled: Enable/disable clock displayformat: Time format string (Python strftime)update_interval: Update frequency in seconds
Common Time Formats:
"%I:%M %p"→12:34 PM"%H:%M"→14:34"%I:%M:%S %p"→12:34:56 PM
Weather Configuration
{
"weather": {
"enabled": false,
"update_interval": 1800,
"units": "imperial",
"display_format": "{temp}°F\n{condition}"
}
}
Weather Settings:
enabled: Enable/disable weather displayupdate_interval: Update frequency in seconds (1800 = 30 minutes)units:"imperial"(Fahrenheit) or"metric"(Celsius)display_format: Custom format string for weather display
Weather Display Modes:
- Current weather with icon
- Hourly forecast (next 24 hours)
- Daily forecast (next 7 days)
Stocks Configuration
{
"stocks": {
"enabled": false,
"update_interval": 600,
"scroll_speed": 1,
"scroll_delay": 0.01,
"toggle_chart": false,
"symbols": ["ASTS", "SCHD", "INTC", "NVDA", "T", "VOO", "SMCI"]
},
"crypto": {
"enabled": false,
"update_interval": 600,
"symbols": ["BTC-USD", "ETH-USD"]
}
}
Stock Settings:
enabled: Enable/disable stock displayupdate_interval: Update frequency in seconds (600 = 10 minutes)scroll_speed: Pixels per scroll updatescroll_delay: Delay between scroll updatestoggle_chart: Show/hide mini price chartssymbols: Array of stock symbols to display
Crypto Settings:
enabled: Enable/disable crypto displaysymbols: Array of crypto symbols (use-USDsuffix)
Stock News Configuration
{
"stock_news": {
"enabled": false,
"update_interval": 3600,
"scroll_speed": 1,
"scroll_delay": 0.01,
"max_headlines_per_symbol": 1,
"headlines_per_rotation": 2
}
}
News Settings:
enabled: Enable/disable news displayupdate_interval: Update frequency in secondsmax_headlines_per_symbol: Max headlines per stockheadlines_per_rotation: Headlines shown per rotation
Music Configuration
{
"music": {
"enabled": true,
"preferred_source": "ytm",
"YTM_COMPANION_URL": "http://192.168.86.12:9863",
"POLLING_INTERVAL_SECONDS": 1
}
}
Music Settings:
enabled: Enable/disable music displaypreferred_source:"spotify"or"ytm"YTM_COMPANION_URL: YouTube Music companion server URLPOLLING_INTERVAL_SECONDS: How often to check for updates
Calendar Configuration
{
"calendar": {
"enabled": false,
"credentials_file": "credentials.json",
"token_file": "token.pickle",
"update_interval": 3600,
"max_events": 3,
"calendars": ["birthdays"]
}
}
Calendar Settings:
enabled: Enable/disable calendar displaycredentials_file: Google API credentials filetoken_file: Authentication token fileupdate_interval: Update frequency in secondsmax_events: Maximum events to displaycalendars: Array of calendar IDs to monitor
Sports Configurations
Common Sports Settings
All sports managers share these common settings:
{
"nhl_scoreboard": {
"enabled": false,
"live_priority": true,
"live_game_duration": 20,
"show_odds": true,
"test_mode": false,
"update_interval_seconds": 3600,
"live_update_interval": 30,
"recent_update_interval": 3600,
"upcoming_update_interval": 3600,
"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
}
}
}
Common Sports Settings:
enabled: Enable/disable this sportlive_priority: Give live games priority over other contentlive_game_duration: How long to show live gamesshow_odds: Display betting odds (where available)test_mode: Use test data instead of live APIupdate_interval_seconds: How often to fetch new datalive_update_interval: How often to update live gamesshow_favorite_teams_only: Only show games for favorite teamsfavorite_teams: Array of team abbreviationslogo_dir: Directory containing team logosshow_records: Display team win/loss recordsdisplay_modes: Enable/disable specific display modes
Football-Specific Settings
NFL and NCAA Football use game-based fetching:
{
"nfl_scoreboard": {
"enabled": false,
"recent_games_to_show": 0,
"upcoming_games_to_show": 2,
"favorite_teams": ["TB", "DAL"]
}
}
Football Settings:
recent_games_to_show: Number of recent games to displayupcoming_games_to_show: Number of upcoming games to display
Soccer Configuration
{
"soccer_scoreboard": {
"enabled": false,
"recent_game_hours": 168,
"favorite_teams": ["LIV"],
"leagues": ["eng.1", "esp.1", "ger.1", "ita.1", "fra.1", "uefa.champions", "usa.1"]
}
}
Soccer Settings:
recent_game_hours: Hours back to show recent gamesleagues: Array of league codes to monitor
Odds Ticker Configuration
{
"odds_ticker": {
"enabled": false,
"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
}
}
Odds Ticker Settings:
enabled: Enable/disable odds tickershow_favorite_teams_only: Only show odds for favorite teamsgames_per_favorite_team: Games per team to showmax_games_per_league: Maximum games per leagueenabled_leagues: Leagues to include in tickersort_order:"soonest"or"latest"future_fetch_days: Days ahead to fetch gamesshow_channel_logos: Display broadcast network logos
Custom Display Configurations
Text Display
{
"text_display": {
"enabled": false,
"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
}
}
Text Display Settings:
enabled: Enable/disable text displaytext: Text to displayfont_path: Path to TTF font filefont_size: Font size in pixelsscroll: Enable/disable scrollingscroll_speed: Scroll speed in pixelstext_color: RGB color for textbackground_color: RGB color for backgroundscroll_gap_width: Gap between text repetitions
YouTube Display
{
"youtube": {
"enabled": false,
"update_interval": 3600
}
}
YouTube Settings:
enabled: Enable/disable YouTube statsupdate_interval: Update frequency in seconds
Of The Day Display
{
"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"
}
}
}
}
Of The Day Settings:
enabled: Enable/disable of the day displaydisplay_rotate_interval: How long to show each categoryupdate_interval: Update frequency in secondssubtitle_rotate_interval: How long to show subtitlescategory_order: Order of categories to displaycategories: Configuration for each category
API Configuration (config_secrets.json)
Weather API
{
"weather": {
"api_key": "your_openweathermap_api_key"
}
}
YouTube API
{
"youtube": {
"api_key": "your_youtube_api_key",
"channel_id": "your_channel_id"
}
}
Music APIs
{
"music": {
"SPOTIFY_CLIENT_ID": "your_spotify_client_id",
"SPOTIFY_CLIENT_SECRET": "your_spotify_client_secret",
"SPOTIFY_REDIRECT_URI": "http://127.0.0.1:8888/callback"
}
}
Configuration Best Practices
Performance Optimization
-
Update Intervals: Balance between fresh data and API limits
- Weather: 1800 seconds (30 minutes)
- Stocks: 600 seconds (10 minutes)
- Sports: 3600 seconds (1 hour)
- Music: 1 second (real-time)
-
Display Durations: Balance content visibility
- Live sports: 20-30 seconds
- Weather: 30 seconds
- Stocks: 30-60 seconds
- Clock: 15 seconds
-
Favorite Teams: Reduce API calls by focusing on specific teams
Caching Strategy
{
"cache_settings": {
"persistent_cache": true,
"cache_directory": "/var/cache/ledmatrix",
"fallback_cache": "/tmp/ledmatrix_cache"
}
}
Error Handling
- Failed API calls use cached data
- Network timeouts are handled gracefully
- Invalid data is filtered out
- Logging provides debugging information
Configuration Validation
Required Settings
- Hardware Configuration: Must match your physical setup
- API Keys: Required for enabled services
- Location: Required for weather and timezone
- Team Abbreviations: Must match official team codes
Optional Settings
- Display Durations: Defaults provided if missing
- Update Intervals: Defaults provided if missing
- Favorite Teams: Can be empty for all teams
- Custom Text: Can be any string
Configuration Examples
Minimal Configuration
{
"display": {
"hardware": {
"rows": 32,
"cols": 64,
"chain_length": 2,
"brightness": 90,
"hardware_mapping": "adafruit-hat-pwm"
}
},
"clock": {
"enabled": true
},
"weather": {
"enabled": true
}
}
Full Sports Configuration
{
"nhl_scoreboard": {
"enabled": true,
"favorite_teams": ["TB", "DAL"],
"show_favorite_teams_only": true
},
"nba_scoreboard": {
"enabled": true,
"favorite_teams": ["DAL"],
"show_favorite_teams_only": true
},
"nfl_scoreboard": {
"enabled": true,
"favorite_teams": ["TB", "DAL"],
"show_favorite_teams_only": true
},
"odds_ticker": {
"enabled": true,
"enabled_leagues": ["nfl", "nba", "mlb"]
}
}
Financial Focus Configuration
{
"stocks": {
"enabled": true,
"symbols": ["AAPL", "MSFT", "GOOGL", "TSLA", "NVDA"],
"update_interval": 300
},
"crypto": {
"enabled": true,
"symbols": ["BTC-USD", "ETH-USD", "ADA-USD"]
},
"stock_news": {
"enabled": true,
"update_interval": 1800
}
}
Troubleshooting Configuration
Common Issues
- No Display: Check hardware configuration
- No Data: Verify API keys and network
- Wrong Times: Check timezone setting
- Performance Issues: Reduce update frequencies
Validation Commands
# Validate JSON syntax
python3 -m json.tool config/config.json
# Check configuration loading
python3 -c "from src.config_manager import ConfigManager; c = ConfigManager(); print('Config valid')"
For detailed information about specific display managers, see the Display Managers page.