From 85b47cbe70442ea71e228e6391c37a27cbad8e8d Mon Sep 17 00:00:00 2001 From: andig Date: Mon, 20 Jul 2020 09:34:21 +0200 Subject: [PATCH] Always round down for current calculation --- core/helper.go | 8 ++++++-- core/loadpoint.go | 6 ++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/core/helper.go b/core/helper.go index 307c101b4..957d2956f 100644 --- a/core/helper.go +++ b/core/helper.go @@ -1,6 +1,10 @@ package core -import "github.com/avast/retry-go" +import ( + "math" + + "github.com/avast/retry-go" +) var ( status = map[bool]string{false: "disable", true: "enable"} @@ -15,7 +19,7 @@ var ( // powerToCurrent is a helper function to convert power to per-phase current func powerToCurrent(power float64, phases int64) int64 { - return int64(power / (float64(phases) * Voltage)) + return int64(math.Floor(power / (float64(phases) * Voltage))) } // consumedPower estimates how much power the charger might have consumed given it was the only load diff --git a/core/loadpoint.go b/core/loadpoint.go index 689939c93..b443f193f 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -83,6 +83,10 @@ func NewLoadPointFromConfig(log *util.Logger, cp configProvider, other map[strin charger := cp.Charger(lp.ChargerRef) lp.configureChargerType(charger) + if lp.Enable.Threshold > lp.Disable.Threshold { + log.WARN.Printf("PV mode enable threshold (%.0fW) is larger than disable threshold (%.0fW)", lp.Enable.Threshold, lp.Disable.Threshold) + } + lp.handler = &ChargerHandler{ log: lp.log, clock: lp.clock, @@ -296,6 +300,8 @@ func (lp *LoadPoint) maxCurrent(mode api.ChargeMode, sitePower float64) int64 { deltaCurrent := powerToCurrent(-sitePower, lp.Phases) targetCurrent := clamp(lp.handler.TargetCurrent()+deltaCurrent, 0, lp.MaxCurrent) + lp.log.DEBUG.Printf("max charge current: %dA = %dA + %dA (%.0fW @ %dp)", targetCurrent, lp.handler.TargetCurrent(), deltaCurrent, sitePower, lp.Phases) + // in MinPV mode return at least minCurrent if mode == api.ModeMinPV && targetCurrent < lp.MinCurrent { return lp.MinCurrent