Skip to content

Releases: teian/smalog

v0.3.0 — fewer questions, steadier dashboard

Choose a tag to compare

@teian teian released this 19 Aug 13:42
ec95313

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 outcome unsupported.
  • A refused query is asked once, then remembered. The refusal is stored per
    inverter in the new inverter_query_support table, 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

v0.2.0 — Bluetooth data collection

Choose a tag to compare

@teian teian released this 19 Aug 09:03
72104c4

First release in which Bluetooth data collection actually works against real
inverters, plus a security fix in the MQTT dependency chain.

Bluetooth

  • Requests are addressed per inverter, the way SBFspot does it: spot values
    with control byte 0xA0 in a frame to addr_unknown, archive commands with
    0xE0 in a frame addressed to the inverter itself, both carrying the
    device's SUSyID and serial instead of the any wildcards. The previous
    broadcast form left most queries unanswered.
  • Replies larger than one Bluetooth frame are reassembled. Such a reply
    arrives split over several L1 frames whose continuations carry raw payload
    behind their own header; both halves used to be discarded, so archive, DC and
    AC queries ran into the 30-second retry budget every cycle.
  • The shipped systemd unit permits AF_BLUETOOTH. Without it the client
    could not even open a socket (os error 97). An existing installation can
    either reinstall packaging/smalog.service or add the override documented in
    the README.
  • Raw frame capture for protocol debugging: set capture_file in a
    Bluetooth inverter entry, or run
    smalog test-bluetooth --all --capture <file>. Every L1 frame is appended in
    both directions as a hex line, before de-escaping and reassembly. Dropped
    reply frames are now logged with the reason they were dropped.

Security

The MQTT client moved from the unmaintained rumqttc 0.25.1 to
rumqttc-v4-next. That clears four rustls-webpki advisories — one high
(GHSA-82j2-j2ch-gfr8, panic on a malformed CRL BIT STRING), one moderate and
two low — which are fixed only in the 0.103 line that no rumqttc release
depends on. The connection remains plain TCP; TLS is now a feature flag away on
a patched webpki.

Migration tool

migrate-sbfspot names the missing URL scheme when --source or --target
is given as a bare filesystem path, instead of quoting the leading directory as
a database engine. Engine errors now show complete example URLs.

Toolchain

Builds on Rust 1.97.1. The declared minimum supported Rust version is 1.89.

Upgrading

Install the package or binary for your architecture as usual. Bluetooth users
should reinstall the systemd unit (or apply the RestrictAddressFamilies
override) — otherwise the service still cannot open a Bluetooth socket.

Full changelog: v0.1.0-rc.1...v0.2.0

What's Changed

  • read Bluetooth inverters again: SBFspot addressing, fragment reassembly, AF_BLUETOOTH by @teian in #6
  • swap the MQTT client for rumqttc-v4-next and build on Rust 1.97.1 by @teian in #7
  • release 0.2.0 by @teian in #8

Full Changelog: v0.1.0-rc.1...v0.2.0

Docker images

v0.1.0-rc.1 — first release candidate

Pre-release

Choose a tag to compare

@teian teian released this 18 Aug 19:47
4a9bf04

What's Changed

  • feat(diagnostics): System dashboard area for poll transmissions and application log by @teian in #1
  • feat(packaging): Debian packages for Raspberry Pi (armhf, arm64) by @teian in #2
  • ci(release): tie the release tag to the crate version by @teian in #3
  • fix(docker): rebuild workspace crates instead of linking the stubs by @teian in #4
  • chore(ui): build on Node 24, the current LTS line by @teian in #5

New Contributors

  • @teian made their first contribution in #1

Full Changelog: https://github.com/teian/smalog/commits/v0.1.0-rc.1

Docker images