Vehicle: deprecate default charge mode in config (#31893)
This commit is contained in:
parent
70ad1751de
commit
199365288a
7 changed files with 56 additions and 4 deletions
|
|
@ -99,7 +99,7 @@ export default defineComponent({
|
||||||
computed: {
|
computed: {
|
||||||
modeOptions(): SelectOption<string>[] {
|
modeOptions(): SelectOption<string>[] {
|
||||||
return [
|
return [
|
||||||
{ value: "", name: "---" },
|
{ value: "", name: this.$t("config.loadpoint.defaultModeKeep") },
|
||||||
...[OFF, PV, MINPV, NOW].map((mode) => ({
|
...[OFF, PV, MINPV, NOW].map((mode) => ({
|
||||||
value: mode,
|
value: mode,
|
||||||
name: this.$t(`main.mode.${mode}`),
|
name: this.$t(`main.mode.${mode}`),
|
||||||
|
|
|
||||||
14
cmd/setup.go
14
cmd/setup.go
|
|
@ -500,6 +500,10 @@ func configureVehicles(static []config.Named, names ...string) error {
|
||||||
return fmt.Errorf("cannot create vehicle '%s': %w", cc.Name, err)
|
return fmt.Errorf("cannot create vehicle '%s': %w", cc.Name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if _, ok := instance.OnIdentified().GetMode(); ok {
|
||||||
|
log.WARN.Printf("vehicle '%s': default charge 'mode' is deprecated, please configure via UI (charging plan > arrival)", cc.Name)
|
||||||
|
}
|
||||||
|
|
||||||
mu.Lock()
|
mu.Lock()
|
||||||
defer mu.Unlock()
|
defer mu.Unlock()
|
||||||
devs1 = append(devs1, config.NewStaticDevice(cc, instance))
|
devs1 = append(devs1, config.NewStaticDevice(cc, instance))
|
||||||
|
|
@ -525,6 +529,16 @@ func configureVehicles(static []config.Named, names ...string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// migrate deprecated mode property to vehicle mode setting
|
||||||
|
if mode, ok := cc.Other["mode"].(string); ok && mode != "" {
|
||||||
|
key := fmt.Sprintf("vehicle.%s.%s", cc.Name, keys.Mode)
|
||||||
|
if _, err := settings.String(key); err != nil {
|
||||||
|
if _, err := api.ChargeModeString(mode); err == nil {
|
||||||
|
settings.SetString(key, mode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
instance, err := vehicleInstance(cc)
|
instance, err := vehicleInstance(cc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot create vehicle '%s': %w", cc.Name, err)
|
return fmt.Errorf("cannot create vehicle '%s': %w", cc.Name, err)
|
||||||
|
|
|
||||||
|
|
@ -439,6 +439,7 @@
|
||||||
"heating": "Wird beim Systemstart gesetzt."
|
"heating": "Wird beim Systemstart gesetzt."
|
||||||
},
|
},
|
||||||
"defaultModeHelpKeep": "Zuletzt ausgewählter Modus wird beibehalten.",
|
"defaultModeHelpKeep": "Zuletzt ausgewählter Modus wird beibehalten.",
|
||||||
|
"defaultModeKeep": "beibehalten",
|
||||||
"defaultModeLabel": "Standard-Modus",
|
"defaultModeLabel": "Standard-Modus",
|
||||||
"delete": "Löschen",
|
"delete": "Löschen",
|
||||||
"electricalSubtitle": "Im Zweifelsfall Elektriker fragen.",
|
"electricalSubtitle": "Im Zweifelsfall Elektriker fragen.",
|
||||||
|
|
|
||||||
|
|
@ -439,6 +439,7 @@
|
||||||
"heating": "Is set when on system start."
|
"heating": "Is set when on system start."
|
||||||
},
|
},
|
||||||
"defaultModeHelpKeep": "Keeps the last selected mode.",
|
"defaultModeHelpKeep": "Keeps the last selected mode.",
|
||||||
|
"defaultModeKeep": "keep as is",
|
||||||
"defaultModeLabel": "Default mode",
|
"defaultModeLabel": "Default mode",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"electricalSubtitle": "When in doubt, ask your electrician.",
|
"electricalSubtitle": "When in doubt, ask your electrician.",
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,7 @@ test.describe("vehicles", async () => {
|
||||||
await expect(vehicleModal.getByLabel("Battery capacity")).toBeVisible();
|
await expect(vehicleModal.getByLabel("Battery capacity")).toBeVisible();
|
||||||
|
|
||||||
await page.getByRole("button", { name: "Show advanced settings" }).click();
|
await page.getByRole("button", { name: "Show advanced settings" }).click();
|
||||||
await expect(vehicleModal.getByLabel("Default charging mode")).toBeVisible();
|
await expect(vehicleModal.getByLabel("Default charging mode")).not.toBeVisible(); // deprecated
|
||||||
await expect(vehicleModal.getByLabel("Maximum number of phases")).toBeVisible();
|
await expect(vehicleModal.getByLabel("Maximum number of phases")).toBeVisible();
|
||||||
await expect(vehicleModal.getByLabel("Minimum current")).toBeVisible();
|
await expect(vehicleModal.getByLabel("Minimum current")).toBeVisible();
|
||||||
await expect(vehicleModal.getByLabel("Maximum current")).toBeVisible();
|
await expect(vehicleModal.getByLabel("Maximum current")).toBeVisible();
|
||||||
|
|
@ -154,7 +154,7 @@ test.describe("vehicles", async () => {
|
||||||
await expect(vehicleModal.getByLabel("RFID identification")).toBeVisible();
|
await expect(vehicleModal.getByLabel("RFID identification")).toBeVisible();
|
||||||
|
|
||||||
await page.getByRole("button", { name: "Hide advanced settings" }).click();
|
await page.getByRole("button", { name: "Hide advanced settings" }).click();
|
||||||
await expect(vehicleModal.getByLabel("Default charging mode")).not.toBeVisible();
|
await expect(vehicleModal.getByLabel("Maximum number of phases")).not.toBeVisible();
|
||||||
|
|
||||||
// polestar template
|
// polestar template
|
||||||
await vehicleModal.getByLabel("Manufacturer").selectOption("Polestar");
|
await vehicleModal.getByLabel("Manufacturer").selectOption("Polestar");
|
||||||
|
|
@ -165,7 +165,27 @@ test.describe("vehicles", async () => {
|
||||||
|
|
||||||
await page.getByRole("button", { name: "Show advanced settings" }).click();
|
await page.getByRole("button", { name: "Show advanced settings" }).click();
|
||||||
await expect(vehicleModal.getByLabel("Cache optional")).toBeVisible();
|
await expect(vehicleModal.getByLabel("Cache optional")).toBeVisible();
|
||||||
await expect(vehicleModal.getByLabel("Default charging mode")).toBeVisible();
|
await expect(vehicleModal.getByLabel("Default charging mode")).not.toBeVisible(); // deprecated
|
||||||
|
});
|
||||||
|
|
||||||
|
test("migrate deprecated mode property to default mode setting", async ({ page }) => {
|
||||||
|
await start("config-one-lp.evcc.yaml", "vehicle-mode-migrate.sql");
|
||||||
|
|
||||||
|
await page.goto("/");
|
||||||
|
|
||||||
|
const lp = page.getByTestId("loadpoint").first();
|
||||||
|
await lp.getByTestId("change-vehicle").locator("select").selectOption("Grey Car");
|
||||||
|
|
||||||
|
// migrated mode is applied on vehicle selection
|
||||||
|
await expect(lp.getByTestId("mode").getByRole("button", { name: "Fast" })).toHaveClass(
|
||||||
|
/active/
|
||||||
|
);
|
||||||
|
|
||||||
|
await lp.getByTestId("charging-plan").getByRole("button", { name: "none" }).click();
|
||||||
|
const modal = page.getByTestId("charging-plan-modal");
|
||||||
|
await expectModalVisible(modal);
|
||||||
|
await modal.getByRole("link", { name: "Arrival" }).click();
|
||||||
|
await expect(modal.getByRole("combobox", { name: "Default mode" })).toHaveValue("now");
|
||||||
});
|
});
|
||||||
|
|
||||||
test("save and restore rfid identifiers", async ({ page }) => {
|
test("save and restore rfid identifiers", async ({ page }) => {
|
||||||
|
|
|
||||||
15
tests/vehicle-mode-migrate.sql
Normal file
15
tests/vehicle-mode-migrate.sql
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
CREATE TABLE `configs` (
|
||||||
|
`id` integer PRIMARY KEY AUTOINCREMENT
|
||||||
|
, `class` integer
|
||||||
|
, `type` text
|
||||||
|
, `title` text
|
||||||
|
, `icon` text
|
||||||
|
, `product` text
|
||||||
|
, `value` text
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO configs(class, type, value) VALUES(3, 'template', '{"template":"offline","title":"Grey Car","mode":"now"}');
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
@ -130,6 +130,7 @@ params:
|
||||||
example: 10s
|
example: 10s
|
||||||
type: duration
|
type: duration
|
||||||
- name: mode
|
- name: mode
|
||||||
|
deprecated: true
|
||||||
description:
|
description:
|
||||||
de: Standardlademodus
|
de: Standardlademodus
|
||||||
en: Default charging mode
|
en: Default charging mode
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue