Skip to content

Commit

Permalink
Merge pull request #19 from atbore-phx/fix/workflow
Browse files Browse the repository at this point in the history
battery is under reserve and net pv power is not enough
  • Loading branch information
atbore-phx authored Apr 1, 2024
2 parents 0aeac3f + 891276f commit 9e64441
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 4 deletions.
28 changes: 25 additions & 3 deletions pkg/fronius/fronius_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ func TestBatteryChargeMode5(t *testing.T) {
setup()

result, err := fronius.SetFroniusChargeBatteryMode(1000, 11000, 11000, 9000, 3500, 2500, "00:00", "23:59", modbus_ip, modbus_port)
assert.Equal(int16(22), result, "SetFroniusChargeBatteryMode returned wrong value")
assert.Equal(int16(31), result, "SetFroniusChargeBatteryMode returned wrong value")
assert.NoError(err)

teardown()
Expand All @@ -251,19 +251,41 @@ func TestBatteryChargeMode6(t *testing.T) {
assert := assert.New(t)
setup()

result, err := fronius.SetFroniusChargeBatteryMode(8000, 2000, 11000, 9000, 3500, 0, "00:00", "23:59", modbus_ip, modbus_port)
result, err := fronius.SetFroniusChargeBatteryMode(8000, 2000, 11000, 8000, 3500, 0, "00:00", "23:59", modbus_ip, modbus_port)
assert.Equal(int16(0), result, "SetFroniusChargeBatteryMode returned wrong value")
assert.NoError(err)

teardown()
}

func TestBatteryChargeMode7(t *testing.T) {
assert := assert.New(t)
setup()

result, err := fronius.SetFroniusChargeBatteryMode(10000, 7000, 11000, 0, 3500, 5000, "00:00", "23:59", modbus_ip, modbus_port)
assert.Equal(int16(9), result, "SetFroniusChargeBatteryMode returned wrong value")
assert.NoError(err)

teardown()
}

func TestBatteryChargeMode8(t *testing.T) {
assert := assert.New(t)
setup()

result, err := fronius.SetFroniusChargeBatteryMode(5000, 7000, 11000, 10000, 3500, 3000, "00:00", "23:59", modbus_ip, modbus_port)
assert.Equal(int16(9), result, "SetFroniusChargeBatteryMode returned wrong value")
assert.NoError(err)

teardown()
}

func TestBatteryChargeError(t *testing.T) {
assert := assert.New(t)
setup()

result, err := fronius.SetFroniusChargeBatteryMode(1000, 11000, -11000, 9000, 3500, 0, "00:00", "23:59", modbus_ip, modbus_port)
assert.Equal(int16(-200), result, "SetFroniusChargeBatteryMode returned wrong value")
assert.Equal(int16(-72), result, "SetFroniusChargeBatteryMode returned wrong value")
assert.Error(err)

teardown()
Expand Down
6 changes: 5 additions & 1 deletion pkg/fronius/schedule.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,18 @@ func SetFroniusChargeBatteryMode(pw_forecast float64, pw_batt2charge float64, pw
var ch_pc int16 = 0
pw_pv_net := pw_forecast - pw_consumption // Net solar power
pw_batt := pw_batt_max - pw_batt2charge // actual battery power
pw_net := pw_batt_reserve + pw_pv_net // net power available (reserve + Net solar power)

switch {
case pw_batt2charge == 0: // battery 100% => do not charge
u.Log.Info("Battery is full charged")
case pw_net < 0 && pw_batt < pw_batt_reserve: // net power is not enough and battery level is under the reserve => charge
u.Log.Infof("Battery is under the reserve and Net Power (battery reserve + Net solar power) is not enough: %f W", pw_net)
ch_pc = SetChargePower(pw_batt_max, -1*pw_net, max_charge)
case pw_batt < pw_batt_reserve: // battery is less than reserve => charge
u.Log.Infof("battery %f W < reserve %f W", pw_batt, pw_batt_reserve)
ch_pc = SetChargePower(pw_batt_max, pw_batt_reserve-pw_batt, max_charge)
default:
default: // check if Actual battery is enough, charge oterwise
pw_grid, charge_enabled := ChargeBattery(pw_pv_net, pw_batt)
if charge_enabled {
ch_pc = SetChargePower(pw_batt_max, -1*pw_grid, max_charge)
Expand Down

0 comments on commit 9e64441

Please sign in to comment.