From eefbfd98b3511f29e460bd4abd91df5455dbdb19 Mon Sep 17 00:00:00 2001 From: Petar Petrov Date: Wed, 30 Apr 2025 08:44:04 +0300 Subject: [PATCH] Update energy usage calculation to fix remaining tests --- src/data/energy.ts | 18 ++++++++++++------ test/data/energy.test.ts | 20 +++++++++++--------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/data/energy.ts b/src/data/energy.ts index 70aece7feb..3b3fac3323 100644 --- a/src/data/energy.ts +++ b/src/data/energy.ts @@ -1031,15 +1031,21 @@ export const computeConsumptionSingle = (data: { let solar_to_grid = 0; let used_battery = 0; let used_grid = 0; - if ((to_grid != null || to_battery != null) && solar != null) { + if (solar == null) { + if (to_battery != null) { + grid_to_battery = to_battery; + } + if (to_grid != null) { + battery_to_grid = to_grid; + } + } else if (to_grid != null || to_battery != null) { used_solar = (solar || 0) - (to_grid || 0) - (to_battery || 0); if (used_solar < 0) { if (to_battery != null) { - grid_to_battery = used_solar * -1; - if (grid_to_battery > (from_grid || 0)) { - battery_to_grid = grid_to_battery - (from_grid || 0); - grid_to_battery = from_grid || 0; - } + grid_to_battery = Math.min(used_solar * -1, from_grid || 0, to_battery); + } + if (to_grid != null) { + battery_to_grid = Math.min(to_grid - solar, from_battery || 0, to_grid); } used_solar = 0; } diff --git a/test/data/energy.test.ts b/test/data/energy.test.ts index e5fcbe9dc6..d33b0584bd 100644 --- a/test/data/energy.test.ts +++ b/test/data/energy.test.ts @@ -220,7 +220,6 @@ describe("Energy Usage Calculation Tests", () => { } ); }); - /* Fails it("Charging and discharging the battery to/from the grid in the same interval.", () => { assert.deepEqual( computeConsumptionSingle({ @@ -234,12 +233,13 @@ describe("Energy Usage Calculation Tests", () => { grid_to_battery: 3, battery_to_grid: 1, used_solar: 0, - used_grid: 1, + used_grid: 2, used_battery: 0, + solar_to_battery: 0, + solar_to_grid: 0, } ); - }); */ - /* Test does not pass, battery is not really correct when solar is not present + }); it("Charging the battery with no solar sensor.", () => { assert.deepEqual( computeConsumptionSingle({ @@ -255,10 +255,11 @@ describe("Energy Usage Calculation Tests", () => { used_solar: 0, used_grid: 2, used_battery: 0, + solar_to_battery: 0, + solar_to_grid: 0, } ); - }); */ - /* Test does not pass + }); it("Discharging battery to grid while also consuming from grid.", () => { assert.deepEqual( computeConsumptionSingle({ @@ -274,10 +275,11 @@ describe("Energy Usage Calculation Tests", () => { used_solar: 0, used_grid: 5, used_battery: 0, + solar_to_battery: 0, + solar_to_grid: 0, } ); }); - */ it("Grid, solar, and battery", () => { assert.deepEqual( @@ -352,7 +354,6 @@ describe("Energy Usage Calculation Tests", () => { solar_to_grid: 7, } ); - /* Test does not pass assert.deepEqual( computeConsumptionSingle({ from_grid: 5, @@ -367,8 +368,9 @@ describe("Energy Usage Calculation Tests", () => { used_solar: 0, used_grid: 5, used_battery: 0, + solar_to_battery: 0, + solar_to_grid: 1, } ); - */ }); });