Human-friendly dashboard for mtr2mqtt summary topics
Project description
mtrview
mtrview is a small standalone web dashboard for retained JSON summaries published by mtr2mqtt. mtr2mqtt writes the measurement summaries to MQTT; mtrview subscribes to those topics and turns the latest values into a simple human-friendly dashboard.
The app subscribes to summary topics such as summary/<receiver>, keeps the latest summary per
receiver in memory, normalizes transmitter readings, and serves a dark auto-updating dashboard at
http://localhost:8000/.
MQTT input
By default mtrview subscribes to:
summary/#
Each retained message should be a JSON object with a receiver, an updated_at timestamp, and a
transmitters mapping. Transmitter metadata may be partial; missing location, zone, quantity,
description, unit, or battery fields are displayed with sensible placeholders instead of
failing.
Configuration
Settings are read from environment variables:
| Variable | Default |
|---|---|
MTRVIEW_MQTT_HOST |
localhost |
MTRVIEW_MQTT_PORT |
1883 |
MTRVIEW_MQTT_USERNAME |
unset |
MTRVIEW_MQTT_PASSWORD |
unset |
MTRVIEW_MQTT_TOPICS |
summary/# |
MTRVIEW_HTTP_HOST |
0.0.0.0 |
MTRVIEW_HTTP_PORT |
8000 |
MTRVIEW_REFRESH_INTERVAL_SECONDS |
20 |
MTRVIEW_DISPLAY_TIMEZONE |
UTC |
See .env.example for a copyable starting point.
Local run
uv sync --group dev
uv run mtrview
Then open http://localhost:8000/.
Useful endpoints:
GET /- dashboardGET /api/summary- normalized JSON for all receivers and transmittersGET /health- health status
Docker
docker build -t mtrview .
docker run --rm -p 8000:8000 \
-e MTRVIEW_MQTT_HOST=host.docker.internal \
-e MTRVIEW_MQTT_TOPICS=summary/# \
mtrview
Published Docker images support linux/amd64, linux/arm64, linux/arm/v7, and
linux/arm/v6 for Pi Zero-class 32-bit ARM devices. The image intentionally uses Uvicorn without
optional native performance extras so old Raspberry Pi targets can install dependencies without a
compiler and the runtime image stays small.
Dashboard
The UI is server-rendered first, with a small vanilla JavaScript refresh loop that fetches
/api/summary. It includes summary counts, MQTT connection state, search, status/zone/receiver
filters, card and compact table views, and a priority section for non-online readings.
Transmitter battery state is shown in the card, table, and detail views when present. Battery
labels are derived from voltage: full at 3.1 V or higher, good at 2.9-3.0 V, medium at
2.7-2.8 V, low at 2.6 V, and critical at 2.5 V or lower.
Development
make install
make verify
Individual checks:
uv run pytest
uv run ruff check .
Releases
Releases are managed by GitHub Actions using Conventional Commits and semantic-release. Merges to
master can create GitHub releases, publish the Python package to PyPI, and publish multi-arch
Docker images to Docker Hub as tvallas/mtrview.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mtrview-0.3.1.tar.gz.
File metadata
- Download URL: mtrview-0.3.1.tar.gz
- Upload date:
- Size: 321.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb2a4dae66a252e224f92d0eea09d5579c5087551d9003cd84cc732f10b0d841
|
|
| MD5 |
180e606047f58d9e8b1c233026b9feb4
|
|
| BLAKE2b-256 |
43b6e9b3d51b52ed58e6aa07c7bcf4b8720ffb8acd73cde17ea86427782ba1c7
|
Provenance
The following attestation bundles were made for mtrview-0.3.1.tar.gz:
Publisher:
semantic_release.yml on tvallas/mtrview
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mtrview-0.3.1.tar.gz -
Subject digest:
cb2a4dae66a252e224f92d0eea09d5579c5087551d9003cd84cc732f10b0d841 - Sigstore transparency entry: 1396666822
- Sigstore integration time:
-
Permalink:
tvallas/mtrview@9cf69ee150e4e63d9eee5a700722fbded8c2f04b -
Branch / Tag:
refs/heads/master - Owner: https://github.com/tvallas
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
semantic_release.yml@9cf69ee150e4e63d9eee5a700722fbded8c2f04b -
Trigger Event:
push
-
Statement type:
File details
Details for the file mtrview-0.3.1-py3-none-any.whl.
File metadata
- Download URL: mtrview-0.3.1-py3-none-any.whl
- Upload date:
- Size: 271.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c80290f5738351ed7c0c08014b256b616396310835556d1034c40d9688475000
|
|
| MD5 |
a95ec1ad58a73aa3d2416c9c75c66063
|
|
| BLAKE2b-256 |
b0e551ed56dfda08c93d6add736331276cf04d0a6e3006b24f8aa3bb62af5896
|
Provenance
The following attestation bundles were made for mtrview-0.3.1-py3-none-any.whl:
Publisher:
semantic_release.yml on tvallas/mtrview
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mtrview-0.3.1-py3-none-any.whl -
Subject digest:
c80290f5738351ed7c0c08014b256b616396310835556d1034c40d9688475000 - Sigstore transparency entry: 1396666837
- Sigstore integration time:
-
Permalink:
tvallas/mtrview@9cf69ee150e4e63d9eee5a700722fbded8c2f04b -
Branch / Tag:
refs/heads/master - Owner: https://github.com/tvallas
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
semantic_release.yml@9cf69ee150e4e63d9eee5a700722fbded8c2f04b -
Trigger Event:
push
-
Statement type: