Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/energyplan-0-5-0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"ftw": patch
---

Update the bundled Energyplan planner to 0.5.0. On a small box such as a Raspberry Pi 4, plans with a car get better within the 0.5 s budget: time that the solver's LP phases cannot use now goes to improving the plan Core gets. A car that cannot charge is planned with the exact battery method, and a car a fraction of a watt-hour short of its goal no longer restarts the charger. The planner keeps a valid plan when its solver fails, reports `gap_satisfied` when it meets Core's gap, fixes a wrong demand-charge sign for the running hour, and closes two ways it could report an unproven optimum. Core still validates every plan.
2 changes: 1 addition & 1 deletion go/internal/mpc/energyplan_fault_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ func TestNativeEnergyplanEVRecoveryFallbackFaults(t *testing.T) {
t.Cleanup(func() { _ = external.Close() })
wrapper := &EnergyplanOptimizer{ExternalOptimizer: external}
health, err := wrapper.Health(context.Background())
if err != nil || health.Version != "0.4.10" {
if err != nil || health.Version != "0.5.0" {
t.Fatalf("bundle health=%+v err=%v", health, err)
}
svc := shadowTestService(t)
Expand Down
2 changes: 1 addition & 1 deletion go/internal/mpc/energyplan_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ func TestNativeEnergyplanDownsideAndAsyncShadow(t *testing.T) {
svc := shadowTestService(t)
svc.Optimizer = o
info, err := svc.Optimizer.(*EnergyplanOptimizer).Health(context.Background())
if err != nil || info.Name != "ftw-solver" || info.Version != "0.4.10" {
if err != nil || info.Name != "ftw-solver" || info.Version != "0.5.0" {
t.Fatalf("bundled worker health: %+v %v", info, err)
}
start := time.Now().UTC().Truncate(time.Hour)
Expand Down
2 changes: 1 addition & 1 deletion optimizer/native/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ The [Energyplan contract](../../docs/energyplan-contract.md) defines the shared
planning and forecast boundary, result meanings, units and failure rules.
Core owns it; Energyplan keeps an identical copy.

Energyplan 0.4.10 uses the Home Use Binary License in `bundle/LICENSE.txt`. It
Energyplan 0.5.0 uses the Home Use Binary License in `bundle/LICENSE.txt`. It
permits private household use with FTW and free noncommercial redistribution
for that use. Commercial use, OEM bundles, paid installation and services need
a separate written license from Sourceful Labs AB. FTW's AGPL code has a
Expand Down
Binary file modified optimizer/native/bundle/ftw-solver-darwin-arm64
Binary file not shown.
Binary file modified optimizer/native/bundle/ftw-solver-linux-amd64
Binary file not shown.
Binary file modified optimizer/native/bundle/ftw-solver-linux-arm64
Binary file not shown.
16 changes: 8 additions & 8 deletions optimizer/native/bundle/manifest.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"schema_version": 1,
"product": "energyplan",
"version": "0.4.10",
"version": "0.5.0",
"source_repository": "srcfl/energyplan",
"source_commit": "2c8c777620036b6e5be8e2b17f79a0e3733e1100",
"source_commit": "4ad5804a9bbaabe3ddff0a64fff1009ed359f580",
"rustc": "rustc 1.95.0 (59807616e 2026-04-14)",
"protocol_version": 1,
"forecast_protocol_version": 1,
Expand Down Expand Up @@ -39,16 +39,16 @@
"bytes": 15377
},
"ftw-solver-darwin-arm64": {
"sha256": "927d82bba7bfa935c0165cf396a0e9abbee7df4d784567b0405b664dd76126aa",
"bytes": 1356016
"sha256": "be7bdb3fb4dd0dd5d941c483bc5d29e4395fd0a09d10d9dbd86093da23d2188d",
"bytes": 1422560
},
"ftw-solver-linux-amd64": {
"sha256": "62fec8f22bbb3cea94d644b4cf8a102c6d33c0f76e2092f5dfbdf9f2b8b83566",
"bytes": 1751368
"sha256": "63db6fdb40db1d8e2c992ff04393488ba8d19c9d1e124367b53dad73e045cb6c",
"bytes": 1819336
},
"ftw-solver-linux-arm64": {
"sha256": "92033f003014b2f56b104c2601fa45f91d972c5179880d45847c03190a92b6d6",
"bytes": 1405744
"sha256": "1294944402313bb42b504fad8b1687015415a3cf6f27c45761b6cffd40e98e0b",
"bytes": 1457536
},
"rust-runtime/COPYRIGHT-library.html": {
"sha256": "90567e2718bf7fd65a71a3a43c5596488e80e5f51ed02bfea6fec54458b5f3d1",
Expand Down
Loading