led-ticker-pool
A pool water-temperature monitor widget for led-ticker, backed by an InfluxDB v2 server (e.g. pool_monitor). It's a led-ticker plugin — installing this package contributes a pool.monitor widget you reference in your led-ticker config.
It cycles four screens — a title card, today's current temperature with a trend arrow (^/v/-) and hi/lo, a 7-day mean with hi/lo, and a season (current-year) hi/lo. Temperature is zone-colored — blue below 70°F, green 70–79°F, orange 80–89°F, red 90°F+ — so the comfort level is readable at a glance. Data is fetched in the background via async polling, so the display keeps running even if the server is briefly unreachable.
Screenshots
layout = "ticker" (default — single-row segmented screens, smallsign-friendly):
layout = "two_row" (stacked label-on-top / big-number-on-bottom, bigsign / longboi):
Prerequisites
- A running led-ticker (the sign + its config). This widget plugs into it.
- A running InfluxDB v2 server holding pool temperature data. The reference stack is pool_monitor, which provides the bucket and sensor schema this widget expects.
- An InfluxDB auth token — set
INFLUXDB_TOKENin your led-ticker.env(or as a per-widget config key). The widget raisesValueErrorat startup if it's missing. See InfluxDB setup for all four connection variables.
Install
The widget auto-registers via the led_ticker.plugins entry point — once the package is installed, no [plugins] config change is needed.
Into a containerized led-ticker (recommended): add this package to config/requirements-plugins.txt (copy it from config/requirements-plugins.example.txt), then rebuild:
led-ticker-pool
# in your led-ticker checkout
docker compose up -d --build
Standalone (a venv that already has led-ticker):
pip install led-ticker-pool
See the led-ticker Plugins docs for the constraint-based install the Docker image uses.
Configuration
Reference the widget in a playlist section by type = "pool.monitor":
[[playlist.section.widget]]
type = "pool.monitor"
title = "POOL TEMPS"
units = "imperial"
Options
| Option | Type | Default | Description |
|---|---|---|---|
title |
string | "POOL TEMPS" |
Label shown on the title screen. |
sensor_id |
string | none | Sensor ID to filter on. Omit to use the only/first sensor in the bucket. Must match [A-Za-z0-9_-]+. |
units |
string | "imperial" |
"imperial" (°F) or "metric" (°C). |
update_interval |
int | 300 |
Seconds between InfluxDB fetches (5 min default). |
current_window |
string | "-24h" |
How far back to search for the latest reading, as a negative Flux duration ("-24h", "-90m"). Older than this → -- placeholder. Widen it if your sensor reports infrequently. |
stale_after |
float | 14400 |
Seconds since the last reading before the temperature dims to gray (stale signal). 4 h default. |
influxdb_url |
string | $INFLUXDB_URL / "http://influxdb:8086" |
InfluxDB v2 base URL. Config overrides the env var. |
influxdb_org |
string | $INFLUXDB_ORG / "pool" |
InfluxDB organization. |
influxdb_bucket |
string | $INFLUXDB_BUCKET / "pool_temps" |
InfluxDB bucket. |
influxdb_token |
string | $INFLUXDB_TOKEN |
InfluxDB v2 token. Required — the widget raises ValueError at startup if it's missing. |
layout |
"ticker" | "two_row" |
"ticker" |
Render mode (see below). |
label_color |
[r,g,b] |
white | Color for prefix labels / separators. |
font / font_size / font_threshold |
font name / int / int | "6x12" |
Main text font. A BDF alias (6x12, 5x8) or a hires font name (Inter-Regular) with font_size in real pixels. In two_row, the per-row knobs below override this. |
top_font / top_font_size / top_font_threshold |
font / int / int | inherit font |
two_row only: top (label) row font knobs. |
bottom_font / bottom_font_size / bottom_font_threshold |
font / int / int | inherit | two_row only: bottom (value) row font knobs. |
top_row_height |
int (logical rows) | None |
two_row only: top band height. None = symmetric 8/8 split. |
The per-row knobs apply ONLY when layout = "two_row"; setting them under ticker fails config validation.
Layouts
ticker(default) — single-row segmented screens; the today screen shows current temp + trend arrow and hi/lo, the 7-day screen the mean + hi/lo, the season screen HI/LO together. Best for small panels (smallsign 160×16).two_row— stacked label-on-top / big-number-on-bottom. Cycles four screens with top-row labelsPOOL(title),POOL 24H(current temp, zone-colored),POOL 7D(7-day HI/LO), andPOOL SEASON(season HI/LO) — HI in orange, LO in blue, shown together on one screen (e.g.84/72F). The trend arrow is dropped (bottom is the value only). Best for bigsign / longboi (256×64 / 512×64).
A two_row example:
[[playlist.section.widget]]
type = "pool.monitor"
title = "POOL TEMPS"
layout = "two_row"
units = "imperial"
font = "Inter-Regular"
font_size = 32
label_color = [130, 220, 255]
InfluxDB setup
The widget reads connection details from your led-ticker .env (or per-widget overrides). INFLUXDB_TOKEN is required; the rest default to the standard pool_monitor Docker Compose stack.
| Variable | Required | Default | Description |
|---|---|---|---|
INFLUXDB_TOKEN |
yes | — | InfluxDB v2 auth token. |
INFLUXDB_URL |
no | http://influxdb:8086 |
Base URL. |
INFLUXDB_ORG |
no | pool |
Organization. |
INFLUXDB_BUCKET |
no | pool_temps |
Bucket. |
The widget queries water-temperature readings with Flux over HTTP and computes today / 7-day / season aggregates. Stale data (older than stale_after) renders dim gray; the trend arrow compares the latest reading to a ~45-minute trailing average (sub-0.5°F shows -).
Development
Install dev deps and run the suite:
uv sync --extra dev # resolves led-ticker-core from PyPI
uv run pytest -q
Note: tests that need a headless canvas obtain one via
HeadlessBackend(...).create_canvas()fromled_ticker.plugin— the software backend shipped in led-ticker-core ≥ 2.1. No rgbmatrix test stub orPYTHONPATHplumbing is required.
Links
- led-ticker project: https://github.com/JamesAwesome/led-ticker
- led-ticker plugin system: https://docs.ledticker.dev/plugins/
Metadata
Release files for led-ticker-pool 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| led_ticker_pool-0.2.0.tar.gz | 49.6 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| led_ticker_pool-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 62.7 kB
Release files / led_ticker_pool-0.2.0.tar.gz
| Download URL | led_ticker_pool-0.2.0.tar.gz |
|---|---|
| Size | 49.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5be1fb0e1d9e5c80596165b50618622e0daafc6822e8260cba74efffd3913768
|
|
BLAKE2b-256 checksum How to use checksums |
811893854642aae1f303171bc5fa197117097e5f8ada1023b51aa55b97821e94
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 28, 2026.
Transparency logRelease files / led_ticker_pool-0.2.0-py3-none-any.whl
| Download URL | led_ticker_pool-0.2.0-py3-none-any.whl |
|---|---|
| Size | 13.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3c6413eaeab882d662a5ad287abcf743440eb8a9aa7eb432c6eaea6ffeefd688
|
|
BLAKE2b-256 checksum How to use checksums |
df851e2399f88df5953b032d8a1411b8e0d88d80da938333011c682e4990b69e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 28, 2026.
Transparency logSecurity for led-ticker-pool 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for led_ticker_pool-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 28, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.