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);
        }
Exemple #2
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);
        }