@@ -1479,90 +1479,90 @@ func (lp *Loadpoint) pvMaxCurrent(mode api.ChargeMode, sitePower, batteryBoostPo
14791479 if lp .enabled {
14801480 now := lp .clock .Now ()
14811481 projectedSitePower := sitePower - Voltage * (effectiveCurrent - max (minCurrent , targetCurrent )) * float64 (activePhases )
1482-
1482+
14831483 if lp .hasPhaseSwitching () && ! lp .phaseTimer .IsZero () {
14841484 // calculate site power after a phase switch from activePhases phases -> 1 phase
14851485 // notes: activePhases can be 1, 2 or 3 and phaseTimer can only be active if lp current is already at minCurrent
14861486 projectedSitePower -= Voltage * minCurrent * float64 (activePhases - 1 )
14871487 }
1488-
1488+
14891489 // kick off disable sequence
14901490 if projectedSitePower >= lp .Disable .Threshold {
14911491 lp .log .DEBUG .Printf ("projected site power %.0fW >= %.0fW disable threshold" , projectedSitePower , lp .Disable .Threshold )
1492-
1492+
14931493 if lp .pvTimer .IsZero () {
14941494 lp .log .DEBUG .Printf ("pv disable timer start: %v" , lp .GetDisableDelay ())
14951495 lp .pvTimer = now
14961496 }
1497-
1497+
14981498 lp .publishTimer (pvTimer , lp .GetDisableDelay (), pvDisable )
1499-
1499+
15001500 elapsed := now .Sub (lp .pvTimer )
15011501 if elapsed >= lp .GetDisableDelay () {
15021502 lp .log .DEBUG .Println ("pv disable timer elapsed" )
1503-
1503+
15041504 // reset timer to prevent immediate charger re-enabling
15051505 lp .resetPVTimer ()
1506-
1506+
15071507 return 0
15081508 }
1509-
1509+
15101510 // suppress duplicate log message after timer started
15111511 if elapsed > time .Second {
15121512 lp .log .DEBUG .Printf ("pv disable timer remaining: %v" , (lp .GetDisableDelay () - elapsed ).Round (time .Second ))
15131513 }
15141514 } else if ! lp .pvTimer .IsZero () {
15151515 // increase delay
15161516 lp .pvTimer = lp .pvTimer .Add (2 * now .Sub (lp .pvTimerEvaluated ))
1517-
1517+
15181518 // reset timer if the delay would be too long
15191519 if lp .pvTimer .After (now ) {
15201520 lp .resetPVTimer ("disable" )
15211521 }
15221522 }
1523-
1523+
15241524 // lp.log.DEBUG.Println("pv disable timer: keep enabled")
15251525 lp .pvTimerEvaluated = now
15261526 return max (minCurrent , targetCurrent )
15271527 } else {
15281528 now := lp .clock .Now ()
1529-
1529+
15301530 // kick off enable sequence
15311531 if (lp .Enable .Threshold == 0 && targetCurrent >= minCurrent ) ||
15321532 (lp .Enable .Threshold != 0 && sitePower <= lp .Enable .Threshold ) {
15331533 lp .log .DEBUG .Printf ("site power %.0fW <= %.0fW enable threshold" , sitePower , lp .Enable .Threshold )
1534-
1534+
15351535 if lp .pvTimer .IsZero () {
15361536 lp .log .DEBUG .Printf ("pv enable timer start: %v" , lp .GetEnableDelay ())
15371537 lp .pvTimer = now
15381538 }
1539-
1539+
15401540 lp .publishTimer (pvTimer , lp .GetEnableDelay (), pvEnable )
1541-
1541+
15421542 elapsed := now .Sub (lp .pvTimer )
15431543 if elapsed >= lp .GetEnableDelay () {
15441544 lp .log .DEBUG .Println ("pv enable timer elapsed" )
1545-
1545+
15461546 // reset timer to prevent immediate charger re-disabling
15471547 lp .resetPVTimer ()
1548-
1548+
15491549 return minCurrent
15501550 }
1551-
1551+
15521552 // suppress duplicate log message after timer started
15531553 if elapsed > time .Second {
15541554 lp .log .DEBUG .Printf ("pv enable timer remaining: %v" , (lp .GetEnableDelay () - elapsed ).Round (time .Second ))
15551555 }
15561556 } else if ! lp .pvTimer .IsZero () {
15571557 // increase delay
15581558 lp .pvTimer = lp .pvTimer .Add (2 * now .Sub (lp .pvTimerEvaluated ))
1559-
1559+
15601560 // reset timer if the delay would be too long
15611561 if lp .pvTimer .After (now ) {
15621562 lp .resetPVTimer ("enable" )
15631563 }
15641564 }
1565-
1565+
15661566 // lp.log.DEBUG.Println("pv enable timer: keep disabled")
15671567 lp .pvTimerEvaluated = now
15681568 return 0
0 commit comments