Repository navigation
Expand file tree
/
Copy pathconfig.yml.example
More file actions
500 lines (439 loc) · 15 KB
/
Copy pathconfig.yml.example
File metadata and controls
500 lines (439 loc) · 15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
# LED Panel Display Configuration
# Copy this file to config.yml and fill in your values
# === Display Adapter Settings ===
display:
# Which adapter to use (see adapters.json for available options)
adapter: ipixel
# iPixel-specific panel settings
ipixel:
# Panel dimensions (width x height per panel)
# Common sizes:
# 64x20 - Standard (default)
# 64x32 - Tall variant
# 64x64 - Large square
# 32x16 - Small
# 20x20 - Minimal
size_width: 64
size_height: 20
# Panel BLE addresses (list of addresses, find using a BLE scanner app)
# Number of addresses determines panel count automatically
# Examples:
# - Single panel: ["ADDR-1"]
# - Dual panel: ["ADDR-1", "ADDR-2"]
# - Triple panel: ["ADDR-1", "ADDR-2", "ADDR-3"]
ble_addresses:
- "YOUR-PANEL-1-ADDRESS"
- "YOUR-PANEL-2-ADDRESS"
# BLE characteristic UUID (optional)
# Default works for most iPixel LED panels
# Only change if your panels use a different UUID
ble_uuid_write: "0000fa02-0000-1000-8000-00805f9b34fb"
# === Weather Settings ===
weather:
# Get free API key from: https://openweathermap.org/api
api_key: "your-api-key-here"
# zipcode for weather display (format: "12345)
zipcode: "44444"
# Temperature units (imperial or metric)
units: "imperial"
# Weather forecast mode (daily or hourly)
forecast_mode: "daily"
# Show weather icons (true/false)
show_icons: true
# How often to check weather API (seconds, default: 1800 = 30min)
check_interval: 1800
# PNG refresh interval (seconds, keeps display visible)
refresh_interval: 2
# === Stocks Settings ===
stocks:
# Stock symbols to track (comma-separated)
# Examples: AAPL, GOOGL, MSFT, TSLA, SPY, QQQ, AMZN
symbols: [AAPL,GOOGL,MSFT,TSLA]
# How often to check stock prices (seconds, default: 300 = 5min)
check_interval: 300
# PNG refresh interval (seconds, keeps display visible)
refresh_interval: 2
# === Sports Settings ===
sports:
# Teams to follow (by league and abbreviation)
# Note: Teams are league-specific, so ATL in MLB won't match ATL in NBA
# Examples: DET, BOS, NYR, CHI, ATL, etc.
teams:
nhl: ["DET"]
nba: ["DET"]
nfl: ["DET"]
mlb: ["DET"]
# Test mode: Pick 2 random live games (useful for testing layouts)
# Set to true to test layouts when your teams aren't playing
test_mode: false
# How often to check for score updates (seconds, default: 10)
check_interval: 10
# Show team logos in sports mode
# Logos automatically size based on games_per_page:
# 1 game: 16x16 logos (full screen)
# 2 games: 8x8 logos (stacked per panel)
# 3-4 games: No logos (compact text only)
show_logos: true
# Sports display modes: live (in-progress games), upcoming (scheduled games)
# Options: live, upcoming
# - live: Show games currently in progress
# - upcoming: Show games scheduled but not started
# When both are enabled, shows live games if available, otherwise upcoming
modes:
- live
- upcoming
# Live games source: Controls what live games to display
# Options:
# - my_teams: Only show games for your configured teams (default)
# - all_leagues: Show all live games from specified leagues (cycles through them)
live_games_source: "my_teams"
# When live_games_source is "all_leagues", specify which leagues to include
# Available leagues: NHL, NBA, NFL, MLB
# The display will cycle through live games from these leagues
# Example: ["NHL", "NBA"] - shows all live games from NHL and NBA
live_games_leagues:
- NHL
- NBA
# Games cycling settings (for all_leagues mode with many games)
# How many games to show at once:
# 1 = Full screen, large logos (16x16), period & clock
# 2 = Stacked vertical per panel, small logos (8x8), period & clock
# 3-4 = Compact horizontal, no logos, scores only
games_per_page: 2
# How many seconds to show each page of games before cycling to next
games_cycle_interval: 10
# PNG refresh interval (seconds, keeps display visible)
refresh_interval: 2
# === Ticker Settings ===
ticker:
# Layout mode: How to display tickers
# - single: One ticker across all panels (combined display)
# - multi: Independent tickers per panel (different content on each!)
layout: multi # Options: single, multi
# Scroll speed (pixels per frame, 2-6 recommended for smoothness)
# 2-3: Very smooth | 4-5: Moderate | 6+: Fast but choppy
scroll_speed: 3
# Refresh ticker content every N seconds
refresh_interval: 30
# ===== SINGLE TICKER MODE (layout: single) =====
# One continuous ticker across all panels
single:
modes:
- sports # [H] DET @ BOS 7PM
- stocks # PLTR $25.30 ▲18%
# - weather # Mon: 45°F Cloudy
sports:
source: my_teams # Options: my_teams, all_live, all_upcoming, all
max_games: 10
stocks:
source: my_symbols # Options: my_symbols, gainers, losers, active, mixed
max_symbols: 10
# ===== MULTI-PANEL TICKER MODE (layout: multi) =====
# One panel scrolls (ticker), other panel shows static content
# This prevents eye strain from two scrolling tickers!
ticker_panel: 0 # Which panel scrolls (0=top, 1=bottom)
static_panel: 1 # Which panel shows static content
# Ticker panel configuration (scrolling)
ticker:
modes:
- sports # Can combine: [sports, stocks]
sports:
source: all_live # Options: my_teams, all_live, all_upcoming, all
max_games: 15
stocks:
source: gainers # If stocks included
max_symbols: 10
# Static panel configuration (not scrolling)
static:
mode: stocks # What to show: sports, stocks, weather, clock
# Each mode uses its normal static rendering
sports:
source: my_teams # Upcoming games for your teams
max_games: 4 # Top 4 fit in panel
stocks:
source: gainers # Top gainers
max_symbols: 4 # Top 4 fit in panel
weather:
# Shows current weather (uses normal weather display)
clock:
# Shows clock (uses normal clock display)
# Examples:
#
# Sports bar: Ticker shows all live, static shows gainers
# ticker_panel: 0
# ticker: { modes: [sports], sports: { source: all_live, max_games: 20 }}
# static: { mode: stocks, stocks: { source: gainers, max_symbols: 4 }}
#
# Personal: Ticker shows your teams, static shows your stocks
# ticker_panel: 1 # Bottom scrolls
# ticker: { modes: [sports], sports: { source: my_teams }}
# static: { mode: clock } # Top shows clock
# Data source options:
#
# Sports sources:
# my_teams: Only your configured teams
# all_live: ALL live games across all leagues
# all_upcoming: ALL upcoming games today
# all: Everything (live + upcoming)
#
# Stocks sources:
# my_symbols: Your configured symbols
# gainers: Top % gainers today (yfinance screener)
# losers: Top % losers today (yfinance screener)
# active: Most actively traded (yfinance screener)
# mixed: Gainers + losers interleaved
# trending: Trending stocks (placeholder)
# === Display Settings ===
display_modes:
# Auto-switch to sports when live games detected (true/false)
sports_priority: true
# Modes to cycle through (list: sports, clock, weather, stocks, ticker)
# Note: Configure what sports shows via sports.modes (live/upcoming)
# Note: Configure what ticker shows via ticker.modes
cycle_modes:
- sports
- clock
- weather
- stocks
- ticker
# How long to show each mode before cycling (seconds)
cycle_seconds: 15
# Clock theme (stranger_things, classic, or matrix)
clock_theme: "stranger_things"
# 24-hour clock format (true/false)
clock_24h: false
# How often to check for mode changes (seconds, default: 2)
mode_check_interval: 2
# === Clock Themes ===
# Define custom clock display themes
# Available built-in themes: stranger_things, classic, matrix
# Add custom themes below to override or extend the built-in ones
clock_themes:
my_custom_theme:
bg_color: [0, 0, 0] # Background color (RGB)
time_color: [255, 100, 0] # Time display color (RGB)
date_color: [200, 150, 100] # Date display color (RGB)
font_time: "./fonts/PixelOperator.ttf" # Font file for time
font_date: "./fonts/PixelOperator.ttf" # Font file for date
time_size: 16 # Time font size
date_size: 8 # Date font size
glow: true # Enable glow effect
glow_color: [50, 20, 0] # Glow color (RGB)
neon_blue:
bg_color: [0, 0, 0]
time_color: [0, 200, 255]
date_color: [0, 150, 200]
font_time: "./fonts/PixelOperator.ttf"
font_date: "./fonts/PixelOperator.ttf"
time_size: 16
date_size: 8
glow: true
glow_color: [0, 0, 100]
fire:
bg_color: [0, 0, 0]
time_color: [255, 100, 0]
date_color: [200, 50, 0]
font_time: "./fonts/PixelOperator.ttf"
font_date: "./fonts/PixelOperator.ttf"
time_size: 16
date_size: 8
glow: true
glow_color: [100, 0, 0]
# === Layout Templates (OPTIONAL - Advanced Feature) ===
# Define custom layouts for different display modes and panel configurations
# If not specified, the system uses smart defaults optimized for dual 20×64 panels
#
# Use layout templates to customize element positioning for different panel sizes:
# - Single 64×64 panel: More space for larger logos and text
# - Single 32×16 panel: Need compact layouts
# - Three+ panels: Can show more items simultaneously
#
# Each mode (sports, stocks) can have templates for different item counts:
# - one_game / one_stock: Single item, full screen
# - two_games / two_stocks: Two items, stacked or side-by-side
# - three_games / four_stocks: Multiple compact items
#
# IMPORTANT: Coordinates are in pixels, origin (0,0) is top-left
# Colors can be: RGB tuples [R,G,B], or special names:
# - "white", "black", "red", "green", "blue", "yellow", "orange", "cyan"
# - "away_team", "home_team" (uses team colors)
# - "change_color" (green/red based on stock direction)
# - "time" (yellow for game clock/period)
layout_templates:
# === SPORTS LAYOUT TEMPLATES ===
# Customize how games are displayed based on count
sports:
logo_enabled: true # Set to false to disable logos completely
# Layout for 1 game (full screen display)
one_game:
# Away team (top half)
away_logo:
x: 2
y: 2
width: 16
height: 16
away_score:
x: 22
y: 2
font_size: 14
color: "away_team"
# Home team (bottom half)
home_logo:
x: 2
y: 22
width: 16
height: 16
home_score:
x: 22
y: 22
font_size: 14
color: "home_team"
# Game status (top-right)
period:
x: 3 # Offset from right edge (when align: right)
y: 2
font_size: 8
color: "time"
align: "right" # Options: left, right, center
clock:
x: 3
y: 11
font_size: 8
color: "time"
align: "right"
# Layout for 2 games (20 pixels per game)
two_games:
game_height: 20 # Each game gets 20 pixels vertically
game_template: # Template repeats for each game
# Combined text format (e.g., "DET 5")
away_text:
x: 2
y: 1
font_size: 10
color: "away_team"
format: "{abbr} {score}" # Available: {abbr}, {name}, {score}
home_text:
x: 2
y: 11
font_size: 10
color: "home_team"
format: "{abbr} {score}"
period:
x: 4
y: 1
font_size: 8
color: "time"
align: "right"
clock:
x: 4
y: 11
font_size: 8
color: "time"
align: "right"
# Layout for 3-4 games (compact, 10 pixels per game)
four_games:
game_height: 10
game_template:
away_text:
x: 1
y: 0
font_size: 10
color: "away_team"
format: "{abbr} {score}"
home_text:
x: 32
y: 0
font_size: 10
color: "home_team"
format: "{abbr} {score}"
align: "right"
# === STOCKS LAYOUT TEMPLATES ===
# Customize how stock quotes are displayed
stocks:
# Layout for 1 stock (large display)
one_stock:
symbol:
x: 2
y: 2
font_size: 12
color: "white"
price:
x: 2
y: 14
font_size: 14
color: "change_color" # Green/red based on up/down
change:
x: 2
y: 28
font_size: 10
color: "change_color"
# Layout for 2 stocks (20 pixels per stock)
two_stocks:
stock_height: 20
stock_template:
symbol:
x: 2
y: 0
font_size: 8
color: "white"
price:
x: 22
y: 0
font_size: 8
color: "change_color"
change:
x: 48
y: 0
font_size: 8
color: "change_color"
# Layout for 4 stocks (compact, 10 pixels per stock)
four_stocks:
stock_height: 10
stock_template:
symbol:
x: 1
y: 0
font_size: 8
color: "white"
price:
x: 18
y: 0
font_size: 8
color: "change_color"
change:
x: 42
y: 0
font_size: 8
color: "change_color"
# === EXAMPLE: Custom Layout for Single 64×64 Panel ===
# Uncomment and customize for a large square panel:
# layout_templates:
# sports:
# logo_enabled: true
# one_game:
# away_logo: { x: 4, y: 4, width: 24, height: 24 }
# away_name: { x: 32, y: 8, font_size: 14, color: "away_team" }
# away_score: { x: 32, y: 24, font_size: 16, color: "away_team" }
# home_logo: { x: 4, y: 36, width: 24, height: 24 }
# home_name: { x: 32, y: 40, font_size: 14, color: "home_team" }
# home_score: { x: 32, y: 56, font_size: 16, color: "home_team" }
# period: { x: 4, y: 4, font_size: 10, color: "time", align: "right" }
# clock: { x: 4, y: 16, font_size: 10, color: "time", align: "right" }
#
# two_games:
# game_height: 32
# game_template:
# away_logo: { x: 2, y: 2, width: 12, height: 12 }
# away_text: { x: 16, y: 4, font_size: 12, color: "away_team", format: "{abbr} {score}" }
# home_logo: { x: 2, y: 16, width: 12, height: 12 }
# home_text: { x: 16, y: 18, font_size: 12, color: "home_team", format: "{abbr} {score}" }
# period: { x: 4, y: 4, font_size: 9, color: "time", align: "right" }
# clock: { x: 4, y: 18, font_size: 9, color: "time", align: "right" }
# === Power Management ===
power:
# Automatically turn off display at night (true/false)
auto_off: true
# Turn off time (24-hour format, e.g., "23:00")
off_time: "23:00"
# Turn on time (24-hour format, e.g., "07:00")
on_time: "07:00"