-
-
Notifications
You must be signed in to change notification settings - Fork 22
WIKI_CONFIGURATION
The LEDMatrix system is configured through JSON files that control every aspect of the display. This guide covers all configuration options and their effects.
Contains all non-sensitive settings for the system.
Contains API keys and sensitive credentials.
{
"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": {
"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
{
"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 automatically -
schedule: Control when display is active -
timezone: System timezone for accurate times -
location: Default location for weather and other location-based services
{
"clock": {
"enabled": false,
"format": "%I:%M %p",
"update_interval": 1
}
}Clock Settings:
-
enabled: Enable/disable clock display -
format: 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": {
"enabled": false,
"update_interval": 1800,
"units": "imperial",
"display_format": "{temp}Β°F\n{condition}"
}
}Weather Settings:
-
enabled: Enable/disable weather display -
update_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": {
"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 display -
update_interval: Update frequency in seconds (600 = 10 minutes) -
scroll_speed: Pixels per scroll update -
scroll_delay: Delay between scroll updates -
toggle_chart: Show/hide mini price charts -
symbols: Array of stock symbols to display
Crypto Settings:
-
enabled: Enable/disable crypto display -
symbols: Array of crypto symbols (use-USDsuffix)
{
"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 display -
update_interval: Update frequency in seconds -
max_headlines_per_symbol: Max headlines per stock -
headlines_per_rotation: Headlines shown per rotation
{
"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 display -
preferred_source:"spotify"or"ytm" -
YTM_COMPANION_URL: YouTube Music companion server URL -
POLLING_INTERVAL_SECONDS: How often to check for updates
{
"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 display -
credentials_file: Google API credentials file -
token_file: Authentication token file -
update_interval: Update frequency in seconds -
max_events: Maximum events to display -
calendars: Array of calendar IDs to monitor
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 sport -
live_priority: Give live games priority over other content -
live_game_duration: How long to show live games -
show_odds: Display betting odds (where available) -
test_mode: Use test data instead of live API -
update_interval_seconds: How often to fetch new data -
live_update_interval: How often to update live games -
show_favorite_teams_only: Only show games for favorite teams -
favorite_teams: Array of team abbreviations -
logo_dir: Directory containing team logos -
show_records: Display team win/loss records -
display_modes: Enable/disable specific display modes
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 display -
upcoming_games_to_show: Number of upcoming games to display
{
"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 games -
leagues: Array of league codes to monitor
{
"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 ticker -
show_favorite_teams_only: Only show odds for favorite teams -
games_per_favorite_team: Games per team to show -
max_games_per_league: Maximum games per league -
enabled_leagues: Leagues to include in ticker -
sort_order:"soonest"or"latest" -
future_fetch_days: Days ahead to fetch games -
show_channel_logos: Display broadcast network logos
{
"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 display -
text: Text to display -
font_path: Path to TTF font file -
font_size: Font size in pixels -
scroll: Enable/disable scrolling -
scroll_speed: Scroll speed in pixels -
text_color: RGB color for text -
background_color: RGB color for background -
scroll_gap_width: Gap between text repetitions
{
"youtube": {
"enabled": false,
"update_interval": 3600
}
}YouTube Settings:
-
enabled: Enable/disable YouTube stats -
update_interval: Update frequency in seconds
{
"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 display -
display_rotate_interval: How long to show each category -
update_interval: Update frequency in seconds -
subtitle_rotate_interval: How long to show subtitles -
category_order: Order of categories to display -
categories: Configuration for each category
{
"weather": {
"api_key": "your_openweathermap_api_key"
}
}{
"youtube": {
"api_key": "your_youtube_api_key",
"channel_id": "your_channel_id"
}
}{
"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"
}
}-
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
{
"cache_settings": {
"persistent_cache": true,
"cache_directory": "/var/cache/ledmatrix",
"fallback_cache": "/tmp/ledmatrix_cache"
}
}- Failed API calls use cached data
- Network timeouts are handled gracefully
- Invalid data is filtered out
- Logging provides debugging information
- 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
- 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
{
"display": {
"hardware": {
"rows": 32,
"cols": 64,
"chain_length": 2,
"brightness": 90,
"hardware_mapping": "adafruit-hat-pwm"
}
},
"clock": {
"enabled": true
},
"weather": {
"enabled": true
}
}{
"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"]
}
}{
"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
}
}- No Display: Check hardware configuration
- No Data: Verify API keys and network
- Wrong Times: Check timezone setting
- Performance Issues: Reduce update frequencies
# 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.