Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 26 additions & 3 deletions plugins.json
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,7 @@
{
"id": "on-air",
"name": "On Air Light",
"description": "Retro broadcast ON AIR tally light. Activate remotely via MQTT or Home Assistant to signal you're on a call, recording, or live stays on until you turn it off.",
"description": "Retro broadcast ON AIR tally light. Activate remotely via MQTT or Home Assistant to signal you're on a call, recording, or live \u2014 stays on until you turn it off.",
"author": "ChuckBuilds",
"category": "utility",
"tags": [
Expand Down Expand Up @@ -654,7 +654,7 @@
{
"id": "plex-marquee",
"name": "Plex Marquee",
"description": "Cinema marquee display powered by Fanart.tv shows banner art for whatever is currently playing on Plex, with a web portal to browse and pick banners for your library.",
"description": "Cinema marquee display powered by Fanart.tv \u2014 shows banner art for whatever is currently playing on Plex, with a web portal to browse and pick banners for your library.",
"author": "ant456",
"category": "media",
"tags": [
Expand Down Expand Up @@ -972,6 +972,29 @@
"verified": false,
"screenshot": "",
"latest_version": "1.0.0"
},
{
"id": "nrl-scoreboard",
"name": "NRL Scoreboard",
"description": "Live, recent, and upcoming NRL (National Rugby League) games with real-time scores and game status.",
"author": "ChuckBuilds",
"category": "sports",
"tags": [
"nrl",
"rugby-league",
"sports",
"scoreboard",
"live-scores"
],
"repo": "https://github.com/ChuckBuilds/ledmatrix-plugins",
"branch": "main",
"plugin_path": "plugins/nrl-scoreboard",
"stars": 0,
"downloads": 0,
"last_updated": "2026-07-10",
"verified": true,
"screenshot": "",
"latest_version": "1.0.0"
}
]
}
}
146 changes: 146 additions & 0 deletions plugins/nrl-scoreboard/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# pipenv
Pipfile.lock

# PEP 582
__pypcache__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# OS specific files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# IDE files
.vscode/
.idea/
*.swp
*.swo
*~

# Project specific
*.log
config.json
*.pem
17 changes: 17 additions & 0 deletions plugins/nrl-scoreboard/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007

Copyright (C) 2025 LEDMatrix Team

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
106 changes: 106 additions & 0 deletions plugins/nrl-scoreboard/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# NRL Scoreboard Plugin

Live, recent, and upcoming **NRL (National Rugby League)** games on your
LEDMatrix display, sourced from ESPN's public rugby-league API (no API key
required).

This plugin is a single-league fork of the `soccer-scoreboard` plugin and keeps
full feature parity: switch or scroll display, live-game priority, goal/win
celebrations, dynamic per-mode durations, and Vegas continuous-scroll support.

## Display Modes

The plugin exposes three display modes you can enable independently:

- `nrl_live` — games currently in progress (running clock, 1H/2H/HALF/ET)
- `nrl_recent` — recently completed games with final scores
- `nrl_upcoming` — scheduled games with date/time

Each mode can be shown as **switch** (one game at a time, timed) or **scroll**
(all games scroll horizontally at high FPS).

## Data Source & the `3` league-slug quirk

Games come from:

```
https://site.api.espn.com/apis/site/v2/sports/rugby-league/3/scoreboard
```

Note the `3` in the path. That is **ESPN's internal numeric slug for the NRL**
under the `rugby-league` sport — it is *not* a typo and must **not** be changed
to `nrl`. The human-facing web path is `/nrl/`, but the API path segment is the
literal string `3` (confirmed via
`site.web.api.espn.com/apis/v2/scoreboard/header?sport=rugby-league`, which lists
NRL as `id:8370, abbreviation:"NRL", slug:"3"`). Changing `3` to `nrl` makes the
endpoint 404 and the plugin silently stops fetching games. The code marks every
point where `3` is used with a comment to protect against this.

## Scoring & period model

NRL is played over two 40-minute halves (not quarters). ESPN reports
`status.period` as `1` or `2` and a running `displayClock` that counts **up** in
minutes (e.g. `40'`, `80'`), just like soccer. The plugin renders period text as:

- `1H` / `2H` — first / second half (with the running clock, e.g. `2H 63'`)
- `HALF` — half-time
- `ET` — golden-point extra time (period ≥ 3)
- `Final` — completed game
- start time — upcoming games

Each team has a single running integer score (the ESPN `score` field).

## Team logos

Team logos are downloaded automatically from ESPN's CDN and cached locally —
there are no bundled logo assets to manage. If a download fails, a text
placeholder is generated from the team abbreviation.

## Configuration

Configuration lives under the `nrl-scoreboard` key in `config/config.json`. Key
options (see `config_schema.json` for the full list, types, and defaults):

| Key | Description |
|---|---|
| `enabled` | Master on/off switch |
| `favorite_teams` | List of team names/abbreviations to prioritize |
| `exclude_teams` | Teams to hide (spoiler protection) |
| `display_modes` | Toggle `live`/`recent`/`upcoming` and set `*_display_mode` to `switch` or `scroll` |
| `live_priority` | Interrupt the rotation to show live games immediately |
| `live_game_duration` / `recent_game_duration` / `upcoming_game_duration` | Per-game on-screen time (seconds) |
| `non_favorite_live_game_duration` | Shorter turn for live games without a favorite team |
| `recent_games_to_show` / `upcoming_games_to_show` | How many games per mode |
| `show_records` / `show_odds` / `show_ranking` | Extra info overlays |
| `celebration_enabled` / `celebration_duration` | Goal/win celebration takeover |
| `dynamic_duration` | Auto-size mode duration from the number of games |
| `mode_durations` | Fixed total time per mode |
| `update_interval_seconds` / `live_update_interval` | Data refresh cadence |
| `background_service` | Fetch timeout / retries / priority |
| `customization` | Fonts, colors, and layout for the scorebug |

### Example

```json
{
"nrl-scoreboard": {
"enabled": true,
"favorite_teams": ["PEN", "BRI"],
"display_modes": {
"live": true,
"live_display_mode": "switch",
"recent": true,
"recent_display_mode": "scroll",
"upcoming": true,
"upcoming_display_mode": "scroll"
},
"live_priority": true,
"recent_games_to_show": 3,
"upcoming_games_to_show": 5
}
}
```

## License

See `LICENSE`.
Loading
Loading