Follow-up to 0.2.0: the poll cycle stops asking inverters for values they do
not have, and the dashboard stops blanking itself on every refresh.
Diagnostics
- "Nicht verfügbar" is no longer reported as "keine Antwort". An inverter
that lacks a value answers SMA error 21; both transports swallowed that into
an empty result, so a definitive answer looked like a failure. Such an
exchange now carries the outcomeunsupported. - A refused query is asked once, then remembered. The refusal is stored per
inverter in the newinverter_query_supporttable, and later cycles skip the
query instead of spending a round trip on an answer that will not change.
They still record it, at 0 ms, so the dashboard keeps showing why a value is
absent. On a small single-phase inverter that removes four queries per cycle:
phase-wise AC power, grid-relay status, temperature and grid metering. - Entries expire after 30 days, so a firmware update that adds a value is
picked up on its own.DELETE FROM inverter_query_support;forces an
immediate re-probe.
Web dashboard
The periodic poll emptied the chart and the diagnostics tables before
refetching, and a failed poll emptied the status cards — twice a minute the
dashboard looked like it was reloading. Views now keep their content while the
next payload is fetched and clear only when the range, inverter or period
actually changes. Chart series animate once and then swap values silently. A
failed poll keeps the last reading and shows an offline badge in the header.
Tooling
scripts/build-packages.sh builds the same archives and Debian packages as the
release workflow, into dist/, without publishing a release. See
docs/operations.md.
Upgrading
The diagnostics ring's outcome constraint gained a value, so a database
carrying the previous version has that ring recreated on first start: recent
transmission rows are lost, nothing canonical is. The canonical schema gains
inverter_query_support through migration 0002, applied automatically.
Bluetooth users coming from a hand-installed unit: 0.2.0 fixed
RestrictAddressFamilies, and a unit in /etc/systemd/system/ still wins over
the packaged one.
Full changelog: v0.2.0...v0.3.0
What's Changed
- build the release packages locally by @teian in #9
- tell a refused query apart from a silent one, and stop re-asking it by @teian in #10
- update the dashboard in place instead of blanking it every 30 seconds by @teian in #11
- release 0.3.0 by @teian in #12
Full Changelog: v0.2.0...v0.3.0
Docker images
- GHCR:
ghcr.io/teian/smalog:v0.3.0 - Docker Hub:
fgehann/smalog:v0.3.0 - GHCR latest:
ghcr.io/teian/smalog:latest - Docker Hub latest:
fgehann/smalog:latest - Platforms:
linux/386,linux/amd64,linux/arm/v7,linux/arm64