evcc-io/tests/config-param-service-modbus.spec.ts
Ingo b02f3d98eb
Add Modbus service for dynamic parameter reading (#25908)
Co-authored-by: andig <cpuidle@gmail.com>
Co-authored-by: Michael Geers <michael@geers.tv>
2026-01-13 12:15:44 +00:00

67 lines
2.3 KiB
TypeScript

import { test, expect } from "@playwright/test";
import type { Page } from "@playwright/test";
import { start, stop, baseUrl } from "./evcc";
import { expectModalVisible } from "./utils";
test.use({ baseURL: baseUrl() });
const templateFlags = [
"--disable-auth",
"--template-type",
"meter",
"--template",
"tests/config-param-service-modbus.tpl.yaml",
];
test.beforeAll(async () => {
await start(undefined, undefined, templateFlags);
});
test.afterAll(async () => {
await stop();
});
async function openMeterModal(page: Page) {
await page.goto("/#/config");
await page.getByRole("button", { name: "Add grid meter" }).click();
const meterModal = page.getByTestId("meter-modal");
await expectModalVisible(meterModal);
await meterModal.getByLabel("Manufacturer").selectOption("Service Modbus Test Meter");
return meterModal;
}
test.describe("modbus service expansion", async () => {
test("tcp/ip and serial switching", async ({ page }) => {
const meterModal = await openMeterModal(page);
await meterModal.getByLabel("Register address").fill("100");
await meterModal.getByLabel("IP address or hostname").fill("192.168.1.1");
await meterModal.getByLabel("Port").fill("502");
await expect(meterModal.getByLabel("Test value")).toHaveValue("100,id:2,tcp");
await meterModal.getByLabel("Test value").clear();
await meterModal.getByText("RS485").first().click();
await meterModal.getByLabel("Modbus ID").fill("44");
await meterModal.getByLabel("Device").fill("/dev/ttyUSB0");
await meterModal.getByLabel("Baud rate").selectOption("9600");
await meterModal.getByLabel("ComSet").selectOption("8N1");
await expect(meterModal.getByLabel("Test value")).toHaveValue("100,id:44,serial");
});
test("no service call without connection params", async ({ page }) => {
const meterModal = await openMeterModal(page);
await meterModal.getByLabel("Register address").fill("100");
await expect(meterModal.getByLabel("Test value")).toHaveValue("");
});
test("template default id and port are used", async ({ page }) => {
const meterModal = await openMeterModal(page);
await meterModal.getByLabel("Register address").fill("100");
await meterModal.getByLabel("IP address or hostname").fill("192.168.1.1");
await expect(meterModal.getByLabel("Test value")).toHaveValue("100,id:2,tcp");
});
});