public override (double l1, double l2, double l3) Get() { var avg = _measurements.CalculateAggregatedAverageUsage(); if (avg.nrOfDataPoints < MinimumDataPoints) { return(-1, -1, -1); } Logger?.LogInformation($"avg current {avg.averageUsage} and charging at {avg.averageCharge}"); var chargeCurrent = Math.Round(LimitCurrentSolar(avg.averageCharge, avg.averageUsage), 2); bool stateHasChanged; if (chargeCurrent < MinimumChargeCurrent) { (chargeCurrent, stateHasChanged) = NotEnoughOverCapicity(); } else { var t = AllowToCharge(); if (t.changed) { LoggerState?.Info($"charging {chargeCurrent}"); } if (!t.allow) { chargeCurrent = 0.0f; } } return((float)Math.Round(chargeCurrent, 2), 0, 0); }
public override (double l1, double l2, double l3) Get() { var avg = _measurements.CalculateAggregatedAverageUsage(); if (avg.nrOfDataPoints < MinimumDataPoints) { return(-1, -1, -1); } var chargeCurrent = Math.Round(LimitEco(avg.averageCharge, avg.averageUsage), 2); Logger?.LogInformation($"avg current {avg.averageUsage} and avg charging at {avg.averageCharge}; limitted chargecurrent = {chargeCurrent} ({avg.nrOfDataPoints} datapoints (buffer size {MaxBufferSeconds} seconds)"); if ((_state.Current == ChargingState.Charging && chargeCurrent < MinimumEcoModeExportStop) || (_state.Current != ChargingState.Charging && chargeCurrent < MinimumEcoModeExportStart)) { if (_state.Current == ChargingState.Charging) { _state.Pause(); LoggerState.Info($"Charging state pause {chargeCurrent}"); } return(0, 0, 0); } else { var t = AllowToCharge(); if (t.allow) { // charge as fast as possible and as close to the current available capicity as possible var avgShort = _measurements.CalculateAggregatedAverageUsage(DateTimeProvider.Now.AddSeconds(-10)); var chargeCurrentShort1 = Math.Round(LimitEco(avgShort.averageCharge, avgShort.averageUsage), 2); Logger?.LogInformation($"charging {chargeCurrent} -> {chargeCurrentShort1}"); if (t.changed) { LoggerState?.Info($"charging {chargeCurrent} -> {chargeCurrentShort1}"); } return((float)Math.Round(chargeCurrentShort1, 2), 0, 0); } else { Logger?.LogInformation($"charging {chargeCurrent} -> not yet allowed"); return(0, 0, 0); } } }
public override (double l1, double l2, double l3) Get() { var avg = _measurements.CalculateAverageUsage(); if (avg.NrOfDataPoints < MinimumDataPoints) { return(-1, -1, -1); } LoggerState.Info($"avg current {avg.CurrentUsingL1}, {avg.CurrentUsingL2} , {avg.CurrentUsingL3}"); var retval1 = (float)Math.Round(LimitCurrent(avg.CurrentChargingL1, avg.CurrentUsingL1), 2); var retval2 = (float)Math.Round(LimitCurrent(avg.CurrentChargingL2, avg.CurrentUsingL2), 2); var retval3 = (float)Math.Round(LimitCurrent(avg.CurrentChargingL3, avg.CurrentUsingL3), 2); Logger?.LogInformation($"{(float)Math.Round(avg.CurrentUsingL1, 2)}, {(float)Math.Round(avg.CurrentUsingL2, 2)}, {(float)Math.Round(avg.CurrentUsingL3, 2)} => {retval1}, {retval2}, {retval3}"); return(retval1, retval2, retval3); }