# Web Interface and REST API This document describes the web interfaces provided by the firmware. ## Static Web UI The device serves a static web interface (built using React, located in `../web-basic/dist` during development) from its root URL (`/`). - **URL:** `http:///` - **Functionality:** Provides a user interface for monitoring and potentially controlling the device. All dynamic data is fetched via the REST API described below. ## REST API The device exposes a RESTful API for programmatic interaction under the `/api/v1/` path. The API specification follows the OpenAPI 3.0 standard and can be viewed: - **Live Docs (Swagger UI):** `http:///api-docs` (Serves Swagger UI interface) - **Specification File:** `http:///api/swagger.yaml` ### Endpoints #### System * **`GET /api/v1/system/info`** * **Description:** Retrieves general system information, including firmware version, board name, uptime, and a list of components registered with the Modbus manager. * **Response:** JSON object containing system details and an array of component objects (`id`, `name`, `startAddress`, `count`). * **`GET /api/v1/system/logs`** * **Description:** Retrieves recent system log messages captured in an internal buffer. * **Response:** JSON array of strings, with each string being a log line (oldest first, up to 300 lines). #### Coils * **`GET /api/v1/coils`** * **Description:** Retrieves the status of all registered Modbus coils. * **Response:** JSON object `{ "coils": [ { "address": , "value": }, ... ] }`. * **`GET /api/v1/coils?address=`** * **Description:** Retrieves the status of a specific Modbus coil by its address. * **Response:** JSON object `{ "address": , "value": }` or `404 Not Found`. * **`POST /api/v1/coils/?value=<0|1|true|false>`** * **Description:** Sets the state of a specific Modbus coil. * **Response:** JSON object `{ "success": true, "address": , "value": }` or error status (`400`, `404`). #### Registers * **`GET /api/v1/registers`** * **Description:** Retrieves the value of all registered Modbus holding registers. * **Response:** JSON object `{ "registers": [ { "address": , "value": }, ... ] }`. * **`GET /api/v1/registers?address=`** * **Description:** Retrieves the value of a specific Modbus holding register by its address. * **Response:** JSON object `{ "address": , "value": }` or `404 Not Found`. * **`POST /api/v1/registers/?value=`** * **Description:** Sets the value of a specific Modbus holding register. * **Response:** JSON object `{ "success": true, "address": , "value": }` or error status (`400`, `404`). ## Notes * The REST API relies on the `ModbusManager` to interact with underlying components. Ensure `ModbusManager` is initialized correctly. * The endpoints for writing individual coils/registers (`POST /coils/{addr}`, `POST /registers/{addr}`) are currently non-functional due to suspected routing issues in the web server library. * Error handling is basic; more specific HTTP status codes could be implemented based on Modbus exception codes or internal errors.