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.
This commit is contained in:
parent
df53f34b51
commit
e7d454ff0b
@ -251,8 +251,7 @@ void PowerLimiterClass::loop()
|
|||||||
|
|
||||||
if (isStartThresholdReached()) { return true; }
|
if (isStartThresholdReached()) { return true; }
|
||||||
|
|
||||||
if (config.PowerLimiter.SolarPassThroughEnabled &&
|
if (config.PowerLimiter.BatteryAlwaysUseAtNight &&
|
||||||
config.PowerLimiter.BatteryAlwaysUseAtNight &&
|
|
||||||
!isDayPeriod &&
|
!isDayPeriod &&
|
||||||
!_batteryDischargeEnabled) {
|
!_batteryDischargeEnabled) {
|
||||||
_nighttimeDischarging = true;
|
_nighttimeDischarging = true;
|
||||||
|
|||||||
@ -153,13 +153,13 @@ void WebApiPowerLimiterClass::onAdminPost(AsyncWebServerRequest* request)
|
|||||||
if (config.Vedirect.Enabled) {
|
if (config.Vedirect.Enabled) {
|
||||||
config.PowerLimiter.SolarPassThroughEnabled = root["solar_passthrough_enabled"].as<bool>();
|
config.PowerLimiter.SolarPassThroughEnabled = root["solar_passthrough_enabled"].as<bool>();
|
||||||
config.PowerLimiter.SolarPassThroughLosses = root["solar_passthrough_losses"].as<uint8_t>();
|
config.PowerLimiter.SolarPassThroughLosses = root["solar_passthrough_losses"].as<uint8_t>();
|
||||||
config.PowerLimiter.BatteryAlwaysUseAtNight= root["battery_always_use_at_night"].as<bool>();
|
|
||||||
config.PowerLimiter.FullSolarPassThroughStartVoltage = static_cast<int>(root["full_solar_passthrough_start_voltage"].as<float>() * 100) / 100.0;
|
config.PowerLimiter.FullSolarPassThroughStartVoltage = static_cast<int>(root["full_solar_passthrough_start_voltage"].as<float>() * 100) / 100.0;
|
||||||
config.PowerLimiter.FullSolarPassThroughStopVoltage = static_cast<int>(root["full_solar_passthrough_stop_voltage"].as<float>() * 100) / 100.0;
|
config.PowerLimiter.FullSolarPassThroughStopVoltage = static_cast<int>(root["full_solar_passthrough_stop_voltage"].as<float>() * 100) / 100.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
config.PowerLimiter.IsInverterBehindPowerMeter = root["is_inverter_behind_powermeter"].as<bool>();
|
config.PowerLimiter.IsInverterBehindPowerMeter = root["is_inverter_behind_powermeter"].as<bool>();
|
||||||
config.PowerLimiter.IsInverterSolarPowered = root["is_inverter_solar_powered"].as<bool>();
|
config.PowerLimiter.IsInverterSolarPowered = root["is_inverter_solar_powered"].as<bool>();
|
||||||
|
config.PowerLimiter.BatteryAlwaysUseAtNight = root["battery_always_use_at_night"].as<bool>();
|
||||||
config.PowerLimiter.UseOverscalingToCompensateShading = root["use_overscaling_to_compensate_shading"].as<bool>();
|
config.PowerLimiter.UseOverscalingToCompensateShading = root["use_overscaling_to_compensate_shading"].as<bool>();
|
||||||
config.PowerLimiter.InverterId = root["inverter_serial"].as<uint64_t>();
|
config.PowerLimiter.InverterId = root["inverter_serial"].as<uint64_t>();
|
||||||
config.PowerLimiter.InverterChannelId = root["inverter_channel_id"].as<uint8_t>();
|
config.PowerLimiter.InverterChannelId = root["inverter_channel_id"].as<uint8_t>();
|
||||||
|
|||||||
@ -105,6 +105,14 @@
|
|||||||
wide
|
wide
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<InputElement
|
||||||
|
v-show="canUseBatteryDischargeAtNight()"
|
||||||
|
:label="$t('powerlimiteradmin.BatteryDischargeAtNight')"
|
||||||
|
v-model="powerLimiterConfigList.battery_always_use_at_night"
|
||||||
|
type="checkbox"
|
||||||
|
wide
|
||||||
|
/>
|
||||||
|
|
||||||
<InputElement
|
<InputElement
|
||||||
v-show="canUseOverscaling()"
|
v-show="canUseOverscaling()"
|
||||||
:label="$t('powerlimiteradmin.UseOverscalingToCompensateShading')"
|
:label="$t('powerlimiteradmin.UseOverscalingToCompensateShading')"
|
||||||
@ -221,13 +229,6 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<div v-if="powerLimiterConfigList.solar_passthrough_enabled">
|
<div v-if="powerLimiterConfigList.solar_passthrough_enabled">
|
||||||
<InputElement
|
|
||||||
:label="$t('powerlimiteradmin.BatteryDischargeAtNight')"
|
|
||||||
v-model="powerLimiterConfigList.battery_always_use_at_night"
|
|
||||||
type="checkbox"
|
|
||||||
wide
|
|
||||||
/>
|
|
||||||
|
|
||||||
<InputElement
|
<InputElement
|
||||||
:label="$t('powerlimiteradmin.SolarPassthroughLosses')"
|
:label="$t('powerlimiteradmin.SolarPassthroughLosses')"
|
||||||
v-model="powerLimiterConfigList.solar_passthrough_losses"
|
v-model="powerLimiterConfigList.solar_passthrough_losses"
|
||||||
@ -493,6 +494,10 @@ export default defineComponent({
|
|||||||
const cfg = this.powerLimiterConfigList;
|
const cfg = this.powerLimiterConfigList;
|
||||||
return cfg.is_inverter_solar_powered;
|
return cfg.is_inverter_solar_powered;
|
||||||
},
|
},
|
||||||
|
canUseBatteryDischargeAtNight() {
|
||||||
|
const cfg = this.powerLimiterConfigList;
|
||||||
|
return !cfg.is_inverter_solar_powered;
|
||||||
|
},
|
||||||
canUseSolarPassthrough() {
|
canUseSolarPassthrough() {
|
||||||
const cfg = this.powerLimiterConfigList;
|
const cfg = this.powerLimiterConfigList;
|
||||||
const meta = this.powerLimiterMetaData;
|
const meta = this.powerLimiterMetaData;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user