From e7d454ff0bfcb70b4576ed2fb9270041171e5cbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20B=C3=B6hm?= Date: Mon, 19 Aug 2024 20:49:37 +0200 Subject: [PATCH] Feature: support 'use battery at night' without VE.Direct previously, we needed VE.Direct enabled to know the solar charge controller output, which solely decided when it was "nighttime". since this is now determined by the wall clock, we can offer this feature to users without a Victron charge controller connected using VE.Direct. --- src/PowerLimiter.cpp | 3 +-- src/WebApi_powerlimiter.cpp | 2 +- webapp/src/views/PowerLimiterAdminView.vue | 19 ++++++++++++------- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/PowerLimiter.cpp b/src/PowerLimiter.cpp index 1c471a3d..93f027b0 100644 --- a/src/PowerLimiter.cpp +++ b/src/PowerLimiter.cpp @@ -251,8 +251,7 @@ void PowerLimiterClass::loop() if (isStartThresholdReached()) { return true; } - if (config.PowerLimiter.SolarPassThroughEnabled && - config.PowerLimiter.BatteryAlwaysUseAtNight && + if (config.PowerLimiter.BatteryAlwaysUseAtNight && !isDayPeriod && !_batteryDischargeEnabled) { _nighttimeDischarging = true; diff --git a/src/WebApi_powerlimiter.cpp b/src/WebApi_powerlimiter.cpp index b28380d3..adea6105 100644 --- a/src/WebApi_powerlimiter.cpp +++ b/src/WebApi_powerlimiter.cpp @@ -153,13 +153,13 @@ void WebApiPowerLimiterClass::onAdminPost(AsyncWebServerRequest* request) if (config.Vedirect.Enabled) { config.PowerLimiter.SolarPassThroughEnabled = root["solar_passthrough_enabled"].as(); config.PowerLimiter.SolarPassThroughLosses = root["solar_passthrough_losses"].as(); - config.PowerLimiter.BatteryAlwaysUseAtNight= root["battery_always_use_at_night"].as(); config.PowerLimiter.FullSolarPassThroughStartVoltage = static_cast(root["full_solar_passthrough_start_voltage"].as() * 100) / 100.0; config.PowerLimiter.FullSolarPassThroughStopVoltage = static_cast(root["full_solar_passthrough_stop_voltage"].as() * 100) / 100.0; } config.PowerLimiter.IsInverterBehindPowerMeter = root["is_inverter_behind_powermeter"].as(); config.PowerLimiter.IsInverterSolarPowered = root["is_inverter_solar_powered"].as(); + config.PowerLimiter.BatteryAlwaysUseAtNight = root["battery_always_use_at_night"].as(); config.PowerLimiter.UseOverscalingToCompensateShading = root["use_overscaling_to_compensate_shading"].as(); config.PowerLimiter.InverterId = root["inverter_serial"].as(); config.PowerLimiter.InverterChannelId = root["inverter_channel_id"].as(); diff --git a/webapp/src/views/PowerLimiterAdminView.vue b/webapp/src/views/PowerLimiterAdminView.vue index c87d8ffe..96f51ed4 100644 --- a/webapp/src/views/PowerLimiterAdminView.vue +++ b/webapp/src/views/PowerLimiterAdminView.vue @@ -105,6 +105,14 @@ wide /> + +
- -