Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion api/batterymode.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ type BatteryMode int
const (
BatteryUnknown BatteryMode = iota
BatteryNormal
BatteryHold
BatteryHoldDischarge
BatteryCharge
BatteryHoldCharge
)
26 changes: 15 additions & 11 deletions api/batterymode_enumer.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions assets/js/components/BottomTabs/Bar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
class="tab-icon"
:soc="batterySoc || 0"
:grid-charge="batteryGridChargeActive"
:hold="batteryHold"
:hold="batteryHoldDischarge"
/>
</Item>

Expand Down Expand Up @@ -85,8 +85,8 @@ export default defineComponent({
batterySoc() {
return this.battery?.soc;
},
batteryHold() {
return this.batteryMode === "hold";
batteryHoldDischarge() {
return this.batteryMode === "holddischarge";
},
batteryConfigured() {
return (this.battery?.devices?.length ?? 0) > 0;
Expand Down
12 changes: 7 additions & 5 deletions assets/js/components/Energyflow/Energyflow.vue
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
:batteryCharge="batteryCharge"
:batteryDischarge="batteryDischarge"
:batteryGridCharge="batteryGridChargeActive"
:batteryHold="batteryHold"
:batteryHoldDischarge="batteryHoldDischarge"
:pvProduction="pvProduction"
:homePower="homePower"
:batterySoc="batterySoc"
Expand Down Expand Up @@ -114,7 +114,7 @@
:power="batteryDischarge"
:powerUnit="powerUnit"
:iconProps="{
hold: batteryHold,
hold: batteryHoldDischarge,
soc: batterySoc,
gridCharge: batteryGridChargeActive,
}"
Expand Down Expand Up @@ -448,10 +448,12 @@ export default defineComponent({
return this.$t("main.energyflow.batteryCharge");
},
batteryDischargeLabel() {
return this.$t(`main.energyflow.battery${this.batteryHold ? "Hold" : "Discharge"}`);
return this.$t(
`main.energyflow.battery${this.batteryHoldDischarge ? "HoldDischarge" : "Discharge"}`
);
},
batteryHold() {
return this.batteryMode === "hold";
batteryHoldDischarge() {
return this.batteryMode === "holddischarge";
},
consumption() {
return this.homePower + this.batteryCharge + this.loadpointsPower;
Expand Down
8 changes: 6 additions & 2 deletions assets/js/components/Energyflow/Visualization.vue
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,11 @@
</div>
<div class="label-scale-name">Out</div>
</div>
<BatteryIcon hold class="battery-hold" :class="{ 'battery-hold--active': batteryHold }" />
<BatteryIcon
hold
class="battery-hold"
:class="{ 'battery-hold--active': batteryHoldDischarge }"
/>
</div>
</template>

Expand Down Expand Up @@ -131,7 +135,7 @@ export default defineComponent({
batterySoc: { type: Number },
batteryCharge: { type: Number, default: 0 },
batteryDischarge: { type: Number, default: 0 },
batteryHold: { type: Boolean, default: false },
batteryHoldDischarge: { type: Boolean, default: false },
batteryGridCharge: { type: Boolean, default: false },
pvProduction: { type: Number, default: 0 },
homePower: { type: Number, default: 0 },
Expand Down
14 changes: 7 additions & 7 deletions assets/js/components/Loadpoints/BatteryBoostButton.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<button
class="root position-relative"
tabindex="0"
:class="{ active, belowLimit, batteryHold, full }"
:class="{ active, belowLimit, batteryHoldDischarge, full }"
:style="{ '--soc': `${adjustedSoc}%` }"
:disabled="disabled"
:aria-label="ariaLabel"
Expand Down Expand Up @@ -67,11 +67,11 @@ export default defineComponent({
belowLimit(): boolean {
return this.batterySoc < this.batteryBoostLimit;
},
batteryHold(): boolean {
return this.batteryMode === BATTERY_MODE.HOLD;
batteryHoldDischarge(): boolean {
return this.batteryMode === BATTERY_MODE.HOLD_DISCHARGE;
},
available(): boolean {
return !this.belowLimit && !this.batteryHold;
return !this.belowLimit && !this.batteryHoldDischarge;
},
iconStyle() {
return {
Expand All @@ -83,7 +83,7 @@ export default defineComponent({
},
ariaLabel(): string {
const t = (key: string) => this.$t(`main.loadpointSettings.batteryBoost.${key}`);
if (this.batteryHold) return t("stateHold");
if (this.batteryHoldDischarge) return t("stateHold");
if (this.active) return t("stateActive");
if (this.belowLimit) return t("stateBelowLimit");
return t("stateReady");
Expand Down Expand Up @@ -114,7 +114,7 @@ export default defineComponent({
const newValue = !this.active;

// battery hold: only show message, don't toggle
if (newValue && this.batteryHold) {
if (newValue && this.batteryHoldDischarge) {
status("batteryBoostHold");
return;
}
Expand Down Expand Up @@ -172,7 +172,7 @@ export default defineComponent({
opacity: 0.25;
}
.root.belowLimit:not(:disabled),
.root.batteryHold:not(:disabled) {
.root.batteryHoldDischarge:not(:disabled) {
opacity: 0.5;
}
.root:before,
Expand Down
3 changes: 2 additions & 1 deletion assets/js/types/evcc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -411,8 +411,9 @@ export enum CHARGE_MODE {
export enum BATTERY_MODE {
UNKNOWN = "unknown",
NORMAL = "normal",
HOLD = "hold",
HOLD_DISCHARGE = "holddischarge",
CHARGE = "charge",
HOLD_CHARGE = "holdcharge",
}

export enum PHASES {
Expand Down
2 changes: 1 addition & 1 deletion cmd/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ const (
flagCustomCssDescription = "Additional user-defined CSS file for custom styling. No compatibility guarantees."

flagBatteryMode = "battery-mode"
flagBatteryModeDescription = "Set battery mode (normal, hold, charge)"
flagBatteryModeDescription = "Set battery mode (normal, holddischarge, holdcharge, charge)"
flagBatteryModeWait = "battery-mode-wait"
flagBatteryModeWaitDescription = "Wait given duration during which potential watchdogs are active"

Expand Down
8 changes: 4 additions & 4 deletions core/site_battery.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func (site *Site) updateBatteryMode(batteryGridChargeActive bool, rate api.Rate)
fromToCharge := batteryMode == api.BatteryCharge || batteryMode == api.BatteryUnknown && site.batteryMode == api.BatteryCharge
if dimmed := circuitDimmed(site.circuit); fromToCharge && dimmed != nil && *dimmed {
site.log.DEBUG.Println("battery mode: circuit dimmed")
batteryMode = api.BatteryHold
batteryMode = api.BatteryHoldDischarge
}

// NOTE: applyBatteryMode is always called when charge mode is active to validate max soc
Expand Down Expand Up @@ -105,7 +105,7 @@ func (site *Site) requiredBatteryMode(batteryGridChargeActive bool, rate api.Rat
case batteryGridChargeActive:
res = keepUnlessModified(api.BatteryCharge)
case site.dischargeControlActive(rate):
res = keepUnlessModified(api.BatteryHold)
res = keepUnlessModified(api.BatteryHoldDischarge)
case batteryModeModified(batMode):
res = api.BatteryNormal
}
Expand Down Expand Up @@ -158,7 +158,7 @@ func (site *Site) applyBatteryMode(mode api.BatteryMode) error {
}

// validate max soc
if fromToCharge && mode != api.BatteryHold {
if fromToCharge && mode != api.BatteryHoldDischarge {
ok, err := site.batteryMaxSocReached(dev)
if err != nil && !errors.Is(err, api.ErrNotAvailable) {
return err
Expand All @@ -167,7 +167,7 @@ func (site *Site) applyBatteryMode(mode api.BatteryMode) error {
// put battery into hold mode when soc limit reached
if ok {
// TODO do this only once
mode = api.BatteryHold
mode = api.BatteryHoldDischarge
}
}

Expand Down
18 changes: 9 additions & 9 deletions core/site_battery_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ func TestApplyBatteryMode(t *testing.T) {
}{
{api.BatteryUnknown, api.BatteryUnknown}, // no change required
{api.BatteryNormal, api.BatteryUnknown}, // no change required
{api.BatteryHold, api.BatteryNormal},
{api.BatteryHoldDischarge, api.BatteryNormal},
{api.BatteryCharge, api.BatteryNormal},
} {
t.Logf("%+v", tc)
Expand Down Expand Up @@ -97,9 +97,9 @@ func TestExternalBatteryModeChange(t *testing.T) {
{api.BatteryNormal, api.BatteryNormal, api.BatteryUnknown},
{api.BatteryNormal, api.BatteryCharge, api.BatteryCharge},

{api.BatteryHold, api.BatteryUnknown, api.BatteryNormal}, // return to normal
{api.BatteryHold, api.BatteryNormal, api.BatteryNormal},
{api.BatteryHold, api.BatteryHold, api.BatteryUnknown},
{api.BatteryHoldDischarge, api.BatteryUnknown, api.BatteryNormal}, // return to normal
{api.BatteryHoldDischarge, api.BatteryNormal, api.BatteryNormal},
{api.BatteryHoldDischarge, api.BatteryHoldDischarge, api.BatteryUnknown},

{api.BatteryCharge, api.BatteryUnknown, api.BatteryNormal}, // return to normal
{api.BatteryCharge, api.BatteryNormal, api.BatteryNormal},
Expand Down Expand Up @@ -172,16 +172,16 @@ func TestForcedBatteryChargeLimits(t *testing.T) {
soc float64
}{
{api.BatteryUnknown, api.BatteryCharge, 50},
{api.BatteryUnknown, api.BatteryHold, 90},
{api.BatteryUnknown, api.BatteryHoldDischarge, 90},

{api.BatteryNormal, api.BatteryCharge, 50},
{api.BatteryNormal, api.BatteryHold, 90},
{api.BatteryNormal, api.BatteryHoldDischarge, 90},

{api.BatteryHold, api.BatteryCharge, 50},
{api.BatteryHold, api.BatteryHold, 90}, // TODO make this api.BatteryUnknown
{api.BatteryHoldDischarge, api.BatteryCharge, 50},
{api.BatteryHoldDischarge, api.BatteryHoldDischarge, 90}, // TODO make this api.BatteryUnknown

{api.BatteryCharge, api.BatteryUnknown, 50},
{api.BatteryCharge, api.BatteryHold, 90},
{api.BatteryCharge, api.BatteryHoldDischarge, 90},
} {
t.Logf("%+v", tc)

Expand Down
4 changes: 2 additions & 2 deletions core/site_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,12 @@ func TestRequiredBatteryMode(t *testing.T) {
}{
{false, api.BatteryUnknown, api.BatteryUnknown}, // ignore
{false, api.BatteryNormal, api.BatteryUnknown}, // ignore
{false, api.BatteryHold, api.BatteryNormal},
{false, api.BatteryHoldDischarge, api.BatteryNormal},
{false, api.BatteryCharge, api.BatteryNormal},

{true, api.BatteryUnknown, api.BatteryCharge},
{true, api.BatteryNormal, api.BatteryCharge},
{true, api.BatteryHold, api.BatteryCharge},
{true, api.BatteryHoldDischarge, api.BatteryCharge},
{true, api.BatteryCharge, api.BatteryUnknown}, // ignore
}

Expand Down
2 changes: 1 addition & 1 deletion i18n/bg.json
Original file line number Diff line number Diff line change
Expand Up @@ -898,7 +898,7 @@
"batteryDischarge": "Разреждане на батерията",
"batteryGridChargeActive": "зареждането от мрежата е актижно",
"batteryGridChargeLimit": "зареждане от мрежата, когато",
"batteryHold": "Батерия (заключена)",
"batteryHoldDischarge": "Батерия (заключена)",
"batteryTooltip": "{energy} от {total} ({soc})",
"forecastTooltip": "прогноза: оставаща фотоволтаична продукция за днес",
"gridImport": "Използвана енергия от мрежата",
Expand Down
2 changes: 1 addition & 1 deletion i18n/cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -1172,7 +1172,7 @@
"batteryForecastNextLow": "Příští nízká",
"batteryGridChargeActive": "nabíjení domácí baterie ze sítě je aktivní",
"batteryGridChargeLimit": "nabíjení ze sítě, když",
"batteryHold": "Baterie (udržování stavu nabití)",
"batteryHoldDischarge": "Baterie (udržování stavu nabití)",
"batteryTooltip": "{energy} z {total} ({soc})",
"forecast": "Předpověď",
"forecastTooltip": "předpověď: zbývající solární výroba dnes",
Expand Down
2 changes: 1 addition & 1 deletion i18n/da.json
Original file line number Diff line number Diff line change
Expand Up @@ -1174,7 +1174,7 @@
"batteryForecastNextLow": "Næste lavpunkt",
"batteryGridChargeActive": "Opladning fra elnettet: aktiv",
"batteryGridChargeLimit": "Opladning fra elnettet: når",
"batteryHold": "Batteri (låst)",
"batteryHoldDischarge": "Batteri (låst)",
"batteryTooltip": "{energy} af {total} ({soc})",
"forecast": "Prognose",
"forecastTooltip": "prognose: resterende solenergi produktion i dag",
Expand Down
2 changes: 1 addition & 1 deletion i18n/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -1162,7 +1162,7 @@
"batteryForecastNextLow": "Tief",
"batteryGridChargeActive": "Netzladen: aktiv",
"batteryGridChargeLimit": "Netzladen: wenn",
"batteryHold": "Batterie (gesperrt)",
"batteryHoldDischarge": "Batterie (gesperrt)",
"batteryTooltip": "{energy} von {total} ({soc})",
"forecast": "Vorhersage",
"forecastTooltip": "Vorhersage: verbleibende PV-Produktion heute",
Expand Down
2 changes: 1 addition & 1 deletion i18n/el.json
Original file line number Diff line number Diff line change
Expand Up @@ -903,7 +903,7 @@
"batteryDischarge": "Αποφόρτιση μπαταρίας",
"batteryGridChargeActive": "ενεργή φόρτιση από το δίκτυο",
"batteryGridChargeLimit": "φόρτιση από το δίκτυο όταν",
"batteryHold": "Μπαταρία (κλειδωμένο)",
"batteryHoldDischarge": "Μπαταρία (κλειδωμένο)",
"batteryTooltip": "{energy} από {total} ({soc})",
"forecastTooltip": "πρόβλεψη: εναπομένουσα ηλιακή παραγωγή σήμερα",
"gridImport": "Χρήση δικτύου",
Expand Down
2 changes: 1 addition & 1 deletion i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -1162,7 +1162,7 @@
"batteryForecastNextLow": "Low",
"batteryGridChargeActive": "Grid charging: active",
"batteryGridChargeLimit": "Grid charging: when",
"batteryHold": "Battery (locked)",
"batteryHoldDischarge": "Battery (locked)",
"batteryTooltip": "{energy} of {total} ({soc})",
"forecast": "Forecast",
"forecastTooltip": "forecast: remaining solar production today",
Expand Down
2 changes: 1 addition & 1 deletion i18n/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -915,7 +915,7 @@
"batteryDischarge": "Descargar la batería",
"batteryGridChargeActive": "carga de red activa",
"batteryGridChargeLimit": "carga de la red cuando",
"batteryHold": "Batería (bloqueada)",
"batteryHoldDischarge": "Batería (bloqueada)",
"batteryTooltip": "{energy} de {total} ({soc})",
"forecastTooltip": "Previsión: producción solar restante para hoy",
"gridImport": "Consumo de red",
Expand Down
2 changes: 1 addition & 1 deletion i18n/fi.json
Original file line number Diff line number Diff line change
Expand Up @@ -1170,7 +1170,7 @@
"batteryForecastFull": "varaus täynnä {time}",
"batteryGridChargeActive": "Ladataan verkosta",
"batteryGridChargeLimit": "Milloin ladataan verkosta",
"batteryHold": "Akku (lukittu)",
"batteryHoldDischarge": "Akku (lukittu)",
"batteryTooltip": "{energy} / {total} ({soc})",
"forecast": "Ennuste",
"forecastTooltip": "ennuste: jäljellä oleva aurinkotuotanto tänään",
Expand Down
2 changes: 1 addition & 1 deletion i18n/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -1173,7 +1173,7 @@
"batteryForecastNextLow": "Prochain creux",
"batteryGridChargeActive": "Charge réseau : active",
"batteryGridChargeLimit": "Charge réseau : quand",
"batteryHold": "Batterie (verrouillée)",
"batteryHoldDischarge": "Batterie (verrouillée)",
"batteryTooltip": "{energy} sur {total} ({soc})",
"forecast": "Prévisions",
"forecastTooltip": "prévision : production solaire restante aujourd’hui",
Expand Down
2 changes: 1 addition & 1 deletion i18n/hr.json
Original file line number Diff line number Diff line change
Expand Up @@ -904,7 +904,7 @@
"batteryDischarge": "Pražnjenje baterije",
"batteryGridChargeActive": "punjenje putem mreže je aktivno",
"batteryGridChargeLimit": "punjene putem mreže kada",
"batteryHold": "Baterija (zaključano)",
"batteryHoldDischarge": "Baterija (zaključano)",
"batteryTooltip": "{energy} od {total} ({soc})",
"forecastTooltip": "predviđanje: današnja preostala solarna proizvodnja",
"gridImport": "Korištenje mreže",
Expand Down
Loading
Loading