Feature: DPL: support setups without power meter
without a power meter configured, the DPL now sets the base load as the inverter limit if the battery charge allows it. it also takes solar-passthrough into account, i.e., if the battery is in a charge cycle but the solar output (Victron MPPT) is significant, the solar power will be used up until the base load. if the battery reaches the full solar passthrough threshold, the DPL will match the inverter limit to the MPPT solar output.
This commit is contained in:
parent
7e307114e5
commit
52d7ac9581
@ -23,7 +23,6 @@ public:
|
||||
DisabledByConfig,
|
||||
DisabledByMqtt,
|
||||
WaitingForValidTimestamp,
|
||||
PowerMeterDisabled,
|
||||
PowerMeterPending,
|
||||
InverterInvalid,
|
||||
InverterChanged,
|
||||
@ -38,7 +37,6 @@ public:
|
||||
NoVeDirect,
|
||||
NoEnergy,
|
||||
HuaweiPsu,
|
||||
Settling,
|
||||
Stable,
|
||||
};
|
||||
|
||||
|
||||
@ -31,12 +31,11 @@ frozen::string const& PowerLimiterClass::getStatusText(PowerLimiterClass::Status
|
||||
{
|
||||
static const frozen::string missing = "programmer error: missing status text";
|
||||
|
||||
static const frozen::map<Status, frozen::string, 20> texts = {
|
||||
static const frozen::map<Status, frozen::string, 19> texts = {
|
||||
{ Status::Initializing, "initializing (should not see me)" },
|
||||
{ Status::DisabledByConfig, "disabled by configuration" },
|
||||
{ Status::DisabledByMqtt, "disabled by MQTT" },
|
||||
{ Status::WaitingForValidTimestamp, "waiting for valid date and time to be available" },
|
||||
{ Status::PowerMeterDisabled, "no power meter is configured/enabled" },
|
||||
{ Status::PowerMeterPending, "waiting for sufficiently recent power meter reading" },
|
||||
{ Status::InverterInvalid, "invalid inverter selection/configuration" },
|
||||
{ Status::InverterChanged, "target inverter changed" },
|
||||
@ -174,13 +173,6 @@ void PowerLimiterClass::loop()
|
||||
return unconditionalSolarPassthrough(_inverter);
|
||||
}
|
||||
|
||||
// the normal mode of operation requires a valid
|
||||
// power meter reading to calculate a power limit
|
||||
if (!config.PowerMeter.Enabled) {
|
||||
shutdown(Status::PowerMeterDisabled);
|
||||
return;
|
||||
}
|
||||
|
||||
// concerns both power limits and start/stop/restart commands and is
|
||||
// only updated if a respective response was received from the inverter
|
||||
auto lastUpdateCmd = std::max(
|
||||
|
||||
@ -585,7 +585,7 @@
|
||||
"ConfigHintRequirement": "Erforderlich",
|
||||
"ConfigHintOptional": "Optional",
|
||||
"ConfigHintsIntro": "Folgende Hinweise zur Konfiguration des Dynamic Power Limiter (DPL) sollen beachtet werden:",
|
||||
"ConfigHintPowerMeterDisabled": "Zum Betrieb des DPL muss der Power Meter konfiguriert sein und Daten liefern.",
|
||||
"ConfigHintPowerMeterDisabled": "Der DPL stellt ohne Stromzählerschnittstelle lediglich die konfigurierte Grundlast als Limit am Wechselrichter ein (Ausnahme: (Full) Solar-Passthrough).",
|
||||
"ConfigHintNoInverter": "Vor dem Festlegen von Einstellungen des DPL muss mindestens ein Inverter konfiguriert sein.",
|
||||
"ConfigHintInverterCommunication": "Das Abrufen von Daten und Senden von Kommandos muss für den zu regelnden Wechselrichter aktiviert sein.",
|
||||
"ConfigHintNoChargeController": "Die Solar-Passthrough Funktion kann nur mit aktivierter VE.Direct Schnittstelle genutzt werden.",
|
||||
|
||||
@ -591,7 +591,7 @@
|
||||
"ConfigHintRequirement": "Required",
|
||||
"ConfigHintOptional": "Optional",
|
||||
"ConfigHintsIntro": "The following notes regarding the Dynamic Power Limiter (DPL) configuration shall be considered:",
|
||||
"ConfigHintPowerMeterDisabled": "Operating the DPL requires the Power Meter being configured and delivering data.",
|
||||
"ConfigHintPowerMeterDisabled": "Without a power meter interface, the inverter limit the DPL will configure equals the configured base load (exception: (full) solar-passthrough).",
|
||||
"ConfigHintNoInverter": "At least one inverter must be configured prior to setting up the DPL.",
|
||||
"ConfigHintInverterCommunication": "Polling data from and sending commands to the target inverter must be enabled.",
|
||||
"ConfigHintNoChargeController": "The solar-passthrough feature can only be used if the VE.Direct interface is configured.",
|
||||
|
||||
@ -673,7 +673,7 @@
|
||||
"ConfigHintRequirement": "Required",
|
||||
"ConfigHintOptional": "Optional",
|
||||
"ConfigHintsIntro": "The following notes regarding the Dynamic Power Limiter (DPL) configuration shall be considered:",
|
||||
"ConfigHintPowerMeterDisabled": "Operating the DPL requires the Power Meter being configured and delivering data.",
|
||||
"ConfigHintPowerMeterDisabled": "Without a power meter interface, the inverter limit the DPL will configure equals the configured base load (exception: (full) solar-passthrough).",
|
||||
"ConfigHintNoInverter": "At least one inverter must be configured prior to setting up the DPL.",
|
||||
"ConfigHintInverterCommunication": "Polling data from and sending commands to the target inverter must be enabled.",
|
||||
"ConfigHintNoChargeController": "The solar-passthrough feature can only be used if the VE.Direct interface is configured.",
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
v-model="powerLimiterConfigList.verbose_logging"
|
||||
type="checkbox" wide/>
|
||||
|
||||
<InputElement v-show="isEnabled()"
|
||||
<InputElement v-show="isEnabled() && hasPowerMeter()"
|
||||
:label="$t('powerlimiteradmin.TargetPowerConsumption')"
|
||||
:tooltip="$t('powerlimiteradmin.TargetPowerConsumptionHint')"
|
||||
v-model="powerLimiterConfigList.target_power_consumption"
|
||||
@ -99,7 +99,8 @@
|
||||
placeholder="800" :min="(powerLimiterConfigList.base_load_limit + 1).toString()" postfix="W"
|
||||
type="number" wide/>
|
||||
|
||||
<InputElement :label="$t('powerlimiteradmin.InverterIsBehindPowerMeter')"
|
||||
<InputElement v-show="hasPowerMeter()"
|
||||
:label="$t('powerlimiteradmin.InverterIsBehindPowerMeter')"
|
||||
v-model="powerLimiterConfigList.is_inverter_behind_powermeter"
|
||||
type="checkbox" wide/>
|
||||
|
||||
@ -275,8 +276,7 @@ export default defineComponent({
|
||||
var hints = [];
|
||||
|
||||
if (meta.power_meter_enabled !== true) {
|
||||
hints.push({severity: "requirement", subject: "PowerMeterDisabled"});
|
||||
this.configAlert = true;
|
||||
hints.push({severity: "optional", subject: "PowerMeterDisabled"});
|
||||
}
|
||||
|
||||
if (typeof meta.inverters === "undefined" || Object.keys(meta.inverters).length == 0) {
|
||||
@ -305,6 +305,9 @@ export default defineComponent({
|
||||
isEnabled() {
|
||||
return this.powerLimiterConfigList.enabled;
|
||||
},
|
||||
hasPowerMeter() {
|
||||
return this.powerLimiterMetaData.power_meter_enabled;
|
||||
},
|
||||
canUseSolarPassthrough() {
|
||||
var cfg = this.powerLimiterConfigList;
|
||||
var meta = this.powerLimiterMetaData;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user