-
v1.30.0
StableAll checks were successfulCI / Rust clippy (push) Successful in 1m41sCI / Rust fmt (push) Successful in 1m5sCI / Rust test (push) Successful in 5m56sCI / UI (SvelteKit) (push) Successful in 1m10sCI / Security Audit (push) Successful in 1m14sdocs / build (push) Successful in 23m53sRelease / Docker Multi-Arch (push) Successful in 23m32sRelease / Binary aarch64-unknown-linux-gnu (push) Successful in 12m29sRelease / Binary x86_64-unknown-linux-gnu (push) Successful in 10m35sRelease / Linux .deb + .rpm (amd64) (push) Successful in 2m4sRelease / Linux .deb + .rpm (arm64) (push) Successful in 1m49sRelease / Linux AppImage (aarch64) (push) Successful in 19sRelease / Linux AppImage (x86_64) (push) Successful in 20sRelease / Cosign sign artifacts (push) Successful in 19sRelease / Forgejo Release (push) Successful in 31sreleased this
2026-09-11 15:06:13 +00:00 | 262 commits to main since this releaseAdded
- Battery as its own energy origin. The energy card and the period
overview now split the pool's kilowatt-hours three ways — solar, battery
and grid — instead of two. Battery means solar that was stored during
the day and consumed later; until now every one of those evening
kilowatt-hours was booked as grid power, because the old check only
compared production against load — with the sun down, production is zero
and everything looks like grid. Battery kWh are priced like solar kWh
(at nothing), so the cost figures drop accordingly.
The attribution is marginal: the miners are the last consumer
switched on, so their energy is charged against grid import first, then
the battery, then direct PV — what would stop flowing if you unplugged
them. The house average would credit the pool with stored solar that it
did not actually free up. scripts/anker-bridge.pyreports the full power flows it already had in
hand:battery_discharge_w,battery_charge_w,grid_w,feed_in_w
andbattery_soc_pct. New/raw.jsondiagnostic endpoint shows the
power-related raw fields per Anker site — useful when Anker renames
something, and it needs no second cloud login (the Anker cloud allows
only one token per account, so a debug script would lock the bridge
out).- Home Assistant provider: optional
battery_discharge_entity_id,
battery_charge_entity_id,grid_entity_id,feed_in_entity_idand
battery_soc_entity_id— editable in the setup wizard and under
Admin → Profile → Photovoltaics (collapsed "Battery sensors" group), or
straight in config.toml. A failing optional entity degrades to
"no battery split" instead of killing the snapshot; clearing a field in
the admin form switches that sensor off again. /api/energygainedlast_24h_battery_kwh,last_7d_battery_kwh,
lifetime_battery_kwh, and thesolarobject now carries
battery_discharge_w,battery_charge_w,battery_soc_pctandmix
(the live supply mix, i.e. exactly how the current minute is booked).
/api/overview/periodgainedenergy_battery_kwhper bucket and
total_battery_kwh.
Changed
-
Energy attribution is proportional instead of all-or-nothing wherever
the provider reports battery discharge: a minute whose marginal load
spans two sources counts as exactly that, where a 5-minute bucket
previously tipped onto whichever side held the majority of its minutes.
Without battery data (no storage, entities not configured, stale
snapshot) the old yes/no decision still applies — but even those minutes
are now summed individually instead of by bucket majority, so a bucket
with 3 of 5 solar minutes reads 60 % solar rather than 100 %. Historic
days outside the 7-day telemetry retention keep the split they were
recorded with; the tariff decision (does PV surplus cover the pool?)
stays a yes/no question and is unchanged. -
Admin → Profile: the dvb-WarpTune card marks an empty sidecar URL and
disables Save while the coupling is on — the server refuses that
combination anyway, so the error no longer has to come back from the
round trip. -
scripts/setup-warptune.shreads
~/Library/Application Support/dvb-WarpPool/warptune-push-tokenand
writes it into the launchd plist asWARPTUNE_PUSH_TOKEN(plist stays
0600), so the sidecar pushes its snapshot without a manual edit.
Fixed
/api/overview/periodpriced all kilowatt-hours at the grid tariff,
including self-generated ones — the week/month/year view charged for
solar the energy card had already booked as free. Costs there now follow
the grid share, matching/api/energy. Pools without PV are unaffected
(grid share = total).- DB migration
energy_battery_split_v1:solar_excess_minutegains
share_solar/share_battery(NULL = fall back to the old boolean),
daily_aggregatesgainsenergy_battery_kwh. New lifetime carry key
energy_lifetime_kwh_carry_battery.
dvb-WarpPool v1.30.0 — Downloads
Docker
git.warppool.org/dvb-projekt/dvb-warppool:v1.30.0(multi-arch amd64+arm64, ohne v-Präfix)Native packages
- Linux .deb: amd64 + arm64 →
apt install ./dvb-warppool_*.deb - Linux .rpm: amd64 + arm64 →
dnf install ./dvb-warppool-*.rpm - Linux AppImage: x86_64 + aarch64 portable
- Linux tarballs: x86_64 + aarch64 for manual installs
- macOS .dmg: added shortly after publish (built separately) — or build from source
- Windows .msi: paused since the forge migration (no Windows runner yet)
Signatures
SHA256SUMS+ cosign bundle (SHA256SUMS.bundle, project key)- SBOM (SPDX) for all dependencies
Verify (project public key
cosign.pubin the repo root):cosign verify-blob \ --key cosign.pub \ --bundle SHA256SUMS.bundle \ SHA256SUMS sha256sum --check SHA256SUMSFirst-time setup: run
dvb-warppool-setupfor the first-run wizard.Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
- Battery as its own energy origin. The energy card and the period