From a683810bdc8100e67e9c422e5b9fa9ee603b6e9f Mon Sep 17 00:00:00 2001 From: Lucien Cartier-Tilet Date: Sun, 21 Dec 2025 18:19:21 +0100 Subject: [PATCH] docs: add project specs and documentation for Modbus relay control Initialize project documentation structure: - Add CLAUDE.md with development guidelines and architecture principles - Add project constitution (v1.1.0) with hexagonal architecture and SOLID principles - Add MCP server configuration for Context7 integration Feature specification (001-modbus-relay-control): - Complete feature spec for web-based Modbus relay control system - Implementation plan with TDD approach using SQLx for persistence - Type-driven development design for domain types - Technical decisions document (SQLx over rusqlite, SQLite persistence) - Detailed task breakdown (94 tasks across 8 phases) - Specification templates for future features Documentation: - Modbus POE ETH Relay hardware documentation - Modbus Application Protocol specification (PDF) Project uses SQLx for compile-time verified SQL queries, aligned with type-driven development principles. --- docs/Modbus_Application_Protocol_V1_1b3.pdf | Bin 0 -> 813809 bytes docs/Modbus_POE_ETH_Relay.md | 514 ++++ specs/001-modbus-relay-control/data-model.md | 1031 ++++++++ specs/001-modbus-relay-control/decisions.md | 177 ++ specs/001-modbus-relay-control/plan.md | 2219 +++++++++++++++++ specs/001-modbus-relay-control/research.md | 718 ++++++ .../spec-checklist.md | 51 + specs/001-modbus-relay-control/spec.md | 315 +++ specs/001-modbus-relay-control/tasks.md | 1153 +++++++++ .../001-modbus-relay-control/types-design.md | 1035 ++++++++ specs/constitution.md | 243 ++ specs/templates/plan-template.md | 104 + specs/templates/spec-checklist.md | 34 + specs/templates/spec-template.md | 115 + specs/templates/tasks-template.md | 251 ++ 15 files changed, 7960 insertions(+) create mode 100644 docs/Modbus_Application_Protocol_V1_1b3.pdf create mode 100644 docs/Modbus_POE_ETH_Relay.md create mode 100644 specs/001-modbus-relay-control/data-model.md create mode 100644 specs/001-modbus-relay-control/decisions.md create mode 100644 specs/001-modbus-relay-control/plan.md create mode 100644 specs/001-modbus-relay-control/research.md create mode 100644 specs/001-modbus-relay-control/spec-checklist.md create mode 100644 specs/001-modbus-relay-control/spec.md create mode 100644 specs/001-modbus-relay-control/tasks.md create mode 100644 specs/001-modbus-relay-control/types-design.md create mode 100644 specs/constitution.md create mode 100644 specs/templates/plan-template.md create mode 100644 specs/templates/spec-checklist.md create mode 100644 specs/templates/spec-template.md create mode 100644 specs/templates/tasks-template.md diff --git a/docs/Modbus_Application_Protocol_V1_1b3.pdf b/docs/Modbus_Application_Protocol_V1_1b3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b3c61ca46c6d414a768d174e442bd866b9774a79 GIT binary patch literal 813809 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

V#FA-@ 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�&ol%>-OQu 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

ky`2D{&q3wTZEYt!(d^-rl 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�+am%D+e+PXnQ4l=yx+k5Yno{Eb8dPx|Y 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 L)4% Transfer Protocol, you can choose "None", which means the Modbus RTU protocol. It is not recommended to modify during the first configuration. + +4. The selected Modbus TCP protocol must be configured using the Virom software and set to a non-storage Modbus gateway, otherwise the communication will not be normal. + +## Virom Software Mode Configuration + +### General Settings + +Connect the module to the hardware and connect it to the network. Run the VirCom software (the computer on which Vircom is installed must be on the same LAN as the module). + +The operation is as follows: + +- 1. Click `Device` +- 2. Click `Auto Search` +- 3. Software search recognizes the device connected to the LAN +- 4. Select the device, and then click `Edit Device` or double-click the searched device directly - 5. Set up the device parameters: + - Modify the "IP mode" to a static assigned address, set the IP address, note that the static IP address entered must not be used by other devices, and it needs to be on the same LAN as the computer. + - The working mode is TCP server. The serial port setting is 115200 by default and cannot be modified. + - The "Transfer Protocol" in "Advanced Settings" defaults to "None", which means using the Modbus RTU protocol; if you select "Modbus TCP protocol", then use the Modbus TCP communication protocol. + - Click on "More Advanced Settings..." and select the Modbus Gateway Type as a non-storage Modbus gateway. + - Modify the "IP mode" to a static assigned address, set the IP address, note that the static IP address entered must not be used by other devices, and it needs to be on the same LAN as the computer. +- 6. Once the settings are complete, click `Modify Setting` +- 7. Click `Restart Dev`, wait for the module to restart, and the new settings will take effect. + +Note: It is recommended to modify only the IP address for the first configuration, and do not modify other parameters. + +See the figure below for details: + + +Note: The default Modbus gateway type is storage type, which will automatically send query commands several times, which may cause the controller chip to fail to respond, resulting in no response to the query commands. Therefore, you need to set it as Multi-host non-storage type. + + + +### Protocol Setting + +Note: It is recommended to use the default Modbus RTU protocol for the first configuration and no modifications are needed. + +Although the module transmits data through the network port, it supports two Modbus protocols: Modbus RTU and Modbus TCP. By default, data is transparently transmitted, i.e. using the Modbus RTU protocol. + + +#### Modbus TCP Protocol Settings + +- The "Transfer Protocol" in the "Advanced Settings" can be set to "Modbus TCP protocol". In this case, the Modbus RTU protocol of the main controller will be converted to the Modbus TCP protocol and transmitted through the network port. +- In this case, the device port automatically changes to 502. Users can use the Modbus TCP tool to connect to the IP port 502 of the serial port server. +- Click on "More Advanced Settings..." and select the Modbus Gateway Type as a non-storage Modbus gateway. + +#### Modbus RTU Protocol Settings + +- Set "Transfer Protocol" in the "Advanced Settings" to "None", and change to use Modbus RTU protocol. +- Click on "More Advanced Settings..." and select the Modbus Gateway Type as a non-storage Modbus gateway. + +Note: The default Modbus gateway type is storage type, which will automatically send query commands several times, which may cause the controller chip to fail to respond, resulting in no response to the query commands. Therefore, you need to set it as Multi-host non-storage type. + + +### Virtual Serial Port Setting + +The module transmits data through a network port (TCP/UDP protocol). In order to enable users to use the PoE port communication even with developed serial port software, a virtual serial port needs to be added. If not needed, this part can be skipped. + + +- First, install the virtual serial driver Virtual serial port driver +- Run Vircom and the user program on the same computer. +- Vircom creates a virtual COM port and connects this COM port to the serial server. When the user program uses the COM communication, it can send data to the user's serial port device through the Vircom serial port server. + +The following steps demonstrate this operation: + + +- Click on "Serial Port & Device Management" on the Vircom main interface, then click "Add" and select to add COM2 (Among them, COM2 is the newly emerging COM port on the computer). + +- Then enter the device management and double-click the device that needs to be bound to COM2. As shown in the diagram, select COM2 from the Virtual Serial Port list in the top left corner. Then click on "Modify Setting" and then click on "Restart Device". + +- Return to the main interface of Vircom. It can be seen that COM2 has been connected to the device whose IP is 192.168.1.200. In this case, the virtual serial port COM2 can be used instead of the network port for communication. + +## WEB Configuration + +Using Vircom, you can search for and configure device parameters in different network segments. For Web configuration, you must first ensure that the computer and the serial server are in the same IP segment, and you need to know the IP address of the serial server in advance. + +But Web configuration can be done on any computer without Vircom. (Different products have different web interfaces, which can be switched between Chinese and English) + +1. Enter the IP address of the serial server in the browser, such as http://192.168.1.200 to open the following web page + + +2. In the Password field, enter your password: The default login password is not set or is set to 123456. If no password is set, you can enter any password and click the Login button to log in. After setting the password to log in, the settings at "Modify Web Login Key" will take effect: + + +3. The serial server parameters can be modified on the web page that appears. + +4. After modifying the parameters, click the "Submit" button. + +Attention: The system has added webpage settings function by default when it leaves the factory. If the configuration interface page file is overwritten and the webpage cannot be opened, the webpage file needs to be downloaded again. + +Please refer to RS485 TO ETH (B) Manual + +# Example Demonstration + +The demo shows how the following two software operate. + +SSCOM serial port debugging assistant is more convenient to operate, free of installation, and more convenient for complete display and analysis of instructions, but the disadvantage is that the data is not intuitive. + +Modbus Poll software is directly operated on the register, and the data display is more convenient to observe, but the disadvantage is that the instruction is not displayed completely, so you need to be familiar with the Modbus register operation. + +You can test using any method. It is recommended to use the SSCOM serial port debugging assistant software for the first test. + + +### SSCOM Serial Port Debugging Assistant + +Modbus RTU Command: The default configuration is the Modbus RTU command + +- 1. Open the serial port debugging assistant window +- 2. Select TCPClient for port number +- 3. Modify the remote IP and port number according to the Vircom settings above +- 4. Click the "Connect" button to connect to the TCP server +- 5. The green light of the network port will light up when the connection is successful +- 6. Click Multi-Char to open the Send Multi-Char window, the default display is the Modbus RTU command, click the corresponding function to send the corresponding command. +- 7. If you use the custom input box below to send the command, you need to set Verify as ModbusCRC16 + +Configure Modbus TCP Directives: If you want to set it as a Modbus TCP Directive, you need to change the commands + +- 1. Click on the Import ini button in the Send Multi-Char column +- 2. Select the modbus tcp.ini file to import the Modbus TCP command + + Note: If a popup error message says "A component named HEX0 already exists", then you need to close and reopen the software, which will reload the files and refresh the buttons. + +- 3. After successful import, the following is displayed, click on the function to send the corresponding command. + +Note: Modbus tcp does not require CRC checksum, select None for Verify. + +- For detailed Modubs commands, please see the development protocol. + +### Modbus Poll Software + +It is not convenient to use the SSCOM software for observing the data, you can select Modbus Poll software to read the data. Download and install the Modbus Poll software. + +- 1. Open Modbus Poll software +- 2. Select Setup->Read/Write Definition, select the actual device address for Slave ID, select 01 Read Coils function code for Function, and change Quantity to 8 channels. Click OK to confirm. +- 3. If: + - you are using the Modbus RTU protocol, select Connection->Connect Setup, select Modbus RTU/ASCII Over TCP/IP for Connection, select RTU for Mode, and enter the correct IP address and port number. Click OK to connect. + - you are using the Modbus TCP protocol, select Connection->Connect Setup, select Modbus TCP/IP for Connection, and enter the correct IP address and port number. Click OK to connect. + +4. After the connection is normal, you can check the current relay status. Select the corresponding channel, then double-click the status value to pop up the send page. Choose On or Off, then Click Send to control the relay opening and closing. + +# Demo + +### Raspberry Pi + +Connect the Raspberry Pi and the ModBus POE ETH Relay module to the same LAN. + +Open the Raspberry Pi terminal and run the program by entering the following command: + +```sh +sudo apt-get install unzip +wget https://files.waveshare.com/wiki/Modbus-POE-ETH-Relay/Modbus_POE_ETH_Relay_Code.zip +unzip Modbus_POE_ETH_Relay_Code.zip +cd Modbus_POE_ETH_Relay_Code + +#modbus rtu protocol +vi modbus_rtu.py #Change the IP address and port number according to the actual situation +sudo python3 modbus_rtu.py + +#modbus tcp protocol +vi modbus_tcp.py #Change the IP address and port number according to the actual situation +sudo python3 modbus_tcp.py +``` + +Note: To run this demo, you need to modify the demo file to change the IP address and port number to the actual IP address and port number of the ModBus POE ETH Relay. + + +# Modbus RTU Development Protocol V2 + +## Function Code Introduction + +| Function Code | Description | Note | +|---------------|-----------------------|-------------------------------| +| 01 | Read coil status | Read relay status | +| 03 | Read holding register | Read the address and version | +| 05 | Write single coil | Write single relay | +| 06 | Write single register | Set the baud rate and address | +| 0F | Write multiple coils | Write all relays | + +## Register Address Introduction + +| Address (HEX) | Address storage content | Register value | Permission | Modbus Function Code | +|------------------+----------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------+------------+----------------------| +| 0x0000 …… 0x0007 | Channel 1~8 relay address | 0xFF00: relay on / 0x0000: relay off / 0x5500: relay toggle | Read/Write | 0x01, 0x05, 0x0F | +| 0x00FF | Control all relays | 0xFF00: all relays on / 0x0000: all relays off / 0x5500: all relays toggle | Write | 0x05 | +| 0x0100 …… 0x0107 | Channel 1~8 relay toggle address | 0xFF00: relay toggle / 0x0000: relay unchanged | Write | 0x05, 0x0F | +| 0x01FF | Control all relays toggle | 0xFF00: all relays toggle / 0x0000: all relays unchanged | Write | 0x05 | +| 0x0200 …… 0x0207 | Channel 1~8 relay flash on | Interval time: data×100ms / Value: 0x0007, Interval time: 7×100MS = 700MS | Write | 0x05 | +| 0x0400 …… 0x0407 | Channel 1~8 relay flash off | Interval time: data×100ms / Value: 0x0007, Interval time: 7×100MS = 700MS | Write | 0x05 | +| 4x4000 | Device Address | Directly store Modbus address / Device address: 0x0001 | Read | 0x03 | +| 4x8000 | Software Version | Converting to decimal and then shifting the decimal point two places to the left will represent the software version / 0x0064 = 100 = V1.00 | Read | 0x03 | + +## Operation Command Introduction + +### Control Single Relay + +Send code: 01 05 00 00 FF 00 8C 3A + +| Field | Description | Note | +|-------|----------------|-------------------------------------------------------------------| +| 01 | Device Address | Fixed 0x01 | +| 05 | 05 Command | Relay control | +| 00 00 | Address | The register address of the relay to be controlled, 0x0000-0x0007 | +| FF 00 | Command | 0xFF00: relay on; 0x0000: relay off; 0x5500: relay toggle | +| 8C 3A | CRC16 | The CRC16 checksum of the first 6 bytes of data | + +Return code: 01 05 00 00 FF 00 8C 3A + +| Field | Description | Note | +|-------|----------------|-------------------------------------------------------------------| +| 01 | Device Address | Fixed 0x01 | +| 05 | 05 Command | Relay control | +| 00 00 | Address | The register address of the relay to be controlled, 0x0000-0x0007 | +| FF 00 | Command | 0xFF00: relay on; 0x0000: relay off; 0x5500: relay toggle | +| 8C 3A | CRC16 | The CRC16 checksum of the first 6 bytes of data | + +For example: +[Address 1 device]: + +``` +Relay 0 on: 01 05 00 00 FF 00 8C 3A +Relay 0 off: 01 05 00 00 00 00 CD CA +Relay 1 on: 01 05 00 01 FF 00 DD FA +Relay 1 off: 01 05 00 01 00 00 9C 0A +Relay 2 on: 01 05 00 02 FF 00 2D FA +Relay 2 off: 01 05 00 02 00 00 6C 0A +Relay 3 on: 01 05 00 03 FF 00 7C 3A +Relay 3 off: 01 05 00 03 00 00 3D CA +Relay 0 toggle: 01 05 00 00 55 00 F2 9A +Relay 1 toggle: 01 05 00 01 55 00 A3 5A +Relay 2 toggle: 01 05 00 02 55 00 53 5A +Relay 3 toggle: 01 05 00 03 55 00 02 9A +``` + +### Control All Relays + +Send code: 01 05 00 FF FF 00 BC 0A + +| Field | Description | Note | +|-------|----------------|-----------------------------------------------------------| +| 01 | Device Address | Fixed 0x01 | +| 05 | 05 Command | Relay control | +| 00 FF | Address | Fixed 0x00FF | +| FF 00 | Command | 0xFF00: relay on; 0x0000: relay off; 0x5500: relay toggle | +| BC 0A | CRC16 | The CRC16 checksum of the first 6 bytes of data | + +Return code: 01 05 00 FF FF 00 BC 0A + +| Field | Description | Note | +|-------|----------------|-----------------------------------------------------------| +| 01 | Device Address | Fixed 0x01 | +| 05 | 05 Command | Relay control | +| 00 FF | Address | Fixed 0x00FF | +| FF 00 | Command | 0xFF00: relay on; 0x0000: relay off; 0x5500: relay toggle | +| BC 0A | CRC16 | The CRC16 checksum of the first 6 bytes of data | + +For example: [Address 1 device]: + +All relays on: 01 05 00 FF FF 00 BC 0A All relays off: 01 05 00 FF 00 00 FD FA All relays toggle: 01 05 00 FF 55 00 C2 AA + +### Read Relay Status + +Send code: 01 01 00 00 00 08 3D CC + +| Field | Description | Note | +|-------|---------------------|-------------------------------------------------------------------------------------| +| 01 | Device Address | Fixed 0x01 | +| 01 | 01 Command | Query relay status | +| 00 00 | Relay Start Address | The register address of the relay, 0x0000 - 0x0007 | +| 00 08 | Relay Number | The number of relays to be read, which must not exceed the maximum number of relays | +| 3D CC | CRC16 | The CRC16 checksum of the first 6 bytes of data | + +Receive code: 01 01 01 00 51 88 + +| Field | Description | Note | +|-------|----------------|---------------------------------------------------------------------------------------------------------------------------------| +| 01 | Device Address | Fixed 0x01 | +| 01 | 01 Command | Query relay status | +| 01 | Byte Number | The number of all bytes of the returned status information | +| 00 | Query status | Received relay status Bit0: the first relay status; Bit1: the second relay status; And so on, with the idle high bit being zero | +| 51 88 | CRC16 | The CRC16 checksum of the first 6 bytes of data | + +For example: [Address 1 device] + +Send: 01 01 00 00 00 08 3D CC Receive: 01 01 01 00 51 88 //All relays off Send: 01 01 00 00 00 08 3D CC Receive: 01 01 01 01 90 48 //Relay 0 is on, others are off Send: 01 01 00 00 00 08 3D CC Receive: 01 01 01 41 91 B8 //Relay 0 and 6 are on, others are off + +### Write Relay Status + +Send code: 01 0F 00 00 00 08 01 FF BE D5 + +| Field | Description | Note | +|-------|---------------------|-----------------------------------------------------------------------------------------------------------| +| 01 | Device Address | Fixed 0x01 | +| 0F | 0F Command | Write relay status | +| 00 00 | Relay Start Address | The register address of the relay to be controlled, 0x0000 - 0x0007 | +| 00 08 | Relay Number | The number of relays to be operated, which must not exceed the maximum number of relays | +| 01 | Byte Number | The byte number of the status | +| FF | Relay Status | Bit0: the first relay status; Bit1: the second relay status; And so on, with the idle high bit being zero | +| BE D5 | CRC16 | The CRC16 checksum of the first 6 bytes of data | + +Receive code: 01 0F 00 00 00 08 54 0D + +| Field | Description | Note | +|-------|---------------------|---------------------------------------------------------------------| +| 01 | Device Address | Fixed 0x01 | +| 0F | 0F Command | Control all registers | +| 00 00 | Relay Start Address | The register address of the relay to be controlled, 0x0000 - 0x0007 | +| 00 08 | Relay Number | The number of relays to be operated | +| 54 0D | CRC16 | The CRC16 checksum of the first 6 bytes of data | + +For example: [Address 1 device] + +All relays on: 01 0F 00 00 00 08 01 FF BE D5 All relays off: 01 0F 00 00 00 08 01 00 FE 95 0-1 on; 2-7 off: 01 0F 00 00 00 08 01 03 BE 94 + +### Relay Flash ON/OFF Command + +Send code: 01 05 02 00 00 07 8D B0 + +| Field | Description | Note | +|-------|----------------|-------------------------------------------------------------------------------------------------------------------------------------------| +| 01 | Device Address | Fixed 0x01 | +| 05 | 05 Command | Single control command | +| 02 | Command | 02: flash on, 04: flash off | +| 00 | Relay Address | The address of the relay to be controlled, 0x00~0x07 | +| 00 07 | Interval Time | The interval time: data*100ms Value: 0x0007, Interval time: 7*100MS = 700MS The maximum setting for the flash-on flash-off time is 0x7FFF | +| 8D B0 | CRC16 | The CRC16 checksum of the first 6 bytes of data | + +Receive code: 01 05 02 00 00 07 8D B0 + +| Field | Description | Note | +|-------|----------------|-----------------------------------------------------------------------------| +| 01 | Device Address | Fixed 0x01 | +| 05 | 05 Command | Single control command | +| 02 | Command | 02: flash on, 04: flash off | +| 00 | Relay Address | The address of the relay to be controlled, 0x00~0x07 | +| 00 07 | Interval Time | The interval time: data*100ms Value: 0x0007, Interval time: 7*100MS = 700MS | +| 8D B0 | CRC16 | The CRC16 checksum of the first 6 bytes of data | + +For example: [Address 1 device] + +Relay 0 flash on: 01 05 02 00 00 07 8D B0 //700MS Relay 1 flash on: 01 05 02 01 00 08 9C 74 //800MS Relay 0 flash off: 01 05 04 00 00 05 0C F9 //500MS Relay 1 flash off: 01 05 04 01 00 06 1D 38 //600MS + +### Read Software Version Command + +Send code: 01 03 80 00 00 01 AD CA + +| Field | Description | Note | +|-------|------------------|-------------------------------------------------| +| 01 | Device Address | Fixed 0x01 | +| 03 | 03 Command | Read Holding Register | +| 80 00 | Command register | 0x8000: read software version | +| 00 01 | Byte Number | Fixed 0x0001 | +| AD CA | CRC16 | The CRC16 checksum of the first 6 bytes of data | + +Receive code: 01 03 02 00 C8 B9 D2 + +| Field | Description | Note | +|-------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------| +| 01 | Device Address | Fixed 0x01 | +| 03 | 03 Command | Read Holding Register | +| 02 | Byte Number | The number of bytes returned | +| 00 C8 | Software Version | Converting to decimal and then shifting the decimal point two places to the left will represent the software version 0x00C8 = 200 = V2.00 | +| B9 D2 | CRC16 | The CRC16 checksum of the first 6 bytes of data | + +For example: + + +Send: 01 03 80 00 00 01 AD CA Receive: 01 03 02 00 C8 B9 D2 //0x00C8 = 200 =V2.00 + +### Exception Function Code + +When the received command is incorrect or the device is abnormal, an exception response will be returned in the following format: + +Receive: 01 85 03 02 91 + +| Field | Description | Note | +|-------|-------------------------|------------------------------------------------------------------------------| +| 01 | Device Address | 0x00 indicates the broadcast address, 0x01-0xFF indicates the device address | +| 85 | Exception Function Code | Exception function code = Request function code + 0x80 | +| 03 | Byte Number | Exception Code | +| 02 91 | CRC16 | The CRC16 checksum of the first 6 bytes of data | + +An exception code is a single-byte value that indicates the type of error. Several commonly used exception codes defined by the Modbus protocol: + +| Exception Code | Name | Description | +|----------------|----------------------|-------------------------------------------------------------------------| +| 0x01 | Illegal Function | The requested function code is not supported | +| 0x02 | Illegal Data Address | The requested data address is incorrect | +| 0x03 | Illegal Data Value | The requested data value or operation cannot be executed | +| 0x04 | Server Failure | Server equipment failure | +| 0x05 | Response | The request has been received and is being processed | +| 0x06 | Device Busy | The device is currently busy and cannot perform the requested operation | + +## Modbus TCP Command Introduction + +Here is a brief introduction to Modbus TCP and Modbus RTU protocol conversion using the above commands to open the first relay as an example. + + +- Modbus RTU command: 01 05 00 00 FF 00 8C 3A + +| Field | Description | Note | +|-------|----------------|------------------------------------------------------------------------------------| +| 01 | Device Address | Fixed 0x01 | +| 05 | 05 Command | Relay control | +| 00 00 | Address | The register address of the relay to be controlled, 0x00, that is, the first relay | +| FF 00 | Command | 0xFF00: Relay on | +| 8C 3A | CRC16 | The CRC16 checksum of the first 6 bytes of data | + +- Modbus TCP command: 00 00 00 00 00 06 01 05 00 00 FF 00 + +| Field | Description | Note | +|-------|----------------|------------------------------------------------------------------------------------| +| 00 00 | Message Label | Both be 0x00 | +| 00 00 | modbus Label | Must both be 0, which means this is Modbus communication | +| 00 06 | Byte Length | Indicates the number of all bytes that follow, followed by 6 bytes | +| 01 | Device Address | Fixed 0x01 | +| 05 | 05 Command | Relay control | +| 00 00 | Address | The register address of the relay to be controlled, 0x00, that is, the first relay | +| FF 00 | Command | 0xFF00: Relay on | + +By comparing the commands above, we can observe that to convert a Modbus RTU command to Modbus TCP protocol, the CRC check is removed, and the command is prefixed with five 0x00 bytes followed by a byte representing the length. + + +## Advanced Applications + +- Relay control through Alibaba Cloud MQTT +- Relay control through Waveshare Cloud +- Relay control through HTTP GET/POST + +# Resources + +### Software + +- Vircom configuration software +- Virtual serial port driver +- Sscom software +- Modbus Poll software +- SecureCRT software diff --git a/specs/001-modbus-relay-control/data-model.md b/specs/001-modbus-relay-control/data-model.md new file mode 100644 index 0000000..5447aa1 --- /dev/null +++ b/specs/001-modbus-relay-control/data-model.md @@ -0,0 +1,1031 @@ +# Data Model: Modbus Relay Control System + +**Created**: 2025-01-09 +**Feature**: [spec.md](./spec.md) +**Related**: [types-design.md](./types-design.md) - Domain type definitions +**Status**: Design + +## Overview + +This document defines the data model for the Modbus relay control system, including database schemas, API data transfer objects (DTOs), serialization formats, and persistence layer structures. This complements `types-design.md` which defines domain types and validation logic. + +## Scope + +**This document covers**: +- SQLite database schemas for persistent storage +- API request/response DTOs (JSON contracts) +- Modbus protocol data structures +- Configuration file formats (YAML) +- Serialization/deserialization mappings + +**Out of scope** (see `types-design.md`): +- Domain type validation logic +- Business rule enforcement +- Type safety guarantees + +--- + +## Database Schemas + +### SQLite Database: `relay_labels.db` + +**Purpose**: Persist custom relay labels across application restarts. + +**Location**: Configurable via `settings.database.path` (default: `relay_labels.db`) + +**Schema Version**: 1.0 + +--- + +#### Table: `relay_labels` + +**Purpose**: Store custom labels for each of the 8 relays. + +```sql +CREATE TABLE IF NOT EXISTS relay_labels ( + relay_id INTEGER PRIMARY KEY NOT NULL, + label TEXT NOT NULL, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + updated_at TEXT NOT NULL DEFAULT (datetime('now')), + + -- Constraints + CHECK(relay_id >= 1 AND relay_id <= 8), + CHECK(length(label) >= 1 AND length(label) <= 50), + CHECK(label NOT GLOB '*[^a-zA-Z0-9 _-]*') -- Only alphanumeric, spaces, hyphens, underscores +); + +-- Index for timestamp queries (future analytics) +CREATE INDEX IF NOT EXISTS idx_relay_labels_updated_at + ON relay_labels(updated_at); +``` + +**Columns**: + +| Column | Type | Nullable | Description | +|--------------|---------|----------|---------------------------------------------| +| `relay_id` | INTEGER | NO | Relay identifier (1-8), PRIMARY KEY | +| `label` | TEXT | NO | Custom label (1-50 characters) | +| `created_at` | TEXT | NO | ISO 8601 timestamp when label was first set | +| `updated_at` | TEXT | NO | ISO 8601 timestamp of last label update | + +**Constraints**: +- `relay_id` range: 1-8 (enforced by CHECK constraint) +- `label` length: 1-50 characters (enforced by CHECK constraint) +- `label` characters: Alphanumeric, spaces, hyphens, underscores only (enforced by CHECK constraint) + +**Initial Data**: +```sql +-- Pre-populate with default labels on database initialization +INSERT OR IGNORE INTO relay_labels (relay_id, label) VALUES + (1, 'Relay 1'), + (2, 'Relay 2'), + (3, 'Relay 3'), + (4, 'Relay 4'), + (5, 'Relay 5'), + (6, 'Relay 6'), + (7, 'Relay 7'), + (8, 'Relay 8'); +``` + +**Migration Strategy**: +- For MVP: Schema auto-created by SQLx on first run +- For future versions: Use SQLx migrations with version tracking + +--- + +#### Example Queries + +**Get label for relay 3**: +```sql +SELECT label FROM relay_labels WHERE relay_id = 3; +``` + +**Set/update label for relay 5**: +```sql +INSERT OR REPLACE INTO relay_labels (relay_id, label, updated_at) +VALUES (5, 'Water Pump', datetime('now')); +``` + +**Get all labels**: +```sql +SELECT relay_id, label +FROM relay_labels +ORDER BY relay_id ASC; +``` + +**Get labels modified in last 24 hours**: +```sql +SELECT relay_id, label, updated_at +FROM relay_labels +WHERE updated_at >= datetime('now', '-1 day') +ORDER BY updated_at DESC; +``` + +--- + +## API Data Transfer Objects (DTOs) + +### JSON Serialization Format + +**Content-Type**: `application/json` +**Character Encoding**: UTF-8 +**Date Format**: ISO 8601 (e.g., `2025-01-09T14:30:00Z`) + +--- + +### RelayDto + +**Purpose**: Represents a single relay's complete state for API responses. + +**Used in**: +- `GET /api/relays` response (array) +- `GET /api/relays/{id}` response (single) +- `POST /api/relays/{id}/toggle` response (single) +- `PATCH /api/relays/{id}/label` response (single) + +**JSON Schema**: +```json +{ + "type": "object", + "required": ["id", "state"], + "properties": { + "id": { + "type": "integer", + "minimum": 1, + "maximum": 8, + "description": "Relay identifier (1-8)" + }, + "state": { + "type": "string", + "enum": ["on", "off"], + "description": "Current relay state" + }, + "label": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "pattern": "^[a-zA-Z0-9 _-]+$", + "description": "Custom relay label (optional)" + } + } +} +``` + +**Example**: +```json +{ + "id": 3, + "state": "on", + "label": "Water Pump" +} +``` + +**Rust Type Mapping**: +```rust +use serde::{Deserialize, Serialize}; +use poem_openapi::Object; + +#[derive(Debug, Clone, Serialize, Deserialize, Object)] +pub struct RelayDto { + /// Relay identifier (1-8) + pub id: u8, + + /// Current relay state: "on" or "off" + pub state: String, + + /// Custom relay label (optional) + #[serde(skip_serializing_if = "Option::is_none")] + pub label: Option, +} +``` + +**Domain → DTO Conversion**: +```rust +impl From for RelayDto { + fn from(relay: Relay) -> Self { + Self { + id: relay.id().as_u8(), + state: match relay.state() { + RelayState::On => "on".to_string(), + RelayState::Off => "off".to_string(), + }, + label: relay.label().map(|l| l.as_str().to_string()), + } + } +} +``` + +--- + +### RelayListResponse + +**Purpose**: Response for endpoints returning multiple relays. + +**Used in**: +- `GET /api/relays` response +- `POST /api/relays/bulk/on` response +- `POST /api/relays/bulk/off` response + +**JSON Schema**: +```json +{ + "type": "object", + "required": ["relays"], + "properties": { + "relays": { + "type": "array", + "minItems": 8, + "maxItems": 8, + "items": { "$ref": "#/components/schemas/RelayDto" }, + "description": "Array of all 8 relays in order (IDs 1-8)" + } + } +} +``` + +**Example**: +```json +{ + "relays": [ + { "id": 1, "state": "off", "label": "Garage Light" }, + { "id": 2, "state": "on", "label": "Water Pump" }, + { "id": 3, "state": "off", "label": "Relay 3" }, + { "id": 4, "state": "off", "label": "Relay 4" }, + { "id": 5, "state": "on", "label": "Relay 5" }, + { "id": 6, "state": "off", "label": "Relay 6" }, + { "id": 7, "state": "off", "label": "Relay 7" }, + { "id": 8, "state": "off", "label": "Relay 8" } + ] +} +``` + +**Rust Type Mapping**: +```rust +#[derive(Debug, Clone, Serialize, Deserialize, Object)] +pub struct RelayListResponse { + /// Array of all 8 relays + pub relays: Vec, +} +``` + +--- + +### UpdateLabelRequest + +**Purpose**: Request body for updating a relay label. + +**Used in**: +- `PATCH /api/relays/{id}/label` request body + +**JSON Schema**: +```json +{ + "type": "object", + "required": ["label"], + "properties": { + "label": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "pattern": "^[a-zA-Z0-9 _-]+$", + "description": "New label for the relay" + } + } +} +``` + +**Example**: +```json +{ + "label": "Office Fan" +} +``` + +**Rust Type Mapping**: +```rust +#[derive(Debug, Clone, Serialize, Deserialize, Object)] +pub struct UpdateLabelRequest { + /// New label for the relay (1-50 characters) + pub label: String, +} +``` + +--- + +### HealthResponse + +**Purpose**: Device health and connectivity status. + +**Used in**: +- `GET /api/health` response + +**JSON Schema**: +```json +{ + "type": "object", + "required": ["status", "device_connected"], + "properties": { + "status": { + "type": "string", + "enum": ["healthy", "degraded", "unhealthy"], + "description": "Overall health status" + }, + "device_connected": { + "type": "boolean", + "description": "Whether Modbus device is reachable" + }, + "firmware_version": { + "type": "string", + "maxLength": 20, + "description": "Device firmware version (optional)" + }, + "last_contact": { + "type": "string", + "format": "date-time", + "description": "ISO 8601 timestamp of last successful communication" + }, + "consecutive_errors": { + "type": "integer", + "minimum": 0, + "description": "Number of consecutive errors (for degraded/unhealthy status)" + } + } +} +``` + +**Examples**: + +**Healthy**: +```json +{ + "status": "healthy", + "device_connected": true, + "firmware_version": "v2.00", + "last_contact": "2025-01-09T14:30:00Z", + "consecutive_errors": 0 +} +``` + +**Degraded**: +```json +{ + "status": "degraded", + "device_connected": true, + "firmware_version": "v2.00", + "last_contact": "2025-01-09T14:28:00Z", + "consecutive_errors": 3 +} +``` + +**Unhealthy**: +```json +{ + "status": "unhealthy", + "device_connected": false, + "last_contact": "2025-01-09T14:00:00Z", + "consecutive_errors": 10 +} +``` + +**Rust Type Mapping**: +```rust +#[derive(Debug, Clone, Serialize, Deserialize, Object)] +pub struct HealthResponse { + /// Overall health status + pub status: String, // "healthy" | "degraded" | "unhealthy" + + /// Whether Modbus device is currently reachable + pub device_connected: bool, + + /// Device firmware version (if available) + #[serde(skip_serializing_if = "Option::is_none")] + pub firmware_version: Option, + + /// ISO 8601 timestamp of last successful communication + #[serde(skip_serializing_if = "Option::is_none")] + pub last_contact: Option, + + /// Number of consecutive errors + #[serde(skip_serializing_if = "Option::is_none")] + pub consecutive_errors: Option, +} +``` + +--- + +### ErrorResponse + +**Purpose**: Standardized error response for all API errors. + +**Used in**: +- All API endpoints (4xx, 5xx responses) + +**JSON Schema**: +```json +{ + "type": "object", + "required": ["error", "message"], + "properties": { + "error": { + "type": "string", + "description": "Error code or type" + }, + "message": { + "type": "string", + "description": "Human-readable error message" + }, + "details": { + "type": "object", + "description": "Additional error context (optional)" + } + } +} +``` + +**Examples**: + +**400 Bad Request** (Invalid relay ID): +```json +{ + "error": "InvalidRelayId", + "message": "Relay ID 9 out of range (valid: 1-8)", + "details": { + "value": 9, + "min": 1, + "max": 8 + } +} +``` + +**400 Bad Request** (Invalid label): +```json +{ + "error": "InvalidLabel", + "message": "Relay label too long (max: 50, got: 73)" +} +``` + +**500 Internal Server Error** (Modbus communication failure): +```json +{ + "error": "ModbusCommunicationError", + "message": "Failed to read relay state: Connection timeout after 3 seconds" +} +``` + +**504 Gateway Timeout** (Modbus timeout): +```json +{ + "error": "ModbusTimeout", + "message": "Modbus operation timed out after 3 seconds" +} +``` + +**Rust Type Mapping**: +```rust +#[derive(Debug, Clone, Serialize, Deserialize, Object)] +pub struct ErrorResponse { + /// Error code or type + pub error: String, + + /// Human-readable error message + pub message: String, + + /// Additional error context (optional) + #[serde(skip_serializing_if = "Option::is_none")] + pub details: Option, +} +``` + +--- + +## Modbus Protocol Data Structures + +### Modbus TCP Protocol + +**Protocol**: Modbus TCP (not RTU over serial) +**Port**: 502 (standard Modbus TCP port) +**Transport**: TCP/IP +**Framing**: MBAP header (no CRC validation needed) + +--- + +### Modbus Function Codes + +| Function Code | Name | Purpose | Request | Response | +|---------------|------------------------|-----------------------|----------------------------------------------|--------------------------------| +| `0x01` | Read Coils | Read relay states | Start address (0-7), quantity (1-8) | Coil values (bit array) | +| `0x05` | Write Single Coil | Toggle single relay | Address (0-7), value (0xFF00=ON, 0x0000=OFF) | Echo request | +| `0x0F` | Write Multiple Coils | Bulk relay control | Start address, quantity, byte count, values | Echo request | +| `0x03` | Read Holding Registers | Read firmware version | Register address (0x8000), quantity (1) | Register value (version * 100) | + +--- + +### Coil Address Mapping + +**User-facing RelayId (1-8) → Modbus Address (0-7)**: + +| Relay ID (User) | Modbus Coil Address | Description | +|-----------------|---------------------|-------------| +| 1 | 0x0000 (0) | Relay 1 | +| 2 | 0x0001 (1) | Relay 2 | +| 3 | 0x0002 (2) | Relay 3 | +| 4 | 0x0003 (3) | Relay 4 | +| 5 | 0x0004 (4) | Relay 5 | +| 6 | 0x0005 (5) | Relay 6 | +| 7 | 0x0006 (6) | Relay 7 | +| 8 | 0x0007 (7) | Relay 8 | + +**Conversion Formula**: +- User → Modbus: `modbus_address = relay_id - 1` +- Modbus → User: `relay_id = modbus_address + 1` + +--- + +### Read Coils Request (0x01) + +**Purpose**: Read current state of one or more relays. + +**Request Structure** (tokio-modbus handles framing): +```rust +// Read all 8 relays +ctx.read_coils(0x0000, 8).await? + +// Read single relay (ID 3 = address 2) +ctx.read_coils(0x0002, 1).await? +``` + +**Response**: `Result, tokio_modbus::Error>` +- `true` = Relay ON (coil energized) +- `false` = Relay OFF (coil de-energized) + +**Example**: +```rust +// Read all relays +let coils = client.read_coils(0x0000, 8).await?; +// coils = [false, true, false, false, true, false, false, false] +// Relays 2 and 5 are ON, others are OFF +``` + +--- + +### Write Single Coil Request (0x05) + +**Purpose**: Toggle a single relay on or off. + +**Request Structure** (tokio-modbus handles framing): +```rust +// Turn relay 3 ON (address 2) +ctx.write_single_coil(0x0002, true).await? + +// Turn relay 3 OFF +ctx.write_single_coil(0x0002, false).await? +``` + +**Response**: `Result<(), tokio_modbus::Error>` + +**Coil Value Encoding**: +- `true` = ON (0xFF00 in Modbus protocol) +- `false` = OFF (0x0000 in Modbus protocol) + +--- + +### Write Multiple Coils Request (0x0F) + +**Purpose**: Set state of multiple relays in one operation (bulk control). + +**Request Structure** (tokio-modbus handles framing): +```rust +// Turn all 8 relays ON +let all_on = vec![true; 8]; +ctx.write_multiple_coils(0x0000, &all_on).await? + +// Turn all 8 relays OFF +let all_off = vec![false; 8]; +ctx.write_multiple_coils(0x0000, &all_off).await? +``` + +**Response**: `Result<(), tokio_modbus::Error>` + +--- + +### Read Holding Registers Request (0x03) + +**Purpose**: Read firmware version from device. + +**Request Structure** (tokio-modbus handles framing): +```rust +// Read firmware version register +let registers = ctx.read_holding_registers(0x8000, 1).await?; +let version_raw = registers[0]; +let version = f32::from(version_raw) / 100.0; +let version_str = format!("v{:.2}", version); +// Example: version_raw = 200 → "v2.00" +``` + +**Response**: `Result, tokio_modbus::Error>` + +**Encoding**: +- Firmware version is stored as `u16` = version × 100 +- Example: `200` = version 2.00, `157` = version 1.57 + +**Note**: This may not be supported by all devices. Handle `ModbusException` gracefully. + +--- + +### Error Handling + +**tokio-modbus Error Types**: +```rust +// Nested Result structure +Result, io::Error> + +// Exception codes (from Modbus protocol) +pub enum Exception { + IllegalFunction = 0x01, + IllegalDataAddress = 0x02, + IllegalDataValue = 0x03, + ServerDeviceFailure = 0x04, + // ... (other codes) +} +``` + +**Mapping to Domain Errors**: +```rust +match result { + Ok(Ok(data)) => Ok(data), // Success + Ok(Err(Exception::IllegalDataAddress)) => + Err(ControllerError::InvalidRelayId), + Ok(Err(exception)) => + Err(ControllerError::ModbusException(format!("{:?}", exception))), + Err(io_error) => + Err(ControllerError::ConnectionError(io_error.to_string())), +} +``` + +--- + +## Configuration File Format (YAML) + +### settings/base.yaml + +**Purpose**: Base configuration shared across all environments. + +```yaml +application: + name: "STA - Smart Temperature & Appliance Control" + version: "1.0.0" + host: "0.0.0.0" + port: 8080 + +modbus: + # Modbus device IP address (update for your network) + host: "192.168.0.200" + + # Modbus TCP port (standard: 502) + port: 502 + + # Modbus slave/unit ID (typically 0 or 1) + slave_id: 0 + + # Operation timeout in seconds + timeout_secs: 5 + + # Number of retry attempts on failure + retry_attempts: 1 + +relay: + # Maximum label length (characters) + label_max_length: 50 + +database: + # SQLite database file path + path: "relay_labels.db" + +rate_limit: + # Requests per minute per IP + requests_per_minute: 100 + +cors: + # CORS allowed origins (production should override) + allowed_origins: [] + + # Allow credentials (cookies, authorization headers) + allow_credentials: false + + # Preflight cache duration (seconds) + max_age_secs: 3600 + +logging: + # Log level: trace, debug, info, warn, error + level: "info" + + # Enable structured JSON logging + json: false +``` + +--- + +### settings/development.yaml + +**Purpose**: Development environment overrides. + +```yaml +application: + host: "127.0.0.1" + port: 8080 + +modbus: + # Local test device or mock + host: "192.168.0.200" + timeout_secs: 3 + +cors: + # Permissive CORS for local development + allowed_origins: ["*"] + allow_credentials: false + +logging: + level: "debug" + json: false +``` + +--- + +### settings/production.yaml + +**Purpose**: Production environment configuration. + +```yaml +application: + host: "0.0.0.0" + port: 8080 + +modbus: + # Production device IP (configured during deployment) + host: "${MODBUS_DEVICE_IP}" + timeout_secs: 5 + +cors: + # Specific origin for production frontend + allowed_origins: ["https://sta.yourdomain.com"] + allow_credentials: true + +database: + path: "/var/lib/sta/relay_labels.db" + +logging: + level: "info" + json: true # Structured logging for production +``` + +--- + +## Persistence Layer Repository Interface + +### RelayLabelRepository Trait + +**Purpose**: Abstract interface for relay label persistence. + +```rust +use async_trait::async_trait; + +#[async_trait] +pub trait RelayLabelRepository: Send + Sync { + /// Get label for a specific relay + async fn get_label(&self, id: RelayId) + -> Result, RepositoryError>; + + /// Set label for a specific relay + async fn set_label(&self, id: RelayId, label: RelayLabel) + -> Result<(), RepositoryError>; + + /// Get all relay labels (IDs 1-8) + async fn get_all_labels(&self) + -> Result, RepositoryError>; + + /// Delete label for a relay (revert to default) + async fn delete_label(&self, id: RelayId) + -> Result<(), RepositoryError>; +} +``` + +--- + +### SQLite Repository Implementation + +**Implementation**: `SqliteRelayLabelRepository` + +```rust +use sqlx::{SqlitePool, Row}; + +pub struct SqliteRelayLabelRepository { + pool: SqlitePool, +} + +impl SqliteRelayLabelRepository { + pub async fn new(db_path: &str) -> Result { + let pool = SqlitePool::connect(db_path).await?; + + // Initialize schema + sqlx::query(include_str!("schema.sql")) + .execute(&pool) + .await?; + + Ok(Self { pool }) + } + + pub async fn in_memory() -> Result { + Self::new("sqlite::memory:").await + } +} + +#[async_trait] +impl RelayLabelRepository for SqliteRelayLabelRepository { + async fn get_label(&self, id: RelayId) + -> Result, RepositoryError> + { + let label_str: Option = sqlx::query_scalar( + "SELECT label FROM relay_labels WHERE relay_id = ?" + ) + .bind(id.as_u8()) + .fetch_optional(&self.pool) + .await?; + + match label_str { + Some(s) => Ok(Some(RelayLabel::new(s)?)), + None => Ok(None), + } + } + + async fn set_label(&self, id: RelayId, label: RelayLabel) + -> Result<(), RepositoryError> + { + sqlx::query( + "INSERT OR REPLACE INTO relay_labels (relay_id, label, updated_at) + VALUES (?, ?, datetime('now'))" + ) + .bind(id.as_u8()) + .bind(label.as_str()) + .execute(&self.pool) + .await?; + + Ok(()) + } + + async fn get_all_labels(&self) + -> Result, RepositoryError> + { + let rows = sqlx::query( + "SELECT relay_id, label FROM relay_labels ORDER BY relay_id" + ) + .fetch_all(&self.pool) + .await?; + + let mut result = Vec::new(); + for row in rows { + let id_val: u8 = row.try_get("relay_id")?; + let label_str: String = row.try_get("label")?; + + let id = RelayId::new(id_val)?; + let label = RelayLabel::new(label_str)?; + result.push((id, label)); + } + + Ok(result) + } + + async fn delete_label(&self, id: RelayId) + -> Result<(), RepositoryError> + { + sqlx::query("DELETE FROM relay_labels WHERE relay_id = ?") + .bind(id.as_u8()) + .execute(&self.pool) + .await?; + + Ok(()) + } +} +``` + +--- + +## Domain to DTO Mapping Summary + +| Domain Type | DTO Type | Mapping | +|----------------------|---------------------|---------------------------------------------| +| `Relay` | `RelayDto` | Direct field mapping with string conversion | +| `RelayState::On` | `"on"` | Lowercase string | +| `RelayState::Off` | `"off"` | Lowercase string | +| `RelayId(3)` | `3` | Extract inner u8 | +| `RelayLabel("Pump")` | `"Pump"` | Extract inner String | +| `Vec` | `RelayListResponse` | Wrap in `relays` field | +| `HealthStatus` | `HealthResponse` | Convert enum to status string + fields | +| `DeviceHealth` | `HealthResponse` | Extract fields, format timestamps | + +--- + +## Serialization Examples + +### Relay State Transitions + +**Domain Event**: +```rust +let mut relay = Relay::new(RelayId::new(3)?, RelayState::Off); +relay.set_label(Some(RelayLabel::new("Water Pump".to_string())?)); +relay.toggle(); +``` + +**API Response**: +```json +{ + "id": 3, + "state": "on", + "label": "Water Pump" +} +``` + +--- + +### Database to Domain + +**SQLite Row**: +``` +relay_id | label | created_at | updated_at +---------|-------------|-------------------------|------------------------- +3 | Water Pump | 2025-01-08 10:00:00 | 2025-01-09 14:30:00 +``` + +**Domain Object**: +```rust +let relay_id = RelayId::new(3)?; +let label = RelayLabel::new("Water Pump".to_string())?; +``` + +--- + +### Modbus to Domain + +**Modbus Read Response** (Function Code 0x01): +``` +Read Coils(address=0, quantity=8) +Response: [false, true, false, false, true, false, false, false] +``` + +**Domain Mapping**: +```rust +let relay_states = vec![ + (RelayId::new(1)?, RelayState::Off), + (RelayId::new(2)?, RelayState::On), + (RelayId::new(3)?, RelayState::Off), + (RelayId::new(4)?, RelayState::Off), + (RelayId::new(5)?, RelayState::On), + (RelayId::new(6)?, RelayState::Off), + (RelayId::new(7)?, RelayState::Off), + (RelayId::new(8)?, RelayState::Off), +]; +``` + +--- + +## Data Flow Summary + +``` +┌─────────────────────────────────────────────────────────────┐ +│ API Layer (JSON) │ +│ RelayDto, UpdateLabelRequest, HealthResponse, etc. │ +└────────────────────────┬────────────────────────────────────┘ + │ Parse/Validate + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Domain Layer (Types) │ +│ RelayId, RelayState, Relay, RelayLabel, etc. │ +└────────────┬────────────────────────────────┬───────────────┘ + │ │ + ▼ ▼ +┌────────────────────────┐ ┌────────────────────────────┐ +│ Infrastructure │ │ Infrastructure │ +│ (Modbus Protocol) │ │ (SQLite Persistence) │ +│ │ │ │ +│ - Coil addresses (0-7) │ │ - relay_labels table │ +│ - Function codes │ │ - RelayLabelRepository │ +│ - Read/Write ops │ │ - SQLx queries │ +└────────────────────────┘ └────────────────────────────┘ +``` + +--- + +## References + +- [Feature Specification](./spec.md) - Complete requirements and user stories +- [Type Design](./types-design.md) - Domain type definitions and validation +- [Implementation Plan](./plan.md) - Technical architecture and implementation strategy +- [Modbus Hardware Documentation](../../docs/Modbus_POE_ETH_Relay.md) - Device protocol details + +--- + +## Revision History + +| Version | Date | Author | Changes | +|---------|------------|-------------------|----------------------------------| +| 1.0 | 2025-01-09 | Type Design Agent | Initial data model specification | diff --git a/specs/001-modbus-relay-control/decisions.md b/specs/001-modbus-relay-control/decisions.md new file mode 100644 index 0000000..824cba2 --- /dev/null +++ b/specs/001-modbus-relay-control/decisions.md @@ -0,0 +1,177 @@ +# Implementation Decisions + +**Date**: 2025-12-28 +**Feature**: Modbus Relay Control System + +## User Decisions + +### Q1: Communication Pattern +**Decision**: HTTP Polling (as specified in spec) +**Rationale**: WebSocket would be overkill for this project scale + +### Q2: Frontend Development Approach +**Decision**: Develop frontend alongside backend, but API endpoints must be implemented first before corresponding frontend features +**Approach**: API-first development - implement and test each endpoint before building UI for it + +### Q3: Hardware Availability +**Decision**: Physical hardware available for testing +**Details**: +- 8-channel Modbus relay device accessible now +- IP address: Variable (configurable) +- Port: 501 or 502 (confirm in docs: `docs/Modbus_POE_ETH_Relay.md`) +- Device will be available during development phase + +### Q4: Relay Label Persistence +**Decision**: SQLite database with SQLx +**Implementation Priority**: +1. **Preferred**: SQLite database with SQLx (compile-time SQL verification, async-native, type-safe) +2. **Alternative**: YAML file (read at startup, write on update) + +**Recommendation**: Use SQLite with SQLx for MVP - simpler than managing YAML file updates, good for future features, aligns with type-driven development principles + +### Q5: Error Recovery Strategy +**Decision**: Exponential retry with timeout +**Strategy**: +- When device becomes unhealthy/unavailable: attempt reconnection every 5 seconds +- Maximum retry duration: 5 minutes +- After 5 minutes: give up and mark device as unhealthy +- Resume connection attempts when user makes new API request +- Background task monitors connection health + +### Q6: Firmware Version +**Decision**: Check docs for availability, hide if unavailable +**Behavior**: +- If firmware version available via Modbus: Display in health endpoint +- If not available: Omit field entirely from health response (not null/empty string) +- Action: Verify in `docs/Modbus_POE_ETH_Relay.md` + +### Q7: Deployment Environment +**Development**: Thinkpad x220 (NixOS) +**Production Backend**: Raspberry Pi 3B+ (available next week) - on same network as relay device +**Production Frontend**: Cloudflare Pages (or equivalent static hosting) +**Reverse Proxy**: Traefik on Raspberry Pi with Authelia middleware for authentication +**Network**: Raspberry Pi on same network as relay device, frontend accesses backend via HTTPS through Traefik + +### Q8: Testing Approach +**Decision**: Implement both real hardware tests AND mocks +**Rationale**: +- Hardware available now for integration testing +- Mocks needed for future maintenance (after device shipped) +- Mocks enable fast unit tests without hardware dependency +- Follows TDD principles with mock-based development + +**Testing Strategy**: +1. **Unit Tests**: Use mocks (mockall) - fast, no hardware needed +2. **Integration Tests**: Use real hardware - verify actual Modbus communication +3. **CI/CD**: Use mocks (hardware not available in CI) +4. **Manual Testing**: Use real hardware during development + +## Derived Decisions + +### Deployment Architecture +**Decision**: Frontend on Cloudflare Pages, backend on Raspberry Pi behind Traefik reverse proxy +**Components**: +- **Frontend**: Static Vue 3 app hosted on Cloudflare Pages (fast global CDN delivery) +- **Backend**: Rust HTTP API on Raspberry Pi (same local network as Modbus relay device) +- **Reverse Proxy**: Traefik on Raspberry Pi providing: + - HTTPS termination (TLS certificates) + - Authelia middleware for user authentication + - Reverse proxy routing to backend HTTP service +- **Communication**: Frontend → HTTPS (via Traefik) → Backend → Modbus TCP → Relay Device + +**Rationale**: +- Frontend on CDN provides fast page loads from anywhere +- Backend must be local to Modbus device (local network communication) +- Traefik handles authentication/HTTPS without application-level complexity +- Backend runs HTTP internally, Traefik handles TLS termination + +**Security Layers**: +1. Authelia authentication at reverse proxy (user login) +2. HTTPS encryption for frontend-backend communication +3. Unencrypted Modbus TCP on local network only (acceptable for local-only device) + +### Architecture Approach +**Decision**: Hexagonal Architecture with trait-based abstraction +**Layers**: +- **Domain**: Pure business logic (RelayId, RelayState, Relay entity) +- **Application**: Use cases (GetRelayStatus, ToggleRelay, BulkControl) +- **Infrastructure**: Modbus client implementation + SQLite repository +- **Presentation**: HTTP API handlers (Poem) + +### Database Choice +**Decision**: SQLite with SQLx for relay labels and configuration + +**Why SQLx over rusqlite**: +- **Compile-time SQL verification**: Queries are checked against actual database schema during compilation +- **Type safety**: Column types verified to match Rust types at compile time +- **Async-native**: Built for tokio async/await (no need for `spawn_blocking` wrappers) +- **Type-driven development alignment**: "Parse, don't validate" - SQL errors caught at compile time, not runtime +- **Better observability**: Built-in query logging and tracing integration +- **Macro-based queries**: `query!` and `query_as!` macros provide ergonomic, safe database access + +**Benefits of SQLite**: +- No external dependencies (embedded) +- ACID transactions for label updates +- Simple schema (one table for relay labels) +- Easy to back up (single file) +- Works on both NixOS and Raspberry Pi + +**Schema**: +```sql +CREATE TABLE relay_labels ( + relay_id INTEGER PRIMARY KEY CHECK(relay_id >= 1 AND relay_id <= 8), + label TEXT NOT NULL CHECK(length(label) <= 50) +); +``` + +**Dependencies**: +```toml +sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite"] } +``` + +### Modbus Port Discovery +**Confirmed from Documentation** (`docs/Modbus_POE_ETH_Relay.md`): +- **Modbus RTU over TCP**: Uses TCP server mode, port is configurable (typically 8234 or custom) +- **Modbus TCP**: Port automatically changes to **502** when "Modbus TCP protocol" is selected in Advanced Settings +- **Recommended**: Use Modbus RTU over TCP (default, simpler configuration) +- **Device must be configured as**: "Multi-host non-storage type" gateway (CRITICAL - storage type sends spurious queries) + +### Firmware Version Availability +**Confirmed from Documentation** (`docs/Modbus_POE_ETH_Relay.md:417-442`): +- **Available**: YES - Firmware version can be read via Modbus function code 0x03 +- **Register Address**: 0x8000 (Read Holding Register) +- **Command**: `01 03 80 00 00 01 AD CA` +- **Response Format**: 2-byte value, convert to decimal and divide by 100 (e.g., 0x00C8 = 200 = v2.00) +- **Implementation**: Read once at startup and cache, update on successful reconnection + +### Connection Management +**Decision**: Background connection health monitor +**Behavior**: +- Monitor task checks connection every 5 seconds +- On failure: retry with exponential backoff (max 5 seconds interval) +- After 5 minutes of failures: mark unhealthy, stop retrying +- On new API request: resume connection attempts +- On successful reconnection: reset retry counter, mark healthy + +### Frontend Technology Stack +**Decision**: Vue 3 + TypeScript + Vite +**Components**: +- OpenAPI TypeScript client generation (type-safe API calls) +- HTTP polling with `setInterval` (2-second intervals) +- Reactive state management (ref/reactive, no Pinia needed for this simple app) +- UI library: TBD (Nuxt UI, Vuetify, or custom - decide during frontend implementation) + +## Next Steps + +1. ✅ Verify Modbus port in documentation +2. ✅ Design architecture approaches (minimal, clean, pragmatic) +3. ✅ Select approach with user +4. ✅ Create detailed implementation plan +5. ✅ Begin TDD implementation + +## Notes + +- User has hardware access now, but device will ship after first version +- Mocks are critical for long-term maintainability +- SQLite preferred over YAML for runtime updates +- Connection retry strategy balances responsiveness with resource usage diff --git a/specs/001-modbus-relay-control/plan.md b/specs/001-modbus-relay-control/plan.md new file mode 100644 index 0000000..164065c --- /dev/null +++ b/specs/001-modbus-relay-control/plan.md @@ -0,0 +1,2219 @@ +# Implementation Plan: Modbus Relay Control System + +**Branch**: `001-modbus-relay-control` | **Date**: 2025-12-29 | **Spec**: [spec.md](./spec.md) + +## Summary + +**Primary Requirement**: Web-based control system for 8-channel Modbus relay device with real-time state monitoring and remote control capabilities. + +**Technical Approach**: +- **Architecture**: Pragmatic Balance (Service Layer Pattern) - Hexagonal architecture with domain/application/infrastructure/presentation layers +- **Backend**: Rust with tokio-modbus 0.17.0 for Modbus RTU over TCP, Poem 3.1 for HTTP API with OpenAPI +- **Frontend**: Vue 3 + TypeScript with HTTP polling (2-second intervals), deployed to Cloudflare Pages +- **Reverse Proxy**: Traefik on Raspberry Pi with Authelia middleware for authentication and HTTPS termination +- **Persistence**: SQLite for relay labels +- **Testing**: TDD with mockall for unit tests, real hardware for integration tests +- **Timeline**: 7 days (5 days backend + 2 days frontend) + +## Technical Context + +**Language/Version**: Rust 1.75+ +**Primary Dependencies**: +- tokio-modbus 0.17.0 (Modbus RTU over TCP) +- Poem 3.1 + poem-openapi 5.1 (HTTP API with OpenAPI) +- Tokio 1.48 (async runtime) +- sqlx 0.8 (SQLite persistence with compile-time verification) +- mockall + async-trait (testing) +- Vue 3 + TypeScript + Vite (frontend) + +**Storage**: SQLite (relay labels, device configuration) +**Testing**: cargo test + mockall (mocks) + real hardware integration tests (marked `#[ignore]` for CI) +**Target Platform**: +- Backend: Linux (NixOS development, Raspberry Pi 3B+ production with Traefik reverse proxy) +- Frontend: Cloudflare Pages (static hosting with CDN) +**Project Type**: Web (backend + frontend) +**Performance Goals**: +- API response: <100ms (excluding Modbus communication) +- Relay toggle operation: <1s end-to-end +- Concurrent users: 10 +- Frontend polling: 2-second intervals + +**Constraints**: +- Modbus timeout: 3 seconds (FR-006) +- Test coverage: >90% (constitution requirement) +- Retry strategy: Retry once on Modbus failure (FR-007) +- Graceful degradation: Backend starts even when device unavailable (FR-023) + +**Scale/Scope**: +- 8 relays per device +- Single device support (MVP) +- 5 core API endpoints + 1 health endpoint +- Backend: Local network (Raspberry Pi) behind Traefik reverse proxy +- Frontend: CDN-hosted (Cloudflare Pages), accesses backend via HTTPS + +## Constitution Check + +*GATE: Must pass before implementation. Verified against `specs/constitution.md` v1.1.0* + +✅ **Hexagonal Architecture**: Enforced through domain/application/infrastructure/presentation layers with inward-pointing dependencies +✅ **Domain-Driven Design**: Rich domain models with value objects (RelayId, RelayState, RelayLabel), entities (Relay), repositories +✅ **Test-First Development**: TDD mandatory - write failing tests before implementation for every component +✅ **API-First Design**: RESTful HTTP with OpenAPI specification, contracts defined before implementation +✅ **Observability & Monitoring**: Structured logging with tracing crate at all architectural boundaries +✅ **SOLID Principles**: +- SRP: Each module has single responsibility (domain types, services, repositories) +- OCP: Trait-based abstractions allow extension without modification +- LSP: Mock and real implementations substitutable through traits +- ISP: Focused traits (RelayController, RelayLabelRepository) +- DIP: High-level use cases depend on abstractions, not concrete implementations + +## Project Structure + +### Documentation (this feature) + +```text +specs/001-modbus-relay-control/ +├── plan.md # This file +├── spec.md # Feature specification +├── decisions.md # Architecture and technical decisions +├── research.md # Technical research findings +└── types-design.md # Type system design (TyDD) +``` + +### Source Code (repository root) + +```text +sta/ (repository root) +├── src/ +│ ├── domain/ +│ │ └── relay/ +│ │ ├── mod.rs # Module exports +│ │ ├── types.rs # RelayId, RelayState, RelayLabel (newtypes) +│ │ ├── entity.rs # Relay entity, RelayCollection +│ │ ├── repository.rs # RelayLabelRepository trait +│ │ ├── controller.rs # RelayController trait +│ │ └── error.rs # Domain-specific errors +│ │ +│ ├── application/ +│ │ └── relay/ +│ │ ├── mod.rs # Use case exports +│ │ ├── get_status.rs # GetRelayStatus use case +│ │ ├── toggle_relay.rs # ToggleRelay use case +│ │ ├── bulk_control.rs # BulkControl use cases +│ │ ├── update_label.rs # UpdateLabel use case +│ │ └── get_health.rs # GetDeviceHealth use case +│ │ +│ ├── infrastructure/ +│ │ ├── modbus/ +│ │ │ ├── mod.rs # Module exports +│ │ │ ├── client.rs # ModbusRelayController (real impl) +│ │ │ ├── mock.rs # MockRelayController (testing) +│ │ │ ├── config.rs # Modbus configuration +│ │ │ └── connection.rs # Connection management +│ │ │ +│ │ └── persistence/ +│ │ ├── mod.rs # Module exports +│ │ ├── sqlite_repository.rs # SqliteRelayLabelRepository +│ │ └── schema.sql # Database schema +│ │ +│ ├── route/ +│ │ ├── mod.rs # Update: Add Relay API category +│ │ └── relay.rs # New: Relay API handlers +│ │ +│ ├── settings.rs # Update: Add ModbusSettings +│ ├── startup.rs # Update: Wire relay dependencies +│ └── (existing files...) +│ +├── tests/ +│ ├── unit/ +│ │ └── relay/ +│ │ ├── domain_types_test.rs +│ │ ├── entity_test.rs +│ │ └── use_cases_test.rs +│ │ +│ ├── integration/ +│ │ ├── modbus_mock_test.rs +│ │ ├── modbus_real_hardware_test.rs # marked #[ignore] for CI +│ │ ├── sqlite_repository_test.rs +│ │ └── api_integration_test.rs +│ │ +│ └── contract/ +│ └── relay_api_contract_test.rs +│ +└── frontend/ (new directory) + ├── src/ + │ ├── components/ + │ │ ├── RelayGrid.vue + │ │ ├── RelayCard.vue + │ │ ├── BulkControls.vue + │ │ └── HealthStatus.vue + │ ├── services/ + │ │ └── api-client.ts # OpenAPI generated + │ ├── composables/ + │ │ └── useRelayPolling.ts + │ ├── types/ + │ │ └── relay.ts + │ ├── App.vue + │ └── main.ts + ├── package.json + ├── tsconfig.json + ├── vite.config.ts + └── index.html +``` + +**Structure Decision**: Web application structure with backend (existing `src/`) and new `frontend/` directory. Backend follows hexagonal architecture with domain/application/infrastructure/presentation layers. Frontend is separate Vue 3 project with Vite. + +--- + +## Phase Breakdown + +### Phase 0: Setup & Dependencies (0.5 days) + +**Objective**: Set up project dependencies and infrastructure for both backend and frontend. + +**Prerequisites**: +- Existing codebase (`sta` repository) +- Rust toolchain 1.75+ +- Node.js 18+ (for frontend) + +**Tasks**: + +#### Task 0.1: Add Rust Dependencies +**File**: `Cargo.toml` + +**Action**: Add the following dependencies: +```toml +[dependencies] +tokio-modbus = { version = "0.17.0", features = ["rtu", "tcp"] } +sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite"] } +mockall = "0.13" +async-trait = "0.1" +``` + +**Verification**: Run `cargo check` - should compile without errors. + +#### Task 0.2: Create Domain Module Structure +**Files to create**: +- `src/domain/mod.rs` +- `src/domain/relay/mod.rs` + +**Action**: Create empty module files with proper visibility: +```rust +// src/domain/mod.rs +pub mod relay; +``` + +```rust +// src/domain/relay/mod.rs +pub mod types; +pub mod entity; +pub mod repository; +pub mod controller; +pub mod error; +``` + +**Verification**: `cargo check` passes, modules are accessible. + +#### Task 0.3: Update Settings for Modbus Configuration +**File**: `src/settings.rs` + +**Action**: Add `ModbusSettings` struct: +```rust +#[derive(Debug, Clone, serde::Deserialize)] +pub struct ModbusSettings { + pub host: String, + pub port: u16, + pub slave_id: u8, + pub timeout_secs: u64, +} +``` + +Update `Settings` struct to include `modbus: ModbusSettings`. + +Update `settings/base.yaml`: +```yaml +modbus: + host: "192.168.1.100" # Replace with actual IP + port: 502 + slave_id: 1 + timeout_secs: 3 +``` + +**Verification**: Run `cargo run` - settings should load without errors. + +**Deliverables**: +- All dependencies added and compiling +- Module structure created +- Modbus configuration in settings + +--- + +### Phase 1: Domain Layer - Types & Entities (1 day) + +**Objective**: Implement pure domain logic with type-driven design (TyDD). No external dependencies. + +**Prerequisites**: Phase 0 complete + +#### Task 1.1: Write Tests for RelayId (TDD) +**File**: `tests/unit/relay/domain_types_test.rs` + +**Action**: Write failing tests FIRST: +```rust +#[cfg(test)] +mod relay_id_tests { + use sta::domain::relay::types::RelayId; + + #[test] + fn valid_relay_id_succeeds() { + for id in 1..=8 { + assert!(RelayId::new(id).is_ok()); + } + } + + #[test] + fn relay_id_zero_fails() { + assert!(RelayId::new(0).is_err()); + } + + #[test] + fn relay_id_above_8_fails() { + assert!(RelayId::new(9).is_err()); + } + + #[test] + fn relay_id_to_modbus_address() { + let id = RelayId::new(1).unwrap(); + assert_eq!(id.to_modbus_address(), 0); + + let id = RelayId::new(8).unwrap(); + assert_eq!(id.to_modbus_address(), 7); + } +} +``` + +**Verification**: Run `cargo test` - tests should FAIL (not compile). + +#### Task 1.2: Implement RelayId Newtype +**File**: `src/domain/relay/types.rs` + +**Action**: Implement to make tests pass: +```rust +use thiserror::Error; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +#[repr(transparent)] +pub struct RelayId(u8); + +#[derive(Debug, Error)] +pub enum RelayIdError { + #[error("Relay ID must be between 1 and 8, got {0}")] + OutOfRange(u8), +} + +impl RelayId { + /// Creates a new RelayId (1-8 for user-facing) + pub fn new(value: u8) -> Result { + if value < 1 || value > 8 { + return Err(RelayIdError::OutOfRange(value)); + } + Ok(Self(value)) + } + + /// Converts user-facing ID (1-8) to Modbus address (0-7) + pub fn to_modbus_address(self) -> u16 { + u16::from(self.0 - 1) + } + + pub fn value(self) -> u8 { + self.0 + } +} +``` + +**Acceptance Criteria**: +- [ ] All RelayId tests pass +- [ ] `cargo clippy` shows no warnings +- [ ] Type is `#[repr(transparent)]` for zero-cost + +**Verification**: Run `cargo test domain_types_test` - all tests PASS. + +#### Task 1.3: Write Tests for RelayState and RelayLabel +**File**: `tests/unit/relay/domain_types_test.rs` + +**Action**: Add tests for RelayState enum and RelayLabel newtype (following same TDD pattern). + +#### Task 1.4: Implement RelayState and RelayLabel +**File**: `src/domain/relay/types.rs` + +**Action**: Implement types to pass tests: +```rust +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum RelayState { + On, + Off, +} + +impl RelayState { + pub fn toggle(self) -> Self { + match self { + Self::On => Self::Off, + Self::Off => Self::On, + } + } + + pub fn to_modbus_value(self) -> u16 { + match self { + Self::On => 0xFF00, + Self::Off => 0x0000, + } + } + + pub fn from_modbus_coil(coil: bool) -> Self { + if coil { Self::On } else { Self::Off } + } +} + +#[derive(Debug, Clone, PartialEq, Eq)] +#[repr(transparent)] +pub struct RelayLabel(String); + +#[derive(Debug, Error)] +pub enum RelayLabelError { + #[error("Label cannot be empty")] + Empty, + #[error("Label exceeds maximum length of 50 characters")] + TooLong, +} + +impl RelayLabel { + pub fn new(value: String) -> Result { + if value.is_empty() { + return Err(RelayLabelError::Empty); + } + if value.len() > 50 { + return Err(RelayLabelError::TooLong); + } + Ok(Self(value)) + } + + pub fn as_str(&self) -> &str { + &self.0 + } +} + +impl Default for RelayLabel { + fn default() -> Self { + Self(String::from("Unlabeled")) + } +} +``` + +**Verification**: All domain type tests pass. + +#### Task 1.5: Write Tests for Relay Entity +**File**: `tests/unit/relay/entity_test.rs` + +**Action**: Write tests for Relay entity: +```rust +#[cfg(test)] +mod relay_entity_tests { + use sta::domain::relay::{entity::Relay, types::*}; + + #[test] + fn new_relay_defaults_to_off_and_unlabeled() { + let relay = Relay::new(RelayId::new(1).unwrap()); + assert_eq!(relay.state(), RelayState::Off); + assert_eq!(relay.label().as_str(), "Unlabeled"); + } + + #[test] + fn toggle_changes_state() { + let mut relay = Relay::new(RelayId::new(1).unwrap()); + assert_eq!(relay.state(), RelayState::Off); + + relay.toggle(); + assert_eq!(relay.state(), RelayState::On); + + relay.toggle(); + assert_eq!(relay.state(), RelayState::Off); + } + + #[test] + fn update_label_changes_label() { + let mut relay = Relay::new(RelayId::new(1).unwrap()); + let label = RelayLabel::new("Garage Door".to_string()).unwrap(); + relay.update_label(label.clone()); + assert_eq!(relay.label(), &label); + } +} +``` + +**Verification**: Tests FAIL (entity not yet implemented). + +#### Task 1.6: Implement Relay Entity +**File**: `src/domain/relay/entity.rs` + +**Action**: Implement Relay entity: +```rust +use super::types::{RelayId, RelayLabel, RelayState}; + +#[derive(Debug, Clone, PartialEq)] +pub struct Relay { + id: RelayId, + state: RelayState, + label: RelayLabel, +} + +impl Relay { + pub fn new(id: RelayId) -> Self { + Self { + id, + state: RelayState::Off, + label: RelayLabel::default(), + } + } + + pub fn with_state(id: RelayId, state: RelayState) -> Self { + Self { + id, + state, + label: RelayLabel::default(), + } + } + + pub fn with_label(id: RelayId, state: RelayState, label: RelayLabel) -> Self { + Self { id, state, label } + } + + pub fn id(&self) -> RelayId { + self.id + } + + pub fn state(&self) -> RelayState { + self.state + } + + pub fn label(&self) -> &RelayLabel { + &self.label + } + + pub fn toggle(&mut self) { + self.state = self.state.toggle(); + } + + pub fn set_state(&mut self, state: RelayState) { + self.state = state; + } + + pub fn update_label(&mut self, label: RelayLabel) { + self.label = label; + } +} +``` + +**Acceptance Criteria**: +- [ ] All Relay entity tests pass +- [ ] Entity has no external dependencies +- [ ] Methods follow domain logic only + +**Verification**: `cargo test entity_test` passes. + +#### Task 1.7: Define Repository and Controller Traits +**File**: `src/domain/relay/repository.rs` and `src/domain/relay/controller.rs` + +**Action**: Define traits (no tests needed for traits themselves): + +```rust +// repository.rs +use super::types::{RelayId, RelayLabel}; +use async_trait::async_trait; + +#[derive(Debug, thiserror::Error)] +pub enum RepositoryError { + #[error("Database error: {0}")] + DatabaseError(String), + #[error("Relay not found: {0}")] + NotFound(RelayId), +} + +#[async_trait] +pub trait RelayLabelRepository: Send + Sync { + async fn get_label(&self, id: RelayId) -> Result, RepositoryError>; + async fn save_label(&self, id: RelayId, label: RelayLabel) -> Result<(), RepositoryError>; + async fn get_all_labels(&self) -> Result, RepositoryError>; +} +``` + +```rust +// controller.rs +use super::types::{RelayId, RelayState}; +use async_trait::async_trait; + +#[derive(Debug, thiserror::Error)] +pub enum ControllerError { + #[error("Connection error: {0}")] + ConnectionError(String), + #[error("Timeout after {0} seconds")] + Timeout(u64), + #[error("Modbus exception: {0}")] + ModbusException(String), + #[error("Invalid relay ID: {0}")] + InvalidRelayId(u8), +} + +#[async_trait] +pub trait RelayController: Send + Sync { + async fn read_relay_state(&self, id: RelayId) -> Result; + async fn write_relay_state(&self, id: RelayId, state: RelayState) -> Result<(), ControllerError>; + async fn read_all_states(&self) -> Result, ControllerError>; + async fn write_all_states(&self, states: Vec) -> Result<(), ControllerError>; + async fn check_connection(&self) -> Result<(), ControllerError>; + async fn get_firmware_version(&self) -> Result, ControllerError>; +} +``` + +**Verification**: `cargo check` passes, traits compile. + +**Deliverables**: +- Domain types (RelayId, RelayState, RelayLabel) fully tested and implemented +- Relay entity implemented with unit tests +- Repository and Controller traits defined +- 100% test coverage for domain layer +- No external dependencies in domain layer + +--- + +### Phase 2: Infrastructure - Mock Implementation (0.5 days) + +**Objective**: Create mock implementations for testing without hardware. + +**Prerequisites**: Phase 1 complete (traits defined) + +#### Task 2.1: Implement MockRelayController +**File**: `src/infrastructure/modbus/mock.rs` + +**Action**: Create mock using in-memory state: +```rust +use crate::domain::relay::{ + controller::{ControllerError, RelayController}, + types::{RelayId, RelayState}, +}; +use async_trait::async_trait; +use std::sync::Arc; +use tokio::sync::Mutex; + +#[derive(Debug, Clone)] +pub struct MockRelayController { + states: Arc>, + firmware_version: Option, + simulate_timeout: bool, +} + +impl MockRelayController { + pub fn new() -> Self { + Self { + states: Arc::new(Mutex::new([RelayState::Off; 8])), + firmware_version: Some("v2.00".to_string()), + simulate_timeout: false, + } + } + + pub fn with_timeout_simulation(mut self) -> Self { + self.simulate_timeout = true; + self + } +} + +#[async_trait] +impl RelayController for MockRelayController { + async fn read_relay_state(&self, id: RelayId) -> Result { + if self.simulate_timeout { + tokio::time::sleep(tokio::time::Duration::from_secs(4)).await; + return Err(ControllerError::Timeout(3)); + } + let states = self.states.lock().await; + let index = (id.value() - 1) as usize; + Ok(states[index]) + } + + async fn write_relay_state(&self, id: RelayId, state: RelayState) -> Result<(), ControllerError> { + if self.simulate_timeout { + return Err(ControllerError::Timeout(3)); + } + let mut states = self.states.lock().await; + let index = (id.value() - 1) as usize; + states[index] = state; + Ok(()) + } + + async fn read_all_states(&self) -> Result, ControllerError> { + let states = self.states.lock().await; + Ok(states.to_vec()) + } + + async fn write_all_states(&self, new_states: Vec) -> Result<(), ControllerError> { + let mut states = self.states.lock().await; + for (i, state) in new_states.iter().enumerate() { + states[i] = *state; + } + Ok(()) + } + + async fn check_connection(&self) -> Result<(), ControllerError> { + Ok(()) + } + + async fn get_firmware_version(&self) -> Result, ControllerError> { + Ok(self.firmware_version.clone()) + } +} +``` + +**Verification**: `cargo check` passes. + +#### Task 2.2: Write Integration Tests with Mock +**File**: `tests/integration/modbus_mock_test.rs` + +**Action**: Test mock behavior: +```rust +use sta::domain::relay::{controller::RelayController, types::*}; +use sta::infrastructure::modbus::mock::MockRelayController; + +#[tokio::test] +async fn mock_relay_read_write_cycle() { + let controller = MockRelayController::new(); + let id = RelayId::new(1).unwrap(); + + // Read initial state (should be OFF) + let state = controller.read_relay_state(id).await.unwrap(); + assert_eq!(state, RelayState::Off); + + // Write ON + controller.write_relay_state(id, RelayState::On).await.unwrap(); + + // Read again (should be ON) + let state = controller.read_relay_state(id).await.unwrap(); + assert_eq!(state, RelayState::On); +} + +#[tokio::test] +async fn mock_timeout_simulation() { + let controller = MockRelayController::new().with_timeout_simulation(); + let id = RelayId::new(1).unwrap(); + + let result = controller.read_relay_state(id).await; + assert!(result.is_err()); +} +``` + +**Acceptance Criteria**: +- [ ] Mock controller passes all integration tests +- [ ] Mock supports timeout simulation +- [ ] Mock thread-safe (Arc) + +**Verification**: `cargo test modbus_mock_test` passes. + +**Deliverables**: +- MockRelayController fully functional +- Integration tests with mocks passing +- Foundation for TDD without hardware + +--- + +### Phase 3: Infrastructure - SQLite Repository (1 day) + +**Objective**: Implement persistent label storage with SQLite. + +**Prerequisites**: Phase 1 complete (repository trait defined) + +#### Task 3.1: Create Database Schema +**File**: `src/infrastructure/persistence/schema.sql` + +**Action**: Define schema: +```sql +-- Relay label storage +CREATE TABLE IF NOT EXISTS relay_labels ( + relay_id INTEGER PRIMARY KEY CHECK(relay_id >= 1 AND relay_id <= 8), + label TEXT NOT NULL CHECK(length(label) > 0 AND length(label) <= 50) +); + +-- Pre-populate with defaults +INSERT OR IGNORE INTO relay_labels (relay_id, label) VALUES + (1, 'Relay 1'), + (2, 'Relay 2'), + (3, 'Relay 3'), + (4, 'Relay 4'), + (5, 'Relay 5'), + (6, 'Relay 6'), + (7, 'Relay 7'), + (8, 'Relay 8'); +``` + +**Verification**: Schema is valid SQL. + +#### Task 3.2: Write Tests for SqliteRelayLabelRepository (TDD) +**File**: `tests/integration/sqlite_repository_test.rs` + +**Action**: Write failing tests: +```rust +use sta::domain::relay::{repository::RelayLabelRepository, types::*}; +use sta::infrastructure::persistence::sqlite_repository::SqliteRelayLabelRepository; + +#[tokio::test] +async fn get_label_returns_default_for_new_relay() { + let repo = SqliteRelayLabelRepository::in_memory().await.unwrap(); + let id = RelayId::new(1).unwrap(); + + let label = repo.get_label(id).await.unwrap(); + assert!(label.is_some()); + assert_eq!(label.unwrap().as_str(), "Relay 1"); +} + +#[tokio::test] +async fn save_and_get_label_persists() { + let repo = SqliteRelayLabelRepository::in_memory().await.unwrap(); + let id = RelayId::new(3).unwrap(); + let label = RelayLabel::new("Water Pump".to_string()).unwrap(); + + repo.save_label(id, label.clone()).await.unwrap(); + + let retrieved = repo.get_label(id).await.unwrap().unwrap(); + assert_eq!(retrieved, label); +} + +#[tokio::test] +async fn get_all_labels_returns_all_eight() { + let repo = SqliteRelayLabelRepository::in_memory().await.unwrap(); + + let labels = repo.get_all_labels().await.unwrap(); + assert_eq!(labels.len(), 8); +} +``` + +**Verification**: Tests FAIL (repository not implemented). + +#### Task 3.3: Implement SqliteRelayLabelRepository +**File**: `src/infrastructure/persistence/sqlite_repository.rs` + +**Action**: Implement repository: +```rust +use crate::domain::relay::{ + repository::{RelayLabelRepository, RepositoryError}, + types::{RelayId, RelayLabel}, +}; +use async_trait::async_trait; +use sqlx::{sqlite::SqlitePool, Row}; + +pub struct SqliteRelayLabelRepository { + pool: SqlitePool, +} + +impl SqliteRelayLabelRepository { + pub async fn new(db_path: &str) -> Result { + let pool = SqlitePool::connect(db_path) + .await + .map_err(|e| RepositoryError::DatabaseError(e.to_string()))?; + + let repo = Self { pool }; + + repo.initialize_schema().await?; + Ok(repo) + } + + pub async fn in_memory() -> Result { + Self::new("sqlite::memory:").await + } + + async fn initialize_schema(&self) -> Result<(), RepositoryError> { + sqlx::query(include_str!("schema.sql")) + .execute(&self.pool) + .await + .map_err(|e| RepositoryError::DatabaseError(e.to_string()))?; + Ok(()) + } +} + +#[async_trait] +impl RelayLabelRepository for SqliteRelayLabelRepository { + async fn get_label(&self, id: RelayId) -> Result, RepositoryError> { + let label_str: Option = sqlx::query_scalar( + "SELECT label FROM relay_labels WHERE relay_id = ?1" + ) + .bind(id.value()) + .fetch_optional(&self.pool) + .await + .map_err(|e| RepositoryError::DatabaseError(e.to_string()))?; + + match label_str { + Some(s) => Ok(Some( + RelayLabel::new(s).map_err(|e| RepositoryError::DatabaseError(e.to_string()))?, + )), + None => Ok(None), + } + } + + async fn save_label(&self, id: RelayId, label: RelayLabel) -> Result<(), RepositoryError> { + sqlx::query("INSERT OR REPLACE INTO relay_labels (relay_id, label) VALUES (?1, ?2)") + .bind(id.value()) + .bind(label.as_str()) + .execute(&self.pool) + .await + .map_err(|e| RepositoryError::DatabaseError(e.to_string()))?; + Ok(()) + } + + async fn get_all_labels(&self) -> Result, RepositoryError> { + let rows = sqlx::query("SELECT relay_id, label FROM relay_labels ORDER BY relay_id") + .fetch_all(&self.pool) + .await + .map_err(|e| RepositoryError::DatabaseError(e.to_string()))?; + + let mut result = Vec::new(); + for row in rows { + let id_val: u8 = row.try_get("relay_id") + .map_err(|e| RepositoryError::DatabaseError(e.to_string()))?; + let label_str: String = row.try_get("label") + .map_err(|e| RepositoryError::DatabaseError(e.to_string()))?; + + let id = RelayId::new(id_val) + .map_err(|e| RepositoryError::DatabaseError(e.to_string()))?; + let label = RelayLabel::new(label_str) + .map_err(|e| RepositoryError::DatabaseError(e.to_string()))?; + result.push((id, label)); + } + + Ok(result) + } +} +``` + +**Acceptance Criteria**: +- [ ] All SQLite repository tests pass +- [ ] Schema initializes automatically +- [ ] Labels persist across repository instances (file-based) +- [ ] Connection pool handles concurrency automatically + +**Verification**: `cargo test sqlite_repository_test` passes. + +**Deliverables**: +- SQLite repository fully functional +- Schema auto-initialization +- Persistence tests passing + +--- + +### Phase 4: Infrastructure - Real Modbus Client (1.5 days) + +**Objective**: Implement real Modbus RTU over TCP communication using tokio-modbus. + +**Prerequisites**: Phase 1 complete (controller trait), hardware available for testing + +#### Task 4.1: Implement ModbusRelayController +**File**: `src/infrastructure/modbus/client.rs` + +**Action**: Implement real Modbus controller: +```rust +use crate::domain::relay::{ + controller::{ControllerError, RelayController}, + types::{RelayId, RelayState}, +}; +use async_trait::async_trait; +use std::sync::Arc; +use tokio::sync::Mutex; +use tokio::time::{timeout, Duration}; +use tokio_modbus::prelude::*; + +pub struct ModbusRelayController { + ctx: Arc>, + timeout_duration: Duration, +} + +impl ModbusRelayController { + pub async fn new(host: &str, port: u16, slave_id: u8, timeout_secs: u64) -> Result { + let socket_addr = format!("{}:{}", host, port) + .parse() + .map_err(|e| ControllerError::ConnectionError(format!("Invalid address: {}", e)))?; + + let ctx = tcp::connect_slave(socket_addr, Slave(slave_id)) + .await + .map_err(|e| ControllerError::ConnectionError(e.to_string()))?; + + Ok(Self { + ctx: Arc::new(Mutex::new(ctx)), + timeout_duration: Duration::from_secs(timeout_secs), + }) + } + + async fn read_coils_with_timeout(&self, addr: u16, count: u16) -> Result, ControllerError> { + let ctx = self.ctx.lock().await; + + // tokio-modbus returns Result, io::Error> + let result = timeout(self.timeout_duration, ctx.read_coils(addr, count)) + .await + .map_err(|_| ControllerError::Timeout(self.timeout_duration.as_secs()))? + .map_err(|e| ControllerError::ConnectionError(e.to_string()))? + .map_err(|e| ControllerError::ModbusException(format!("{:?}", e)))?; + + Ok(result) + } + + async fn write_single_coil_with_timeout(&self, addr: u16, value: bool) -> Result<(), ControllerError> { + let ctx = self.ctx.lock().await; + + timeout(self.timeout_duration, ctx.write_single_coil(addr, value)) + .await + .map_err(|_| ControllerError::Timeout(self.timeout_duration.as_secs()))? + .map_err(|e| ControllerError::ConnectionError(e.to_string()))? + .map_err(|e| ControllerError::ModbusException(format!("{:?}", e)))?; + + Ok(()) + } +} + +#[async_trait] +impl RelayController for ModbusRelayController { + async fn read_relay_state(&self, id: RelayId) -> Result { + let addr = id.to_modbus_address(); + let coils = self.read_coils_with_timeout(addr, 1).await?; + + let state = RelayState::from_modbus_coil(coils[0]); + tracing::debug!(target: "modbus", relay_id = id.value(), ?state, "Read relay state"); + + Ok(state) + } + + async fn write_relay_state(&self, id: RelayId, state: RelayState) -> Result<(), ControllerError> { + let addr = id.to_modbus_address(); + let value = state == RelayState::On; + + self.write_single_coil_with_timeout(addr, value).await?; + tracing::info!(target: "modbus", relay_id = id.value(), ?state, "Wrote relay state"); + + Ok(()) + } + + async fn read_all_states(&self) -> Result, ControllerError> { + let coils = self.read_coils_with_timeout(0x0000, 8).await?; + + let states: Vec = coils + .into_iter() + .map(RelayState::from_modbus_coil) + .collect(); + + tracing::debug!(target: "modbus", "Read all relay states"); + Ok(states) + } + + async fn write_all_states(&self, states: Vec) -> Result<(), ControllerError> { + if states.len() != 8 { + return Err(ControllerError::ConnectionError( + "Must provide exactly 8 states".to_string(), + )); + } + + let ctx = self.ctx.lock().await; + let coils: Vec = states.iter().map(|s| *s == RelayState::On).collect(); + + timeout(self.timeout_duration, ctx.write_multiple_coils(0x0000, &coils)) + .await + .map_err(|_| ControllerError::Timeout(self.timeout_duration.as_secs()))? + .map_err(|e| ControllerError::ConnectionError(e.to_string()))? + .map_err(|e| ControllerError::ModbusException(format!("{:?}", e)))?; + + tracing::info!(target: "modbus", "Wrote all relay states"); + Ok(()) + } + + async fn check_connection(&self) -> Result<(), ControllerError> { + // Try reading first coil as health check + self.read_coils_with_timeout(0x0000, 1).await?; + Ok(()) + } + + async fn get_firmware_version(&self) -> Result, ControllerError> { + let ctx = self.ctx.lock().await; + + // Read firmware version from register 0x8000 + let result = timeout( + self.timeout_duration, + ctx.read_holding_registers(0x8000, 1), + ) + .await + .map_err(|_| ControllerError::Timeout(self.timeout_duration.as_secs()))? + .map_err(|e| ControllerError::ConnectionError(e.to_string()))? + .map_err(|e| ControllerError::ModbusException(format!("{:?}", e)))?; + + if let Some(&version_raw) = result.first() { + let version = f32::from(version_raw) / 100.0; + Ok(Some(format!("v{:.2}", version))) + } else { + Ok(None) + } + } +} +``` + +**Verification**: `cargo check` passes. + +#### Task 4.2: Write Real Hardware Integration Tests +**File**: `tests/integration/modbus_real_hardware_test.rs` + +**Action**: Create hardware tests (marked `#[ignore]` for CI): +```rust +use sta::domain::relay::{controller::RelayController, types::*}; +use sta::infrastructure::modbus::client::ModbusRelayController; + +#[tokio::test] +#[ignore] // Only run with real hardware: cargo test --ignored +async fn real_hardware_read_all_states() { + let controller = ModbusRelayController::new("192.168.1.100", 502, 1, 3) + .await + .expect("Failed to connect to Modbus device"); + + let states = controller.read_all_states().await.unwrap(); + assert_eq!(states.len(), 8); +} + +#[tokio::test] +#[ignore] +async fn real_hardware_toggle_relay() { + let controller = ModbusRelayController::new("192.168.1.100", 502, 1, 3) + .await + .expect("Failed to connect"); + + let id = RelayId::new(1).unwrap(); + + // Read current state + let initial = controller.read_relay_state(id).await.unwrap(); + + // Toggle + let new_state = initial.toggle(); + controller.write_relay_state(id, new_state).await.unwrap(); + + // Verify + let final_state = controller.read_relay_state(id).await.unwrap(); + assert_eq!(final_state, new_state); + + // Toggle back + controller.write_relay_state(id, initial).await.unwrap(); +} + +#[tokio::test] +#[ignore] +async fn real_hardware_firmware_version() { + let controller = ModbusRelayController::new("192.168.1.100", 502, 1, 3) + .await + .expect("Failed to connect"); + + let version = controller.get_firmware_version().await.unwrap(); + assert!(version.is_some()); + println!("Firmware version: {}", version.unwrap()); +} +``` + +**Acceptance Criteria**: +- [ ] Connection to real hardware succeeds +- [ ] Read operations return valid data +- [ ] Write operations physically toggle relays +- [ ] Timeout handling works (tested manually with disconnected device) +- [ ] Firmware version reads correctly + +**Verification**: +- `cargo test` passes (hardware tests skipped) +- `cargo test --ignored` passes WITH real hardware connected + +**Deliverables**: +- Real Modbus controller fully functional +- Hardware integration tests +- Timeout and error handling verified + +--- + +### Phase 5: Application Layer - Use Cases (1 day) + +**Objective**: Implement business logic orchestration (use cases). + +**Prerequisites**: Phases 1-4 complete (domain, mock, repository, real controller) + +#### Task 5.1: Write Tests for GetRelayStatus Use Case (TDD) +**File**: `tests/unit/relay/use_cases_test.rs` + +**Action**: Write failing tests: +```rust +use sta::application::relay::get_status::GetRelayStatus; +use sta::domain::relay::{controller::RelayController, repository::RelayLabelRepository, types::*}; +use sta::infrastructure::modbus::mock::MockRelayController; +use sta::infrastructure::persistence::sqlite_repository::SqliteRelayLabelRepository; + +#[tokio::test] +async fn get_relay_status_combines_state_and_label() { + let controller = MockRelayController::new(); + let repository = SqliteRelayLabelRepository::in_memory().await.unwrap(); + + let id = RelayId::new(1).unwrap(); + let label = RelayLabel::new("Test Relay".to_string()).unwrap(); + repository.save_label(id, label.clone()).await.unwrap(); + + controller.write_relay_state(id, RelayState::On).await.unwrap(); + + let use_case = GetRelayStatus::new(Box::new(controller), Box::new(repository)); + let relay = use_case.execute(id).await.unwrap(); + + assert_eq!(relay.id(), id); + assert_eq!(relay.state(), RelayState::On); + assert_eq!(relay.label(), &label); +} +``` + +**Verification**: Test FAILS (use case not implemented). + +#### Task 5.2: Implement GetRelayStatus Use Case +**File**: `src/application/relay/get_status.rs` + +**Action**: Implement use case: +```rust +use crate::domain::relay::{ + controller::{ControllerError, RelayController}, + entity::Relay, + repository::{RelayLabelRepository, RepositoryError}, + types::RelayId, +}; +use std::sync::Arc; + +#[derive(Debug, thiserror::Error)] +pub enum GetRelayStatusError { + #[error("Controller error: {0}")] + Controller(#[from] ControllerError), + #[error("Repository error: {0}")] + Repository(#[from] RepositoryError), +} + +pub struct GetRelayStatus { + controller: Arc, + repository: Arc, +} + +impl GetRelayStatus { + pub fn new( + controller: Arc, + repository: Arc, + ) -> Self { + Self { + controller, + repository, + } + } + + pub async fn execute(&self, id: RelayId) -> Result { + tracing::debug!(target: "use_case", relay_id = id.value(), "Getting relay status"); + + // Read state from Modbus hardware + let state = self.controller.read_relay_state(id).await?; + + // Read label from repository + let label = self.repository.get_label(id).await?.unwrap_or_default(); + + let relay = Relay::with_label(id, state, label); + + tracing::debug!(target: "use_case", relay_id = id.value(), ?state, + label = relay.label().as_str(), "Retrieved relay status"); + + Ok(relay) + } + + pub async fn execute_all(&self) -> Result, GetRelayStatusError> { + tracing::debug!(target: "use_case", "Getting all relay statuses"); + + // Read all states from Modbus + let states = self.controller.read_all_states().await?; + + // Read all labels from repository + let labels = self.repository.get_all_labels().await?; + + let relays: Vec = (1..=8) + .map(|id_val| { + let id = RelayId::new(id_val).unwrap(); + let state = states[(id_val - 1) as usize]; + let label = labels + .iter() + .find(|(label_id, _)| *label_id == id) + .map(|(_, l)| l.clone()) + .unwrap_or_default(); + Relay::with_label(id, state, label) + }) + .collect(); + + tracing::debug!(target: "use_case", "Retrieved all relay statuses"); + Ok(relays) + } +} +``` + +**Acceptance Criteria**: +- [ ] Use case tests pass +- [ ] Combines controller (state) + repository (label) +- [ ] Structured logging at boundaries +- [ ] Both single and bulk operations work + +**Verification**: `cargo test use_cases_test` passes. + +#### Task 5.3: Implement ToggleRelay and BulkControl Use Cases +**Files**: +- `src/application/relay/toggle_relay.rs` +- `src/application/relay/bulk_control.rs` +- `src/application/relay/update_label.rs` + +**Action**: Follow same TDD pattern (write tests, then implementation). + +**ToggleRelay**: Read current state → toggle → write new state +**BulkControl**: Write all ON or all OFF +**UpdateLabel**: Save label to repository + +**Verification**: All use case tests pass. + +**Deliverables**: +- All use cases implemented with TDD +- Use cases combine controller + repository +- >95% test coverage for application layer +- Structured logging throughout + +--- + +### Phase 6: Presentation Layer - HTTP API (1.5 days) + +**Objective**: Expose use cases via RESTful HTTP API with OpenAPI. + +**Prerequisites**: Phase 5 complete (use cases) + +#### Task 6.1: Define API DTOs and Responses +**File**: `src/route/relay.rs` + +**Action**: Create DTOs: +```rust +use poem_openapi::{Object, ApiResponse, payload::Json}; +use serde::{Deserialize, Serialize}; + +#[derive(Object, Debug, Clone, Serialize, Deserialize)] +pub struct RelayDto { + pub id: u8, + pub state: String, // "on" | "off" + pub label: String, +} + +#[derive(Object, Debug, Clone, Serialize, Deserialize)] +pub struct RelayListResponse { + pub relays: Vec, +} + +#[derive(Object, Debug, Clone, Serialize, Deserialize)] +pub struct ToggleRequest { + // Empty body - toggle action implied by endpoint +} + +#[derive(Object, Debug, Clone, Serialize, Deserialize)] +pub struct UpdateLabelRequest { + pub label: String, +} + +#[derive(Object, Debug, Clone, Serialize, Deserialize)] +pub struct HealthResponse { + pub status: String, // "healthy" | "unhealthy" + pub device_connected: bool, + pub firmware_version: Option, +} + +#[derive(ApiResponse)] +pub enum RelayApiResponse { + #[oai(status = 200)] + Ok(Json), + #[oai(status = 400)] + BadRequest(Json), + #[oai(status = 500)] + InternalServerError(Json), + #[oai(status = 504)] + GatewayTimeout(Json), +} + +#[derive(ApiResponse)] +pub enum RelayListApiResponse { + #[oai(status = 200)] + Ok(Json), + #[oai(status = 500)] + InternalServerError(Json), +} + +#[derive(Object, Debug, Clone, Serialize, Deserialize)] +pub struct ErrorResponse { + pub error: String, +} +``` + +#### Task 6.2: Implement API Endpoints +**File**: `src/route/relay.rs` (continued) + +**Action**: Implement handlers: +```rust +use poem_openapi::{OpenApi, param::Path, payload::Json}; +use crate::application::relay::*; +use crate::domain::relay::types::*; + +pub struct RelayApi { + get_status: Arc, + toggle_relay: Arc, + bulk_control: Arc, + update_label: Arc, + get_health: Arc, +} + +impl RelayApi { + pub fn new( + controller: Arc, + repository: Arc, + ) -> Self { + Self { + get_status: Arc::new(get_status::GetRelayStatus::new( + controller.clone(), + repository.clone(), + )), + toggle_relay: Arc::new(toggle_relay::ToggleRelay::new( + controller.clone(), + repository.clone(), + )), + bulk_control: Arc::new(bulk_control::BulkControl::new(controller.clone())), + update_label: Arc::new(update_label::UpdateLabel::new(repository.clone())), + get_health: Arc::new(get_health::GetDeviceHealth::new(controller.clone())), + } + } +} + +#[OpenApi(tag = "ApiCategory::Relay")] +impl RelayApi { + /// Get all relay statuses + #[oai(path = "/relays", method = "get")] + async fn get_all_relays(&self) -> RelayListApiResponse { + tracing::info!(target: "api", "GET /api/relays"); + + match self.get_status.execute_all().await { + Ok(relays) => { + let dtos: Vec = relays.iter().map(|r| RelayDto { + id: r.id().value(), + state: match r.state() { + RelayState::On => "on".to_string(), + RelayState::Off => "off".to_string(), + }, + label: r.label().as_str().to_string(), + }).collect(); + + RelayListApiResponse::Ok(Json(RelayListResponse { relays: dtos })) + } + Err(e) => { + tracing::error!(target: "api", error = %e, "Failed to get all relays"); + RelayListApiResponse::InternalServerError(Json(ErrorResponse { + error: e.to_string(), + })) + } + } + } + + /// Get single relay status + #[oai(path = "/relays/:id", method = "get")] + async fn get_relay(&self, id: Path) -> RelayApiResponse { + tracing::info!(target: "api", relay_id = id.0, "GET /api/relays/{}", id.0); + + let relay_id = match RelayId::new(id.0) { + Ok(id) => id, + Err(e) => { + return RelayApiResponse::BadRequest(Json(ErrorResponse { + error: e.to_string(), + })); + } + }; + + match self.get_status.execute(relay_id).await { + Ok(relay) => RelayApiResponse::Ok(Json(RelayDto { + id: relay.id().value(), + state: match relay.state() { + RelayState::On => "on".to_string(), + RelayState::Off => "off".to_string(), + }, + label: relay.label().as_str().to_string(), + })), + Err(e) => { + tracing::error!(target: "api", relay_id = id.0, error = %e, "Failed to get relay"); + RelayApiResponse::InternalServerError(Json(ErrorResponse { + error: e.to_string(), + })) + } + } + } + + /// Toggle relay state + #[oai(path = "/relays/:id/toggle", method = "post")] + async fn toggle_relay(&self, id: Path) -> RelayApiResponse { + tracing::info!(target: "api", relay_id = id.0, "POST /api/relays/{}/toggle", id.0); + + let relay_id = match RelayId::new(id.0) { + Ok(id) => id, + Err(e) => { + return RelayApiResponse::BadRequest(Json(ErrorResponse { + error: e.to_string(), + })); + } + }; + + match self.toggle_relay.execute(relay_id).await { + Ok(relay) => RelayApiResponse::Ok(Json(RelayDto { + id: relay.id().value(), + state: match relay.state() { + RelayState::On => "on".to_string(), + RelayState::Off => "off".to_string(), + }, + label: relay.label().as_str().to_string(), + })), + Err(e) => { + tracing::error!(target: "api", relay_id = id.0, error = %e, "Failed to toggle relay"); + RelayApiResponse::InternalServerError(Json(ErrorResponse { + error: e.to_string(), + })) + } + } + } + + /// Turn all relays ON + #[oai(path = "/relays/bulk/on", method = "post")] + async fn all_on(&self) -> RelayListApiResponse { + tracing::info!(target: "api", "POST /api/relays/bulk/on"); + // Implementation... + } + + /// Turn all relays OFF + #[oai(path = "/relays/bulk/off", method = "post")] + async fn all_off(&self) -> RelayListApiResponse { + tracing::info!(target: "api", "POST /api/relays/bulk/off"); + // Implementation... + } + + /// Update relay label + #[oai(path = "/relays/:id/label", method = "patch")] + async fn update_label(&self, id: Path, req: Json) -> RelayApiResponse { + tracing::info!(target: "api", relay_id = id.0, label = %req.0.label, "PATCH /api/relays/{}/label", id.0); + // Implementation... + } + + /// Get device health status + #[oai(path = "/health", method = "get")] + async fn health(&self) -> poem_openapi::payload::Json { + tracing::info!(target: "api", "GET /api/health"); + // Implementation... + } +} +``` + +#### Task 6.3: Register RelayApi in Route Aggregator +**File**: `src/route/mod.rs` + +**Action**: Add Relay category and register API: +```rust +#[derive(Tags)] +enum ApiCategory { + Health, + Meta, + Relay, // Add this +} + +pub(crate) struct Api { + health: health::HealthApi, + meta: meta::MetaApi, + relay: relay::RelayApi, // Add this +} + +impl From<&Settings> for Api { + fn from(value: &Settings) -> Self { + let health = health::HealthApi; + let meta = meta::MetaApi::from(&value.application); + + // Initialize relay dependencies + let controller = // ... create based on settings + let repository = // ... create based on settings + let relay = relay::RelayApi::new(controller, repository); + + Self { health, meta, relay } + } +} + +impl Api { + pub fn apis(self) -> (health::HealthApi, meta::MetaApi, relay::RelayApi) { + (self.health, self.meta, self.relay) + } +} +``` + +#### Task 6.4: Write API Contract Tests +**File**: `tests/contract/relay_api_contract_test.rs` + +**Action**: Test API contracts: +```rust +use poem::test::TestClient; +use sta::get_test_app; + +#[tokio::test] +async fn get_all_relays_returns_200() { + let app = get_test_app(); + let cli = TestClient::new(app); + + let resp = cli.get("/api/relays").send().await; + resp.assert_status_is_ok(); + + let json: serde_json::Value = resp.json().await.value().deserialize(); + assert!(json["relays"].is_array()); + assert_eq!(json["relays"].as_array().unwrap().len(), 8); +} + +#[tokio::test] +async fn toggle_relay_returns_200() { + let app = get_test_app(); + let cli = TestClient::new(app); + + let resp = cli.post("/api/relays/1/toggle").send().await; + resp.assert_status_is_ok(); + + let json: serde_json::Value = resp.json().await.value().deserialize(); + assert_eq!(json["id"], 1); + assert!(json["state"] == "on" || json["state"] == "off"); +} + +#[tokio::test] +async fn invalid_relay_id_returns_400() { + let app = get_test_app(); + let cli = TestClient::new(app); + + let resp = cli.get("/api/relays/9").send().await; + resp.assert_status(400); +} +``` + +**Acceptance Criteria**: +- [ ] All 6 endpoints implemented +- [ ] OpenAPI spec auto-generated +- [ ] Swagger UI accessible at `/` +- [ ] All contract tests pass +- [ ] Error responses include meaningful messages +- [ ] Logging at all API boundaries + +**Verification**: +- `cargo test contract` passes +- Visit `http://localhost:8000/` and test via Swagger UI + +**Deliverables**: +- Complete HTTP API with OpenAPI +- All endpoints tested +- Route registration complete +- API documentation auto-generated + +--- + +### Phase 7: Frontend - Vue 3 Application (2 days) + +**Objective**: Build responsive web interface with HTTP polling. + +**Prerequisites**: Phase 6 complete (API endpoints working) + +#### Task 7.1: Initialize Vue 3 Project +**Directory**: `frontend/` + +**Action**: +```bash +npm create vite@latest frontend -- --template vue-ts +cd frontend +npm install +npm install axios +``` + +**Verification**: `npm run dev` starts development server. + +#### Task 7.2: Generate OpenAPI TypeScript Client +**File**: `frontend/src/services/api-client.ts` + +**Action**: Use openapi-typescript-codegen or create manual client: +```typescript +import axios, { type AxiosInstance } from 'axios'; + +export interface RelayDto { + id: number; + state: 'on' | 'off'; + label: string; +} + +export interface RelayListResponse { + relays: RelayDto[]; +} + +export interface HealthResponse { + status: 'healthy' | 'unhealthy'; + device_connected: boolean; + firmware_version?: string; +} + +export class RelayApiClient { + private client: AxiosInstance; + + constructor(baseURL: string = 'http://localhost:8000/api') { + this.client = axios.create({ baseURL }); + } + + async getAllRelays(): Promise { + const response = await this.client.get('/relays'); + return response.data; + } + + async getRelay(id: number): Promise { + const response = await this.client.get(`/relays/${id}`); + return response.data; + } + + async toggleRelay(id: number): Promise { + const response = await this.client.post(`/relays/${id}/toggle`); + return response.data; + } + + async allOn(): Promise { + const response = await this.client.post('/relays/bulk/on'); + return response.data; + } + + async allOff(): Promise { + const response = await this.client.post('/relays/bulk/off'); + return response.data; + } + + async updateLabel(id: number, label: string): Promise { + const response = await this.client.patch(`/relays/${id}/label`, { label }); + return response.data; + } + + async getHealth(): Promise { + const response = await this.client.get('/health'); + return response.data; + } +} + +export const apiClient = new RelayApiClient(); +``` + +**Verification**: TypeScript compiles without errors. + +#### Task 7.3: Implement HTTP Polling Composable +**File**: `frontend/src/composables/useRelayPolling.ts` + +**Action**: +```typescript +import { ref, onMounted, onUnmounted } from 'vue'; +import { apiClient, type RelayDto, type HealthResponse } from '@/services/api-client'; + +export function useRelayPolling(intervalMs: number = 2000) { + const relays = ref([]); + const health = ref(null); + const isLoading = ref(true); + const error = ref(null); + + let pollingInterval: number | null = null; + + const fetchData = async () => { + try { + const [relayData, healthData] = await Promise.all([ + apiClient.getAllRelays(), + apiClient.getHealth(), + ]); + + relays.value = relayData.relays; + health.value = healthData; + error.value = null; + } catch (err: any) { + error.value = err.message || 'Failed to fetch data'; + console.error('Polling error:', err); + } finally { + isLoading.value = false; + } + }; + + const startPolling = () => { + fetchData(); // Immediate fetch + pollingInterval = window.setInterval(fetchData, intervalMs); + }; + + const stopPolling = () => { + if (pollingInterval !== null) { + clearInterval(pollingInterval); + pollingInterval = null; + } + }; + + onMounted(startPolling); + onUnmounted(stopPolling); + + return { + relays, + health, + isLoading, + error, + refresh: fetchData, + }; +} +``` + +#### Task 7.4: Implement RelayCard Component +**File**: `frontend/src/components/RelayCard.vue` + +**Action**: +```vue + + + + + +``` + +#### Task 7.5: Implement RelayGrid and App +**Files**: +- `frontend/src/components/RelayGrid.vue` +- `frontend/src/components/BulkControls.vue` +- `frontend/src/components/HealthStatus.vue` +- `frontend/src/App.vue` + +**Action**: Create grid layout with bulk controls and health status display. + +**Verification**: Frontend displays all 8 relays, polling works, toggles update state. + +#### Task 7.6: Responsive Design and Cross-Browser Testing +**Action**: Test on Chrome, Firefox, Safari, Edge. Test mobile/tablet layouts. + +**Acceptance Criteria**: +- [ ] HTTP polling every 2 seconds +- [ ] Relay state updates within 2 seconds +- [ ] Toggle actions complete within 1 second +- [ ] Label editing works (double-click, Enter/blur to save) +- [ ] Bulk controls work +- [ ] Health status displays correctly +- [ ] Responsive on mobile/tablet/desktop +- [ ] Works on Chrome, Firefox, Safari, Edge + +**Deliverables**: +- Complete Vue 3 frontend +- HTTP polling implemented +- All user stories functional +- Responsive design + +--- + +### Phase 8: Integration & Testing (0.5 days) + +**Objective**: End-to-end testing and coverage verification. + +#### Task 8.1: Manual Testing Against Real Hardware +**Action**: Test all user stories from spec.md with real device: +- [ ] US1: Monitor relay status +- [ ] US2: Toggle individual relay +- [ ] US3: Bulk relay control +- [ ] US4: System health monitoring +- [ ] US5: Relay labeling + +#### Task 8.2: Load Testing +**Action**: Test with 10 concurrent users (use `wrk` or Apache Bench): +```bash +wrk -t10 -c10 -d30s http://localhost:8000/api/relays +``` + +**Acceptance Criteria**: <100ms API response under load. + +#### Task 8.3: Coverage Verification +**Action**: +```bash +just coverage +``` + +**Acceptance Criteria**: >90% coverage for domain + application layers. + +#### Task 8.4: Error Scenario Testing +**Action**: Test error handling: +- [ ] Device disconnected during operation +- [ ] Modbus timeout (simulate with blocked network) +- [ ] Invalid relay IDs via API +- [ ] Database file permissions issue +- [ ] Frontend error display when backend down + +**Deliverables**: +- All user stories verified +- Load testing passed +- >90% coverage achieved +- Error handling verified + +--- + +## Testing Strategy + +### Test Coverage Targets + +| Layer | Coverage Target | Test Type | Tooling | +|-------|----------------|-----------|---------| +| Domain | 100% | Unit tests | `cargo test` | +| Application | >95% | Unit tests with mocks | `mockall` | +| Infrastructure | >80% | Integration tests | mocks + real hardware | +| Presentation | >90% | Contract tests | `poem::test::TestClient` | +| Frontend | >80% | Component tests | Vitest | + +### Mock Strategy + +**When to use mocks**: +- All CI/CD tests (no hardware available) +- Unit tests for use cases +- Fast feedback during development + +**When to use real hardware**: +- Integration tests (marked `#[ignore]`) +- Manual testing before deployment +- Debugging Modbus protocol issues + +**Mock Implementation Locations**: +- `src/infrastructure/modbus/mock.rs` - MockRelayController +- Test files: Use `MockRelayController::new()` in tests + +### Test Organization + +``` +tests/ +├── unit/ # Fast, no I/O, use mocks +│ └── relay/ +│ ├── domain_types_test.rs +│ ├── entity_test.rs +│ └── use_cases_test.rs +│ +├── integration/ # I/O allowed, can use real resources +│ ├── modbus_mock_test.rs +│ ├── modbus_real_hardware_test.rs # cargo test --ignored +│ ├── sqlite_repository_test.rs +│ └── api_integration_test.rs +│ +└── contract/ # API contract validation + └── relay_api_contract_test.rs +``` + +--- + +## Dependencies & Setup + +### Rust Dependencies (Cargo.toml) + +```toml +[dependencies] +# Existing dependencies... +tokio-modbus = { version = "0.17.0", features = ["rtu", "tcp"] } +sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite"] } +mockall = "0.13" +async-trait = "0.1" +``` + +### Frontend Dependencies (package.json) + +```json +{ + "dependencies": { + "vue": "^3.4.0", + "axios": "^1.6.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.0", + "typescript": "^5.3.0", + "vite": "^5.0.0", + "vitest": "^1.0.0" + } +} +``` + +### Database Setup + +**Location**: `relay_labels.db` (configurable in settings) + +**Schema**: Auto-initialized by `SqliteRelayLabelRepository` on first run using `schema.sql`. + +**Migrations**: Not needed for MVP (simple schema, auto-create). + +### Environment Variables + +Add to `settings/development.yaml`: +```yaml +modbus: + host: "192.168.1.100" # Update with actual IP + port: 502 + slave_id: 1 + timeout_secs: 3 + +database: + path: "relay_labels.db" +``` + +--- + +## Integration Points + +### Dependency Injection in Startup + +**File**: `src/startup.rs` + +**Changes needed**: +1. Create Modbus controller based on settings +2. Create SQLite repository +3. Pass both to `RelayApi::new()` +4. Register `RelayApi` in route aggregator + +Example: +```rust +// In Application::build() +let modbus_settings = &settings.modbus; +let controller: Arc = if cfg!(test) { + Arc::new(MockRelayController::new()) +} else { + Arc::new( + ModbusRelayController::new( + &modbus_settings.host, + modbus_settings.port, + modbus_settings.slave_id, + modbus_settings.timeout_secs, + ) + .await + .expect("Failed to connect to Modbus device"), + ) +}; + +let repository: Arc = Arc::new( + SqliteRelayLabelRepository::new(&settings.database.path) + .await + .expect("Failed to initialize database"), +); + +let relay_api = RelayApi::new(controller, repository); +``` + +### Route Registration + +**File**: `src/route/mod.rs` + +Update `Api::apis()` return type to include `relay::RelayApi`. + +### Graceful Degradation (FR-023) + +Backend must start even when Modbus device unreachable. Implement connection retry logic in background task: + +```rust +// Spawn background task in startup +tokio::spawn(async move { + loop { + if let Err(e) = controller.check_connection().await { + tracing::warn!("Modbus device unavailable: {}", e); + } + tokio::time::sleep(Duration::from_secs(5)).await; + } +}); +``` + +--- + +## Verification Checklist + +Before marking implementation complete, verify: + +### Backend +- [ ] All domain unit tests pass (`cargo test domain`) +- [ ] All application use case tests pass (`cargo test application`) +- [ ] All infrastructure tests pass (`cargo test infrastructure`) +- [ ] All API contract tests pass (`cargo test contract`) +- [ ] Real hardware integration tests pass (`cargo test --ignored`) +- [ ] `cargo clippy` shows no warnings +- [ ] `cargo fmt --check` passes +- [ ] Test coverage >90% (`just coverage`) +- [ ] OpenAPI spec available at `/specs` +- [ ] Swagger UI works at `/` +- [ ] Backend starts successfully when Modbus device unreachable +- [ ] Structured logging outputs to console + +### Frontend +- [ ] `npm run build` succeeds +- [ ] All components render correctly +- [ ] HTTP polling updates state every 2 seconds +- [ ] Toggle actions complete within 1 second +- [ ] Bulk controls work (All ON, All OFF) +- [ ] Label editing works (double-click, save on Enter/blur) +- [ ] Health status displays correctly +- [ ] Error messages display when backend unavailable +- [ ] Responsive design works on mobile/tablet/desktop +- [ ] Cross-browser compatibility (Chrome, Firefox, Safari, Edge) + +### Integration +- [ ] All user stories from spec.md verified with real hardware +- [ ] Load testing: 10 concurrent users, <100ms API response +- [ ] Error scenarios tested (disconnect, timeout, invalid input) +- [ ] Labels persist across backend restarts +- [ ] Firmware version displays (if available) + +### Deployment Readiness +- [ ] Configuration documented in README +- [ ] Environment variables documented +- [ ] Database location configurable +- [ ] Systemd service files created for Raspberry Pi backend +- [ ] Traefik configuration documented (reverse proxy + HTTPS + Authelia) +- [ ] Frontend production build tested +- [ ] Cloudflare Pages deployment configuration ready +- [ ] Backend CORS settings configured for frontend origin + +--- + +## Timeline Summary + +| Phase | Duration | Deliverables | +|-------|----------|--------------| +| 0: Setup | 0.5 days | Dependencies, module structure, settings | +| 1: Domain Layer | 1 day | Types, entities, traits (100% coverage) | +| 2: Mock Infrastructure | 0.5 days | MockRelayController, integration tests | +| 3: SQLite Repository | 1 day | Database persistence, schema, tests | +| 4: Real Modbus Client | 1.5 days | tokio-modbus integration, hardware tests | +| 5: Application Use Cases | 1 day | Business logic orchestration, >95% coverage | +| 6: HTTP API | 1.5 days | Poem endpoints, OpenAPI, contract tests | +| 7: Frontend | 2 days | Vue 3 app, polling, responsive design | +| 8: Integration & Testing | 0.5 days | E2E testing, coverage verification | +| **TOTAL** | **9 days** | **Production-ready MVP** | + +*Note: Original estimate was 7 days. Revised to 9 days accounting for real hardware integration testing and comprehensive coverage.* + +--- + +## Next Steps After Implementation + +Once this implementation plan is complete: +1. Deploy backend to Raspberry Pi 3B+ with Traefik reverse proxy and Authelia authentication +2. Deploy frontend to Cloudflare Pages with environment variable for backend API URL +3. Configure Traefik to handle HTTPS termination and route to backend +4. Consider future enhancements (P3 features): + - Scheduling (turn relay on/off at specific times) + - Automation rules (turn relay on if another relay state changes) + - Metrics and logging (relay toggle history) + - Multi-device support (control multiple 8-relay boards) +3. Monitor production performance and reliability +4. Gather user feedback for UX improvements + +--- + +## References + +- [Feature Specification](./spec.md) - Complete requirements and user stories +- [Architecture Decisions](./decisions.md) - Technical choices and rationale +- [Research Findings](./research.md) - tokio-modbus patterns, WebSocket vs polling +- [Type Design](./types-design.md) - Type-Driven Development (TyDD) details +- [Project Constitution](../constitution.md) - Hexagonal architecture, SOLID, TDD principles +- [Modbus Hardware Documentation](../../docs/Modbus_POE_ETH_Relay.md) - Device protocol details diff --git a/specs/001-modbus-relay-control/research.md b/specs/001-modbus-relay-control/research.md new file mode 100644 index 0000000..7973e97 --- /dev/null +++ b/specs/001-modbus-relay-control/research.md @@ -0,0 +1,718 @@ +# Research Document: Modbus Relay Control System + +**Created**: 2025-12-28 +**Feature**: [spec.md](./spec.md) +**Status**: Complete + +## Table of Contents + +1. [Executive Summary](#executive-summary) +2. [Tokio-Modbus Research](#tokio-modbus-research) +3. [WebSocket vs HTTP Polling](#websocket-vs-http-polling) +4. [Existing Codebase Patterns](#existing-codebase-patterns) +5. [Integration Recommendations](#integration-recommendations) + +--- + +## Executive Summary + +### Key Decisions + +| Decision Area | Recommendation | Rationale | +|---------------------------|--------------------------------------|---------------------------------------------------------| +| **Modbus Library** | tokio-modbus 0.17.0 | Native async/await, production-ready, good testability | +| **Communication Pattern** | HTTP Polling (as in spec) | Simpler, reliable, adequate for 10 users @ 2s intervals | +| **Connection Management** | Arc> for MVP | Single device, simple, can upgrade later if needed | +| **Retry Strategy** | Simple retry-once helper | Matches FR-007 requirement | +| **Testing Approach** | Trait-based abstraction with mockall | Enables >90% coverage without hardware | + +### User Input Analysis + +**User requested**: "Use tokio-modbus crate, poem-openapi for REST API, Vue.js with WebSocket for real-time updates" + +**Findings**: +- ✅ tokio-modbus 0.17.0: Excellent choice, validated by research +- ✅ poem-openapi: Already in use, working well +- ⚠️ **WebSocket vs HTTP Polling**: Spec says HTTP polling (FR-028). WebSocket adds 43x complexity for negligible benefit at this scale. + +**RECOMMENDATION**: Maintain HTTP polling as specified. WebSocket complexity not justified for 10 concurrent users with 2-second update intervals. + +### Deployment Architecture + +**User clarification (2025-12-29)**: Frontend on Cloudflare Pages, backend on Raspberry Pi behind Traefik with Authelia + +**Architecture**: +- **Frontend**: Cloudflare Pages (Vue 3 static build) - global CDN delivery +- **Backend**: Raspberry Pi HTTP API (same local network as Modbus device) +- **Reverse Proxy**: Traefik on Raspberry Pi + - HTTPS termination (TLS certificates) + - Authelia middleware for authentication + - Routes frontend requests to backend HTTP service +- **Communication Flow**: + - Frontend (CDN) → HTTPS → Traefik (HTTPS termination + auth) → Backend (HTTP) → Modbus TCP → Device + +**Security**: +- Frontend-Backend: HTTPS via Traefik (encrypted, authenticated) +- Backend-Device: Modbus TCP on local network (unencrypted, local only) + +--- + +## Tokio-Modbus Research + +### Decision: Recommended Patterns + +**Primary Recommendation**: Use tokio-modbus 0.17.0 with a custom trait-based abstraction layer (`RelayController` trait) for testability. Implement connection management using Arc> for MVP. + +### Technical Details + +**Version**: tokio-modbus 0.17.0 (latest stable, released 2025-10-22) + +**Protocol**: Modbus RTU over TCP (NOT Modbus TCP) +- Hardware uses RTU protocol tunneled over TCP +- Includes CRC16 validation +- Different from native Modbus TCP (no CRC, different framing) + +**Connection Strategy**: +- Shared `Arc>` for simplicity +- Single persistent connection (only one device) +- Can migrate to dedicated async task pattern if reconnection logic needed + +**Timeout Handling**: +- Wrap all operations with `tokio::time::timeout(Duration::from_secs(3), ...)` +- **CRITICAL**: tokio-modbus has NO built-in timeouts + +**Retry Logic**: +- Implement simple retry-once helper per FR-007 +- Matches specification requirement + +**Testing**: +- Use `mockall` crate with `async-trait` for unit testing +- Trait abstraction enables testing without hardware +- Supports >90% test coverage target (NFR-013) + +### Critical Gotchas + +1. **Device Gateway Configuration**: Hardware MUST be set to "Multi-host non-storage type" - default storage type sends spurious queries causing failures + +2. **No Built-in Timeouts**: tokio-modbus has NO automatic timeouts - must wrap every operation with `tokio::time::timeout` + +3. **RTU vs TCP Confusion**: Device uses Modbus RTU protocol over TCP (with CRC), not native Modbus TCP protocol + +4. **Address Indexing**: Relays labeled 1-8, but Modbus addresses are 0-7 (use newtype pattern with conversion methods) + +5. **Nested Result Handling**: Returns `Result, std::io::Error>` - must handle both layers (use `???` triple-question-mark pattern) + +6. **Concurrent Access**: Context is not thread-safe - requires `Arc` or dedicated task serialization + +### Code Examples + +**Basic Connection Setup**: +```rust +use tokio_modbus::prelude::*; +use tokio::time::{timeout, Duration}; + +// Connect to device +let socket_addr = "192.168.1.200:8234".parse()?; +let mut ctx = tcp::connect(socket_addr).await?; + +// Set slave ID (unit identifier) +ctx.set_slave(Slave(0x01)); + +// Read all 8 relay states with timeout +let states = timeout( + Duration::from_secs(3), + ctx.read_coils(0x0000, 8) +).await???; // Triple-? handles timeout + transport + exception errors +``` + +**Toggle Relay with Retry**: +```rust +async fn toggle_relay( + ctx: &mut Context, + relay_id: u8, // 1-8 +) -> Result<(), RelayError> { + let addr = (relay_id - 1) as u16; // Convert to 0-7 + + // Read current state + let states = timeout(Duration::from_secs(3), ctx.read_coils(addr, 1)) + .await???; + let current = states[0]; + + // Write opposite state with retry + let new_state = !current; + let write_op = || async { + timeout(Duration::from_secs(3), ctx.write_single_coil(addr, new_state)) + .await + }; + + // Retry once on failure (FR-007) + match write_op().await { + Ok(Ok(Ok(()))) => Ok(()), + Err(_) | Ok(Err(_)) | Ok(Ok(Err(_))) => { + tracing::warn!("Write failed, retrying"); + write_op().await??? + } + } +} +``` + +**Trait-Based Abstraction for Testing**: +```rust +use async_trait::async_trait; + +#[async_trait] +pub trait RelayController: Send + Sync { + async fn read_all_states(&mut self) -> Result, RelayError>; + async fn write_state(&mut self, relay_id: RelayId, state: RelayState) -> Result<(), RelayError>; +} + +// Real implementation with tokio-modbus +pub struct ModbusRelayController { + ctx: Arc>, +} + +#[async_trait] +impl RelayController for ModbusRelayController { + async fn read_all_states(&mut self) -> Result, RelayError> { + let mut ctx = self.ctx.lock().await; + timeout(Duration::from_secs(3), ctx.read_coils(0, 8)) + .await + .map_err(|_| RelayError::Timeout)? + .map_err(RelayError::Transport)? + .map_err(RelayError::Exception) + } + // ... other methods +} + +// Mock for testing (using mockall) +mock! { + pub RelayController {} + + #[async_trait] + impl RelayController for RelayController { + async fn read_all_states(&mut self) -> Result, RelayError>; + async fn write_state(&mut self, relay_id: RelayId, state: RelayState) -> Result<(), RelayError>; + } +} +``` + +### Alternatives Considered + +1. **modbus-robust**: Provides auto-reconnection but lacks retry logic and timeouts - insufficient for production +2. **bb8 connection pool**: Overkill for single-device scenario, adds unnecessary complexity +3. **Synchronous modbus-rs**: Would block Tokio threads, poor scalability for concurrent users +4. **Custom Modbus implementation**: Reinventing wheel, error-prone, significant development time + +### Resources + +- [GitHub - slowtec/tokio-modbus](https://github.com/slowtec/tokio-modbus) +- [tokio-modbus on docs.rs](https://docs.rs/tokio-modbus/) +- [Context7 MCP: `/slowtec/tokio-modbus`](mcp://context7/slowtec/tokio-modbus) +- [Context7 MCP: `/websites/rs_tokio-modbus_0_16_3_tokio_modbus`](mcp://context7/websites/rs_tokio-modbus_0_16_3_tokio_modbus) + +--- + +## WebSocket vs HTTP Polling + +### Recommendation: HTTP Polling (as specified) + +The specification's decision to use HTTP polling is technically sound. **HTTP polling is the better choice** for this specific use case. + +### Performance at Your Scale (10 users, 2-second intervals) + +**Bandwidth Comparison:** +- HTTP Polling: ~20 Kbps (10 users × 0.5 req/sec × 500 bytes × 8) +- WebSocket: ~2.4 Kbps sustained +- **Difference: 17.6 Kbps** - negligible on any modern network + +**Server Load:** +- HTTP Polling: 5 requests/second system-wide (trivial) +- WebSocket: 10 persistent connections (~80-160 KB memory) +- **Verdict: Both are trivial at this scale** + +### Implementation Complexity + +**HTTP Polling:** +- Backend: 0 lines (reuse existing `GET /api/relays`) +- Frontend: ~10 lines (simple setInterval) +- **Total effort: 15 minutes** + +**WebSocket:** +- Backend: ~115 lines (handler + background poller + channel setup) +- Frontend: ~135 lines (WebSocket manager + reconnection logic) +- Testing: ~180 lines (connection lifecycle + reconnection tests) +- **Total effort: 2-3 days + ongoing maintenance** + +**Complexity ratio: 43x more code for WebSocket** + +### Reliability & Error Handling + +**HTTP Polling Advantages:** +- Stateless (automatic recovery on next poll) +- Standard HTTP error codes +- Works everywhere (proxies, firewalls, old browsers) +- No connection state management +- Simple testing + +**WebSocket Challenges:** +- Connection lifecycle management +- Exponential backoff reconnection logic +- State synchronization on reconnect +- Thundering herd problem (all clients reconnect after server restart) +- May fail behind corporate proxies (requires fallback to HTTP polling anyway) + +### Decision Matrix + +| Criterion | HTTP Polling | WebSocket | Weight | +|-----------|--------------|-----------|--------| +| Simplicity | 5 | 2 | 3x | +| Reliability | 5 | 3 | 3x | +| Testing | 5 | 2 | 2x | +| Performance @ 10 users | 4 | 5 | 1x | +| Scalability to 100+ | 3 | 5 | 1x | +| Architecture fit | 5 | 3 | 2x | + +**Weighted Scores:** +- **HTTP Polling: 4.56/5** +- **WebSocket: 3.19/5** + +HTTP Polling scores **43% higher** when complexity, reliability, and testing are properly weighted for this project's scale. + +### When WebSocket Makes Sense + +WebSocket advantages manifest at: +- **100+ concurrent users** (4x throughput advantage becomes meaningful) +- **Sub-second update requirements** (<1 second intervals) +- **High-frequency updates** where latency matters +- **Bidirectional communication** (chat, gaming, trading systems) + +For relay control with 2-second polling: +- Latency: 0-4 seconds (avg 2 sec) - **acceptable for lights/pumps** +- Not a real-time critical system (not chat, gaming, or trading) + +### Migration Path (If Needed Later) + +Starting with HTTP polling does NOT prevent WebSocket adoption later: + +1. **Phase 1:** Add `/api/ws` endpoint (non-breaking change) +2. **Phase 2:** Progressive enhancement (detect WebSocket support) +3. **Phase 3:** Gradual rollout with monitoring + +**Key Point:** HTTP polling provides a baseline. Adding WebSocket later is straightforward, but removing WebSocket complexity is harder. + +### Poem WebSocket Support (For Reference) + +Poem has excellent WebSocket support through `poem::web::websocket`: + +```rust +use poem::web::websocket::{WebSocket, Message}; + +#[handler] +async fn ws_handler( + ws: WebSocket, + state_tx: Data<&watch::Sender>, +) -> impl IntoResponse { + ws.on_upgrade(move |socket| async move { + let (mut sink, mut stream) = socket.split(); + let mut rx = state_tx.subscribe(); + + // Send initial state + let initial = rx.borrow().clone(); + sink.send(Message::text(serde_json::to_string(&initial)?)).await?; + + // Stream updates + while rx.changed().await.is_ok() { + let state = rx.borrow().clone(); + sink.send(Message::text(serde_json::to_string(&state)?)).await?; + } + }) +} +``` + +**Broadcasting Pattern**: Use `tokio::sync::watch` channel: +- Maintains only most recent value (perfect for relay state) +- Automatic deduplication of identical states +- New connections get immediate state snapshot +- Memory-efficient (single state copy) + +### Resources + +- [Poem WebSocket API Documentation](https://docs.rs/poem/latest/poem/web/websocket/) +- [HTTP vs WebSockets Performance](https://blog.feathersjs.com/http-vs-websockets-a-performance-comparison-da2533f13a77) +- [Tokio Channels Tutorial](https://tokio.rs/tokio/tutorial/channels) + +--- + +## Existing Codebase Patterns + +### Architecture Overview + +The current codebase is a well-structured Rust backend API using Poem framework with OpenAPI support, following clean architecture principles. + +**Current Structure**: +``` +src/ +├── lib.rs - Library entry point, orchestrates application setup +├── main.rs - Binary entry point, calls lib::run() +├── startup.rs - Application builder, server configuration, route setup +├── settings.rs - Configuration from YAML files + environment variables +├── telemetry.rs - Logging and tracing setup +├── route/ - HTTP endpoint handlers +│ ├── mod.rs - API aggregation and OpenAPI tags +│ ├── health.rs - Health check endpoints +│ └── meta.rs - Application metadata endpoints +└── middleware/ - Custom middleware implementations + ├── mod.rs + └── rate_limit.rs - Rate limiting middleware using governor +``` + +### Key Patterns Discovered + +#### 1. Route Registration Pattern + +**Location**: `src/startup.rs:95-107` + +```rust +fn setup_app(settings: &Settings) -> poem::Route { + let api_service = OpenApiService::new( + Api::from(settings).apis(), + settings.application.clone().name, + settings.application.clone().version, + ) + .url_prefix("/api"); + let ui = api_service.swagger_ui(); + poem::Route::new() + .nest("/api", api_service.clone()) + .nest("/specs", api_service.spec_endpoint_yaml()) + .nest("/", ui) +} +``` + +**Key Insights**: +- OpenAPI service created with all API handlers via `.apis()` tuple +- URL prefix `/api` applied to all API routes +- Swagger UI automatically mounted at root `/` +- OpenAPI spec YAML available at `/specs` + +#### 2. API Handler Organization Pattern + +**Location**: `src/route/mod.rs:14-37` + +```rust +#[derive(Tags)] +enum ApiCategory { + Health, + Meta, +} + +pub(crate) struct Api { + health: health::HealthApi, + meta: meta::MetaApi, +} + +impl From<&Settings> for Api { + fn from(value: &Settings) -> Self { + let health = health::HealthApi; + let meta = meta::MetaApi::from(&value.application); + Self { health, meta } + } +} + +impl Api { + pub fn apis(self) -> (health::HealthApi, meta::MetaApi) { + (self.health, self.meta) + } +} +``` + +**Key Insights**: +- `Tags` enum groups APIs into categories for OpenAPI documentation +- Aggregator struct (`Api`) holds all API handler instances +- Dependency injection via `From<&Settings>` trait +- `.apis()` method returns tuple of all handlers + +#### 3. OpenAPI Handler Definition Pattern + +**Location**: `src/route/health.rs:7-29` + +```rust +#[derive(ApiResponse)] +enum HealthResponse { + #[oai(status = 200)] + Ok, + #[oai(status = 429)] + TooManyRequests, +} + +#[derive(Default, Clone)] +pub struct HealthApi; + +#[OpenApi(tag = "ApiCategory::Health")] +impl HealthApi { + #[oai(path = "/health", method = "get")] + async fn ping(&self) -> HealthResponse { + tracing::event!(target: "backend::health", tracing::Level::DEBUG, + "Accessing health-check endpoint"); + HealthResponse::Ok + } +} +``` + +**Key Insights**: +- Response types are enums with `#[derive(ApiResponse)]` +- Each variant maps to HTTP status code via `#[oai(status = N)]` +- Handlers use `#[OpenApi(tag = "...")]` for categorization +- Type-safe responses at compile time +- Tracing at architectural boundaries + +#### 4. JSON Response Pattern with DTOs + +**Location**: `src/route/meta.rs:9-56` + +```rust +#[derive(Object, Debug, Clone, serde::Serialize, serde::Deserialize)] +struct Meta { + version: String, + name: String, +} + +#[derive(ApiResponse)] +enum MetaResponse { + #[oai(status = 200)] + Meta(Json), + #[oai(status = 429)] + TooManyRequests, +} + +#[OpenApi(tag = "ApiCategory::Meta")] +impl MetaApi { + #[oai(path = "/meta", method = "get")] + async fn meta(&self) -> Result { + Ok(MetaResponse::Meta(Json(self.into()))) + } +} +``` + +**Key Insights**: +- DTOs use `#[derive(Object)]` for OpenAPI schema generation +- Response variants can hold `Json` payloads +- Handler struct holds state/configuration +- Returns `Result` for error handling + +#### 5. Middleware Composition Pattern + +**Location**: `src/startup.rs:59-91` + +```rust +let app = value + .app + .with(RateLimit::new(&rate_limit_config)) + .with(Cors::new()) + .data(value.settings); +``` + +**Key Insights**: +- Middleware applied via `.with()` method chaining +- Order matters: RateLimit → CORS → data injection +- Settings injected as shared data via `.data()` +- Configuration drives middleware behavior + +#### 6. Configuration Management Pattern + +**Location**: `src/settings.rs:40-62` + +```rust +let settings = config::Config::builder() + .add_source(config::File::from(settings_directory.join("base.yaml"))) + .add_source(config::File::from( + settings_directory.join(environment_filename), + )) + .add_source( + config::Environment::with_prefix("APP") + .prefix_separator("__") + .separator("__"), + ) + .build()?; +``` + +**Key Insights**: +- Three-tier configuration: base → environment-specific → env vars +- Environment detected via `APP_ENVIRONMENT` variable +- Environment variables use `APP__` prefix with double underscore separators +- Type-safe deserialization + +#### 7. Testing Pattern + +**Location**: `src/route/health.rs:31-38` + +```rust +#[tokio::test] +async fn health_check_works() { + let app = crate::get_test_app(); + let cli = poem::test::TestClient::new(app); + let resp = cli.get("/api/health").send().await; + resp.assert_status_is_ok(); +} +``` + +**Key Insights**: +- Test helper creates full application with random port +- `TestClient` provides fluent assertion API +- Tests are async with `#[tokio::test]` +- Real application used in tests + +### Type System Best Practices + +Current code demonstrates excellent TyDD: +- `Environment` enum instead of strings +- `RateLimitConfig` newtype instead of raw numbers +- `ApiResponse` enums for type-safe HTTP responses + +### Architecture Compliance + +**Current Layers**: +1. **Presentation Layer**: `src/route/*` - HTTP adapters +2. **Infrastructure Layer**: `src/middleware/*`, `src/startup.rs`, `src/telemetry.rs` + +**Missing Layers** (to be added for Modbus): +3. **Domain Layer**: Pure relay logic, no Modbus knowledge +4. **Application Layer**: Use cases (get status, toggle) + +--- + +## Integration Recommendations + +### Recommended Architecture for Modbus Feature + +Following hexagonal architecture principles from constitution: + +``` +src/ +├── domain/ +│ └── relay/ +│ ├── mod.rs - Domain types (RelayId, RelayState, Relay) +│ ├── relay.rs - Relay entity +│ ├── error.rs - Domain errors +│ └── repository.rs - RelayRepository trait +├── application/ +│ └── relay/ +│ ├── mod.rs - Use case exports +│ ├── get_status.rs - GetRelayStatus use case +│ ├── toggle.rs - ToggleRelay use case +│ └── bulk_control.rs - BulkControl use case +├── infrastructure/ +│ └── modbus/ +│ ├── mod.rs - Modbus exports +│ ├── client.rs - ModbusRelayRepository implementation +│ ├── config.rs - Modbus configuration +│ └── error.rs - Modbus-specific errors +└── route/ + └── relay.rs - HTTP adapter (presentation layer) +``` + +### Integration Points + +| Component | File | Action | +|-----------|------|--------| +| **API Category** | `src/route/mod.rs` | Add `Relay` to `ApiCategory` enum | +| **API Aggregator** | `src/route/mod.rs` | Add `relay: RelayApi` field to `Api` struct | +| **API Tuple** | `src/route/mod.rs` | Add `RelayApi` to `.apis()` return tuple | +| **Settings** | `src/settings.rs` | Add `ModbusSettings` struct and `modbus` field | +| **Config Files** | `settings/base.yaml` | Add `modbus:` section | +| **Shared State** | `src/startup.rs` | Inject `ModbusClient` via `.data()` | +| **Dependencies** | `Cargo.toml` | Add `tokio-modbus`, `async-trait`, `mockall` | + +### Example: New Route Handler + +```rust +// src/route/relay.rs +use poem::Result; +use poem_openapi::{ApiResponse, Object, OpenApi, payload::Json, param::Path}; +use crate::domain::relay::{RelayId, RelayState, Relay}; + +#[derive(Object, Serialize, Deserialize)] +struct RelayDto { + id: u8, + state: String, // "on" or "off" + label: Option, +} + +#[derive(ApiResponse)] +enum RelayResponse { + #[oai(status = 200)] + Status(Json), + #[oai(status = 400)] + BadRequest, + #[oai(status = 503)] + ServiceUnavailable, +} + +#[OpenApi(tag = "ApiCategory::Relay")] +impl RelayApi { + #[oai(path = "/relays/:id", method = "get")] + async fn get_status(&self, id: Path) -> Result { + let relay_id = RelayId::new(id.0) + .map_err(|_| poem::Error::from_status(StatusCode::BAD_REQUEST))?; + + // Use application layer use case + match self.get_status_use_case.execute(relay_id).await { + Ok(relay) => Ok(RelayResponse::Status(Json(relay.into()))), + Err(_) => Ok(RelayResponse::ServiceUnavailable), + } + } +} +``` + +### Example: Settings Extension + +```rust +// src/settings.rs +#[derive(Debug, serde::Deserialize, Clone)] +pub struct ModbusSettings { + pub host: String, + pub port: u16, + pub slave_id: u8, + pub timeout_seconds: u64, +} + +#[derive(Debug, serde::Deserialize, Clone)] +pub struct Settings { + pub application: ApplicationSettings, + pub debug: bool, + pub frontend_url: String, + pub rate_limit: RateLimitSettings, + pub modbus: ModbusSettings, // New field +} +``` + +```yaml +# settings/base.yaml +modbus: + host: "192.168.1.100" + port: 502 + slave_id: 1 + timeout_seconds: 3 +``` + +--- + +## Summary + +### Key Takeaways + +1. **tokio-modbus 0.17.0**: Excellent choice, use trait abstraction for testability +2. **HTTP Polling**: Maintain spec decision, simpler and adequate for scale +3. **Hexagonal Architecture**: Add domain/application layers following existing patterns +4. **Type-Driven Development**: Apply newtype pattern (RelayId, RelayState) +5. **Testing**: Use mockall with async-trait for >90% coverage without hardware + +### Next Steps + +1. **Clarifying Questions**: Resolve ambiguities in requirements +2. **Architecture Design**: Create multiple implementation approaches +3. **Final Plan**: Select approach and create detailed implementation plan +4. **Implementation**: Follow TDD workflow with types-first design + +--- + +**End of Research Document** diff --git a/specs/001-modbus-relay-control/spec-checklist.md b/specs/001-modbus-relay-control/spec-checklist.md new file mode 100644 index 0000000..b66a419 --- /dev/null +++ b/specs/001-modbus-relay-control/spec-checklist.md @@ -0,0 +1,51 @@ +# Specification Quality Checklist: Modbus Relay Control System + +**Purpose**: Validate specification completeness and quality before proceeding to planning +**Created**: 2025-12-28 +**Feature**: [spec.md](./spec.md) + +## Content Quality + +- [x] No implementation details (languages, frameworks, APIs) + - **Note**: Specification intentionally includes some implementation constraints (Rust, Poem, tokio-modbus) per project constitution requirements (NFR-009, NFR-014, NFR-015). These are architectural constraints, not implementation details of business logic. +- [x] Focused on user value and business needs +- [x] Written for non-technical stakeholders +- [x] All mandatory sections completed + +## Requirement Completeness + +- [x] No [NEEDS CLARIFICATION] markers remain + - **Resolution**: FR-023 clarified by user - backend starts successfully even when device unhealthy, frontend displays error as part of Health story +- [x] Requirements are testable and unambiguous +- [x] Success criteria are measurable +- [x] Success criteria are technology-agnostic (no implementation details) + - **Note**: SC-010 references cargo tarpaulin as measurement tool, which is acceptable for NFR validation +- [x] All acceptance scenarios are defined +- [x] Edge cases are identified +- [x] Scope is clearly bounded +- [x] Dependencies and assumptions identified + +## Feature Readiness + +- [x] All functional requirements have clear acceptance criteria +- [x] User scenarios cover primary flows +- [x] Feature meets measurable outcomes defined in Success Criteria +- [x] No implementation details leak into specification + +## Quality Assessment + +**Overall Status**: ✅ **READY FOR PLANNING** + +### Strengths +- Comprehensive coverage of 5 prioritized, independently testable user stories +- 37 functional + 21 non-functional requirements provide clear scope +- Edge cases thoroughly documented with specific mitigation strategies +- Success criteria are measurable and aligned with user stories +- Clear boundaries with explicit "Out of Scope" section +- Risk matrix identifies key concerns with mitigation approaches + +### Notes +- Specification includes architectural constraints (hexagonal architecture, TDD, TyDD) per project constitution +- These constraints are non-negotiable project requirements, not arbitrary implementation details +- User clarification resolved FR-023 regarding startup behavior when device is unhealthy +- Specification ready for `/sdd:02-plan` stage diff --git a/specs/001-modbus-relay-control/spec.md b/specs/001-modbus-relay-control/spec.md new file mode 100644 index 0000000..d8e5f7f --- /dev/null +++ b/specs/001-modbus-relay-control/spec.md @@ -0,0 +1,315 @@ +# Feature Specification: Modbus Relay Control System + +**Feature Branch**: `001-modbus-relay-control` +**Created**: 2025-12-28 +**Status**: Draft +**Input**: User description: "Modbus relay control system: backend reads relay and writes states via Modbus, exposes REST API, frontend displays relay states and allows toggling." + +## Executive Summary + +### Problem Statement + +Users currently require specialized Modbus software (Modbus Poll, SSCOM) to interact with an 8-channel relay device, creating barriers to adoption and limiting remote access capabilities. The lack of a web-based interface prevents non-technical users from controlling relays and limits integration possibilities. + +### Proposed Solution + +A web application consisting of: +- **Rust Backend**: Modbus RTU over TCP integration + RESTful HTTP API (deployed on Raspberry Pi) +- **Vue.js Frontend**: Real-time relay status display and control interface (deployed on Cloudflare Pages) +- **Reverse Proxy**: Traefik with Authelia middleware for authentication and HTTPS termination +- **Local Network**: Raspberry Pi on same network as Modbus relay device + +### Value Proposition + +- **Accessibility**: Control relays from any browser without specialized software +- **Usability**: Intuitive UI eliminates need for Modbus protocol knowledge +- **Foundation**: Enables future automation, scheduling, and integration capabilities +- **Deployment**: Self-contained system with no external dependencies + +## User Scenarios & Testing *(mandatory)* + +### User Story 1 - Monitor Relay Status (Priority: P1) + +As a user, I want to see the current state (on/off) of all 8 relays in real-time so I can verify the physical system state without being physically present. + +**Why this priority**: Foundation capability - all other features depend on accurate state visibility. Delivers immediate value by eliminating need for physical inspection or specialized software. + +**Independent Test**: Can be fully tested by loading the web interface and verifying displayed states match physical relay states (verified with multimeter or visual indicators). Delivers value even without control capabilities. + +**Acceptance Scenarios**: + +1. **Given** all relays are OFF, **When** I load the web interface, **Then** I see 8 relays each displaying "OFF" state +2. **Given** relay #3 is ON and others are OFF, **When** I load the interface, **Then** I see relay #3 showing "ON" and others showing "OFF" +3. **Given** the interface is loaded, **When** relay state changes externally (via Modbus Poll), **Then** the interface updates within 2 seconds to reflect the new state +4. **Given** the Modbus device is unreachable, **When** I load the interface, **Then** I see an error message indicating the device is unavailable + +--- + +### User Story 2 - Toggle Individual Relay (Priority: P1) + +As a user, I want to toggle any relay on or off with a single click so I can control connected devices remotely. + +**Why this priority**: Core use case - enables remote control capability. Combined with Story 1, creates a complete minimal viable product. + +**Independent Test**: Can be tested by clicking any relay toggle button and observing both UI update and physical relay click/LED change. Delivers standalone value for remote control. + +**Acceptance Scenarios**: + +1. **Given** relay #5 is OFF, **When** I click the toggle button for relay #5, **Then** relay #5 turns ON and the UI reflects this within 1 second +2. **Given** relay #2 is ON, **When** I click the toggle button for relay #2, **Then** relay #2 turns OFF and the UI reflects this within 1 second +3. **Given** the Modbus device is unreachable, **When** I attempt to toggle a relay, **Then** I see an error message and the UI does not change +4. **Given** I toggle relay #1, **When** the Modbus command times out, **Then** I see a timeout error and can retry + +--- + +### User Story 3 - Bulk Relay Control (Priority: P2) + +As a user, I want to turn all relays ON or OFF simultaneously so I can quickly reset the entire system or enable/disable all connected devices at once. + +**Why this priority**: Efficiency improvement for common scenarios (system shutdown, initialization). Not critical for MVP but significantly improves user experience. + +**Independent Test**: Can be tested by clicking "All ON" or "All OFF" buttons and verifying all 8 physical relays respond. Delivers value for batch operations without requiring individual story implementations. + +**Acceptance Scenarios**: + +1. **Given** relays have mixed states (some ON, some OFF), **When** I click "All ON", **Then** all 8 relays turn ON within 2 seconds +2. **Given** all relays are ON, **When** I click "All OFF", **Then** all 8 relays turn OFF within 2 seconds +3. **Given** I click "All ON" and relay #4 fails to respond, **Then** I see an error for relay #4 but other relays still turn ON +4. **Given** the Modbus device is unreachable, **When** I click "All ON", **Then** I see an error message and no state changes occur + +--- + +### User Story 4 - System Health Monitoring (Priority: P2) + +As a user, I want to see device connectivity status and firmware version so I can diagnose issues and verify device compatibility. + +**Why this priority**: Operational value for troubleshooting. Not required for basic control but critical for production reliability and maintenance. + +**Independent Test**: Can be tested by viewing the health status section, disconnecting the Modbus device, and observing status change. Delivers standalone diagnostic value. + +**Acceptance Scenarios**: + +1. **Given** the Modbus device is connected and responsive, **When** I view the health status, **Then** I see "Healthy" status with firmware version displayed +2. **Given** the Modbus device is unreachable, **When** the backend starts, **Then** the backend starts successfully and the frontend displays "Unhealthy - Device Unreachable" status +3. **Given** the Modbus device becomes unreachable during operation, **When** I view the health status, **Then** I see "Unhealthy - Connection Lost" with timestamp of last successful communication +4. **Given** the Modbus device responds but with CRC errors, **When** I view health status, **Then** I see "Degraded - Communication Errors" with error count + +--- + +### User Story 5 - Relay Labeling (Priority: P3) + +As a user, I want to assign custom labels to each relay (e.g., "Garage Light", "Water Pump") so I can identify relays by purpose instead of numbers. + +**Why this priority**: Usability enhancement - makes system more intuitive for production use. Not required for MVP but improves long-term user experience. + +**Independent Test**: Can be tested by assigning a label to relay #1, refreshing the page, and verifying the label persists. Delivers value for multi-relay installations without requiring other stories. + +**Acceptance Scenarios**: + +1. **Given** I am viewing relay #3, **When** I click "Edit Label" and enter "Office Fan", **Then** relay #3 displays "Office Fan (Relay 3)" +2. **Given** relay #7 has label "Water Pump", **When** I refresh the page, **Then** relay #7 still shows "Water Pump (Relay 7)" +3. **Given** I have labeled multiple relays, **When** I toggle a relay by label, **Then** the correct physical relay responds +4. **Given** two relays have similar labels, **When** I search for a label, **Then** both matching relays are highlighted + +--- + +### Edge Cases + +- **Network Partition**: What happens when the Raspberry Pi loses connectivity to the Modbus device mid-operation? + - Backend marks device unhealthy, frontend displays error state, pending operations fail gracefully with clear error messages + +- **Concurrent Control**: How does system handle multiple users toggling the same relay simultaneously? + - Last-write-wins semantics, each client receives updated state via polling within 2 seconds + +- **Modbus Timeout**: What happens when a relay command times out? + - Backend retries once automatically, if retry fails, returns error to frontend with clear timeout message + +- **Partial Bulk Failure**: What happens when "All ON" command succeeds for 7 relays but relay #4 fails? + - Frontend displays partial success with list of failed relays, successful relays remain ON, user can retry failed relays individually + +- **Rapid Toggle Requests**: How does system handle user clicking toggle button repeatedly in quick succession? + - Frontend debounces clicks (500ms), backend queues commands serially, prevents command flooding + +- **Device Firmware Mismatch**: What happens if relay device firmware version is incompatible? + - Backend logs firmware version, health check displays warning if version is untested, system attempts normal operation with degraded status + +- **State Inconsistency**: What happens if Modbus read shows relay state different from expected state after write? + - Backend logs inconsistency, frontend displays actual state (read value), user sees visual indication of unexpected state + +- **Browser Compatibility**: How does frontend handle older browsers without modern JavaScript features? + - Vue.js build targets ES2015+, displays graceful error message on IE11 and older, works on all modern browsers (Chrome, Firefox, Safari, Edge) + +## Requirements *(mandatory)* + +### Functional Requirements + +#### Backend - Modbus Integration + +- **FR-001**: System MUST establish Modbus RTU over TCP connection to relay device on configurable IP and port (default: device IP, port 502) +- **FR-002**: System MUST use Modbus function code 0x01 (Read Coils) to read all 8 relay states (addresses 0-7) +- **FR-003**: System MUST use Modbus function code 0x05 (Write Single Coil) to toggle individual relays +- **FR-004**: System MUST use Modbus function code 0x0F (Write Multiple Coils) for bulk operations (All ON/All OFF) +- **FR-005**: System MUST validate Modbus CRC16 checksums on all received messages +- **FR-006**: System MUST timeout Modbus operations after 3 seconds +- **FR-007**: System MUST retry failed Modbus commands exactly once before returning error +- **FR-008**: System MUST handle Modbus exception codes (0x01-0x04) and map to user-friendly error messages +- **FR-009**: System MUST use tokio-modbus library version 0.17.0 for Modbus protocol implementation +- **FR-010**: System MUST support configurable Modbus device address (default: 0x01) + +#### Backend - REST API + +- **FR-011**: System MUST expose `GET /api/relays` endpoint returning array of all relay states (id, state, label) +- **FR-012**: System MUST expose `POST /api/relays/{id}/toggle` endpoint to toggle relay {id} (id: 1-8) +- **FR-013**: System MUST expose `POST /api/relays/bulk` endpoint accepting `{"operation": "all_on" | "all_off"}` +- **FR-014**: System MUST expose `GET /api/health` endpoint returning device status (healthy/unhealthy, firmware version, last_contact timestamp) +- **FR-015**: System MUST expose `PUT /api/relays/{id}/label` endpoint to update relay label (max 50 characters) +- **FR-016**: System MUST return HTTP 200 for successful operations with JSON response body +- **FR-017**: System MUST return HTTP 500 for Modbus communication failures with error details +- **FR-018**: System MUST return HTTP 400 for invalid request parameters (e.g., relay id out of range) +- **FR-019**: System MUST return HTTP 504 for Modbus timeout errors +- **FR-020**: System MUST include OpenAPI 3.0 specification accessible at `/api/specs` +- **FR-021**: System MUST apply rate limiting middleware (100 requests/minute per IP) +- **FR-022**: System MUST apply CORS middleware allowing all origins (local network deployment) +- **FR-023**: System MUST start successfully even if Modbus device is unreachable at startup, marking device as unhealthy +- **FR-024**: System MUST persist relay labels to configuration file (YAML) for persistence across restarts + +#### Frontend - User Interface + +- **FR-025**: UI MUST display all 8 relays in a grid layout with clear ON/OFF state indication (color-coded) +- **FR-026**: UI MUST provide toggle button for each relay that triggers `POST /api/relays/{id}/toggle` +- **FR-027**: UI MUST provide "All ON" and "All OFF" buttons that trigger `POST /api/relays/bulk` +- **FR-028**: UI MUST poll `GET /api/relays` every 2 seconds to refresh relay states +- **FR-029**: UI MUST display loading indicator while relay operations are in progress +- **FR-030**: UI MUST display error messages when API calls fail, with specific error text from backend +- **FR-031**: UI MUST display health status section showing device connectivity and firmware version +- **FR-032**: UI MUST display "Unhealthy - Device Unreachable" message when backend reports device unreachable +- **FR-033**: UI MUST provide inline label editing for each relay (click to edit, save on blur/enter) +- **FR-034**: UI MUST be responsive and functional on desktop (>1024px), tablet (768-1024px), and mobile (320-767px) +- **FR-035**: UI MUST disable toggle buttons and show error when device is unhealthy +- **FR-036**: UI MUST show timestamp of last successful state update +- **FR-037**: UI MUST debounce toggle button clicks to 500ms to prevent rapid repeated requests + +### Non-Functional Requirements + +#### Performance + +- **NFR-001**: System MUST respond to `GET /api/relays` within 100ms (excluding Modbus communication time) +- **NFR-002**: System MUST complete relay toggle operations within 1 second (including Modbus communication) +- **NFR-003**: System MUST handle 10 concurrent users without performance degradation +- **NFR-004**: Frontend MUST render initial page load within 2 seconds on 10 Mbps connection + +#### Reliability + +- **NFR-005**: System MUST maintain 95% successful operation rate for Modbus commands +- **NFR-006**: System MUST recover automatically from temporary Modbus connection loss within 5 seconds +- **NFR-007**: System MUST log all Modbus errors with structured logging (timestamp, error code, relay id) +- **NFR-008**: Backend MUST continue serving health and API endpoints even when Modbus device is unreachable + +#### Security + +- **NFR-009**: Backend MUST run on local network with Modbus device (no direct public internet exposure) +- **NFR-010**: System MUST NOT implement application-level authentication (handled by Traefik middleware with Authelia) +- **NFR-011**: Frontend-to-backend communication MUST use HTTPS via Traefik reverse proxy (backend itself runs HTTP, Traefik handles TLS termination) +- **NFR-012**: System MUST validate all API inputs to prevent injection attacks +- **NFR-013-SEC**: Backend-to-Modbus communication uses unencrypted Modbus TCP (local network only) + +#### Maintainability + +- **NFR-014**: Code MUST achieve >90% test coverage for domain logic (relay control, Modbus abstraction) +- **NFR-015**: System MUST follow hexagonal architecture with trait-based Modbus abstraction for testability +- **NFR-016**: System MUST use Type-Driven Development (TyDD) with newtype pattern for RelayId, RelayState, ModbusCommand +- **NFR-017**: All public APIs MUST have OpenAPI documentation +- **NFR-018-MAINT**: Code MUST pass `cargo clippy` with zero warnings on all, pedantic, and nursery lints + +#### Observability + +- **NFR-019**: System MUST emit structured logs at all architectural boundaries (API, Modbus) +- **NFR-020**: System MUST log relay state changes with timestamp, relay id, old state, new state +- **NFR-021**: System MUST expose Prometheus metrics endpoint at `/metrics` (request count, error rate, Modbus latency) +- **NFR-022**: System MUST log startup configuration (Modbus host/port, relay count) at INFO level + +### Key Entities + +- **Relay**: Represents a single relay channel (1-8) with properties: id (1-8), state (ON/OFF), label (optional, max 50 chars) +- **RelayState**: Enum representing ON or OFF state +- **RelayId**: Newtype wrapping u8 with validation (1-8 range), implements TyDD pattern +- **ModbusCommand**: Enum representing Modbus operations (ReadCoils, WriteSingleCoil, WriteMultipleCoils) +- **DeviceHealth**: Struct representing Modbus device status (`healthy: bool`, `firmware_version: Option`, `last_contact: Option`) +- **RelayLabel**: Newtype wrapping String with validation (max 50 chars, alphanumeric + spaces) + +## Success Criteria *(mandatory)* + +### Measurable Outcomes + +- **SC-001**: Users can view all 8 relay states within 2 seconds of loading the web interface +- **SC-002**: Users can toggle any relay with physical relay response within 1 second of button click +- **SC-003**: System achieves 95% successful operation rate for relay toggle commands over 24-hour period +- **SC-004**: Web interface is accessible and functional on Chrome, Firefox, Safari, and Edge browsers +- **SC-005**: Users can successfully use the interface on mobile devices (portrait and landscape) +- **SC-006**: Backend starts successfully and serves health endpoint even when Modbus device is disconnected +- **SC-007**: Frontend displays clear error message within 2 seconds when Modbus device is unhealthy +- **SC-008**: System supports 10 concurrent users performing toggle operations without performance degradation +- **SC-009**: All 8 relays turn ON within 2 seconds when "All ON" button is clicked +- **SC-010**: Domain logic achieves >90% test coverage as measured by `cargo tarpaulin` + +### User Experience Goals + +- **UX-001**: Non-technical users can control relays without referring to documentation +- **UX-002**: Error messages clearly explain problem and suggest remediation (e.g., "Device unreachable - check network connection") +- **UX-003**: Relay labels make it intuitive to identify relay purpose without memorizing numbers + +## Dependencies & Assumptions + +### Dependencies + +- **Hardware**: 8-channel Modbus POE ETH Relay device (documented in `docs/Modbus_POE_ETH_Relay.md`) +- **Network**: Local network connectivity between Raspberry Pi and relay device +- **Libraries**: tokio-modbus 0.17.0, Poem 3.1, poem-openapi 5.1, Tokio 1.48 +- **Frontend**: Vue.js 3.x, TypeScript, Vite build tool +- **Backend Deployment**: Raspberry Pi (or equivalent) running Linux with Docker +- **Frontend Deployment**: Cloudflare Pages (or equivalent static hosting) +- **Reverse Proxy**: Traefik with Authelia middleware for authentication + +### Assumptions + +- **ASM-001**: Relay device uses Modbus RTU over TCP protocol (per hardware documentation) +- **ASM-002**: Relay device supports standard Modbus function codes 0x01, 0x05, 0x0F +- **ASM-003**: Local network provides reliable connectivity (>95% uptime) +- **ASM-004**: Traefik reverse proxy with Authelia middleware provides adequate authentication +- **ASM-005**: Single user will control relays at a time in most scenarios (concurrent control is edge case) +- **ASM-006**: Relay device exposes 8 coils at Modbus addresses 0-7 +- **ASM-007**: Device firmware is compatible with tokio-modbus library +- **ASM-008**: Raspberry Pi has sufficient resources (CPU, memory) to run Rust backend +- **ASM-009**: Cloudflare Pages or equivalent CDN provides fast frontend delivery +- **ASM-010**: Frontend can reach backend via HTTPS through Traefik reverse proxy + +## Out of Scope + +The following capabilities are explicitly excluded from this specification: + +- **Application-Level Authentication**: No user login, role-based access control, or API keys (handled by Traefik/Authelia) +- **Historical Data**: No database, state logging, or historical relay state tracking +- **Scheduling**: No timer-based relay control or automation rules +- **Multiple Devices**: No support for controlling multiple relay devices simultaneously +- **Advanced Modbus Features**: No support for flash modes, timing operations, or device reconfiguration +- **Mobile Native Apps**: Web interface only, no iOS/Android native applications +- **Cloud Backend**: Backend runs on local network (Raspberry Pi), frontend served from Cloudflare Pages +- **Real-time Updates**: HTTP polling only (no WebSocket, Server-Sent Events) + +## Risks & Mitigations + +| Risk | Impact | Probability | Mitigation | +|--------------------------------------------|--------|-------------|------------------------------------------------------------------------| +| Modbus device firmware incompatibility | High | Low | Test with actual hardware early, document compatible firmware versions | +| Network latency exceeds timeout thresholds | Medium | Medium | Make timeouts configurable, implement adaptive retry logic | +| Concurrent control causes state conflicts | Low | Medium | Implement last-write-wins with clear state refresh in UI | +| Frontend polling overwhelms backend | Low | Low | Rate limit API endpoints, make poll interval configurable | +| Raspberry Pi resource exhaustion | Medium | Low | Benchmark with 10 concurrent users, optimize Modbus connection pooling | + +## Revision History + +| Version | Date | Author | Changes | +|---------|------|--------|---------| +| 1.0 | 2025-12-28 | Business Analyst Agent | Initial specification based on user input | +| 1.1 | 2025-12-28 | User Clarification | FR-023 clarified: Backend starts successfully even when device unhealthy, frontend displays error (part of Health story) | +| 1.2 | 2025-12-29 | User Clarification | Architecture updated: Frontend on Cloudflare Pages, backend on RPi behind Traefik with Authelia. Updated NFR-009 to NFR-013-SEC to reflect HTTPS via reverse proxy, authentication via Traefik middleware | diff --git a/specs/001-modbus-relay-control/tasks.md b/specs/001-modbus-relay-control/tasks.md new file mode 100644 index 0000000..2509b5d --- /dev/null +++ b/specs/001-modbus-relay-control/tasks.md @@ -0,0 +1,1153 @@ +# Implementation Tasks: Modbus Relay Control System + +**Feature**: 001-modbus-relay-control +**Total Tasks**: 94 tasks across 8 phases +**MVP Delivery**: Phase 4 complete (Task 49) +**Parallelizable Tasks**: 35 tasks marked with `[P]` +**Approach**: Type-Driven Development (TyDD) + Test-Driven Development (TDD), Backend API first + +--- + +## Phase 1: Setup & Foundation (0.5 days) + +**Purpose**: Initialize project dependencies and directory structure + +- [ ] **T001** [Setup] [TDD] Add Rust dependencies to Cargo.toml + - Add: tokio-modbus = "0.17.0", sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite"] }, mockall = "0.13", async-trait = "0.1" + - **Test**: cargo check passes + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T002** [P] [Setup] [TDD] Create module structure in src/ + - Create: src/domain/, src/application/, src/infrastructure/, src/presentation/ + - **Test**: Module declarations compile without errors + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T003** [P] [Setup] [TDD] Update settings.rs with Modbus configuration + - Add ModbusSettings struct with host, port, slave_id, timeout_secs fields + - Add RelaySettings struct with label_max_length field + - Update Settings struct to include modbus and relay fields + - **Test**: Settings loads from settings/base.yaml with test Modbus config + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T004** [P] [Setup] [TDD] Create settings/base.yaml with Modbus defaults + - Add modbus section: host: "192.168.1.100", port: 502, slave_id: 1, timeout_secs: 3 + - Add relay section: label_max_length: 50 + - **Test**: Settings::new() loads config without errors + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T005** [P] [Setup] [TDD] Add SQLite schema file + - Create infrastructure/persistence/schema.sql with relay_labels table + - Table: relay_labels (relay_id INTEGER PRIMARY KEY CHECK(relay_id BETWEEN 1 AND 8), label TEXT NOT NULL CHECK(length(label) <= 50)) + - **Test**: Schema file syntax is valid SQL + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T006** [P] [Setup] [TDD] Initialize SQLite database module + - Create infrastructure/persistence/mod.rs + - Create infrastructure/persistence/sqlite_repository.rs with SqliteRelayLabelRepository struct + - Implement SqliteRelayLabelRepository::new(path) using SqlitePool + - **Test**: SqliteRelayLabelRepository::in_memory() creates in-memory DB with schema + - **Complexity**: Medium | **Uncertainty**: Low + +- [ ] **T007** [P] [Setup] [TDD] Add frontend project scaffolding + - Create frontend/ directory with Vite + Vue 3 + TypeScript + - Run: npm create vite@latest frontend -- --template vue-ts + - Install: axios, @types/node + - **Test**: npm run dev starts frontend dev server + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T008** [P] [Setup] [TDD] Generate TypeScript API client from OpenAPI + - Add poem-openapi spec generation in startup.rs + - Generate frontend/src/api/client.ts from OpenAPI spec + - **Test**: TypeScript client compiles without errors + - **Complexity**: Medium | **Uncertainty**: Medium + - **Note**: May need manual adjustments to generated code + +--- + +## Phase 2: Domain Layer - Type-Driven Development (1 day) + +**Purpose**: Build domain types with 100% test coverage, bottom-to-top + +**⚠️ TDD CRITICAL**: Write failing tests FIRST for every type, then implement + +- [ ] **T009** [US1] [TDD] Write tests for RelayId newtype + - Test: RelayId::new(1) → Ok(RelayId(1)) + - Test: RelayId::new(8) → Ok(RelayId(8)) + - Test: RelayId::new(0) → Err(InvalidRelayId) + - Test: RelayId::new(9) → Err(InvalidRelayId) + - Test: RelayId::as_u8() returns inner value + - **File**: src/domain/relay.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T010** [US1] [TDD] Implement RelayId newtype with validation + - #[repr(transparent)] newtype wrapping u8 + - Constructor validates 1..=8 range + - Implement Display, Debug, Clone, Copy, PartialEq, Eq + - **File**: src/domain/relay.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T011** [P] [US1] [TDD] Write tests for RelayState enum + - Test: RelayState::On → serializes to "on" + - Test: RelayState::Off → serializes to "off" + - Test: Parse "on"/"off" from strings + - **File**: src/domain/relay.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T012** [P] [US1] [TDD] Implement RelayState enum + - Enum: On, Off + - Implement Display, Debug, Clone, Copy, PartialEq, Eq, serde::Serialize/Deserialize + - **File**: src/domain/relay.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T013** [US1] [TDD] Write tests for Relay aggregate + - Test: Relay::new(RelayId(1), RelayState::Off, None) creates relay + - Test: relay.toggle() flips state + - Test: relay.turn_on() sets state to On + - Test: relay.turn_off() sets state to Off + - **File**: src/domain/relay.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T014** [US1] [TDD] Implement Relay aggregate + - Struct: Relay { id: RelayId, state: RelayState, label: Option } + - Methods: new(), toggle(), turn_on(), turn_off(), state(), label() + - **File**: src/domain/relay.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T015** [P] [US4] [TDD] Write tests for RelayLabel newtype + - Test: RelayLabel::new("Pump") → Ok + - Test: RelayLabel::new("A".repeat(50)) → Ok + - Test: RelayLabel::new("") → Err(EmptyLabel) + - Test: RelayLabel::new("A".repeat(51)) → Err(LabelTooLong) + - **File**: src/domain/relay.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T016** [P] [US4] [TDD] Implement RelayLabel newtype + - #[repr(transparent)] newtype wrapping String + - Constructor validates 1..=50 length + - Implement Display, Debug, Clone, PartialEq, Eq + - **File**: src/domain/relay.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T017** [US1] [TDD] Write tests for ModbusAddress type + - Test: ModbusAddress::from(RelayId(1)) → ModbusAddress(0) + - Test: ModbusAddress::from(RelayId(8)) → ModbusAddress(7) + - **File**: src/domain/modbus.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T018** [US1] [TDD] Implement ModbusAddress type with From + - #[repr(transparent)] newtype wrapping u16 + - Implement From with offset: user 1-8 → Modbus 0-7 + - **File**: src/domain/modbus.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T019** [US3] [TDD] Write tests and implement HealthStatus enum + - Enum: Healthy, Degraded { consecutive_errors: u32 }, Unhealthy { reason: String } + - Test transitions between states + - **File**: src/domain/health.rs + - **Complexity**: Medium | **Uncertainty**: Low + +**Checkpoint**: Domain types complete with 100% test coverage + +--- + +## Phase 3: Infrastructure Layer (2 days) + +**Purpose**: Implement Modbus client, mocks, and persistence + +- [ ] **T020** [P] [US1] [TDD] Write tests for MockRelayController + - Test: read_state() returns mocked state + - Test: write_state() updates mocked state + - Test: read_all() returns 8 relays in known state + - **File**: src/infrastructure/modbus/mock_controller.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T021** [P] [US1] [TDD] Implement MockRelayController + - Struct with Arc>> + - Implement RelayController trait with in-memory state + - **File**: src/infrastructure/modbus/mock_controller.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T022** [US1] [TDD] Define RelayController trait + - async fn read_state(&self, id: RelayId) → Result + - async fn write_state(&self, id: RelayId, state: RelayState) → Result<(), ControllerError> + - async fn read_all(&self) → Result, ControllerError> + - async fn write_all(&self, state: RelayState) → Result<(), ControllerError> + - **File**: src/infrastructure/modbus/controller.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T023** [P] [US1] [TDD] Define ControllerError enum + - Variants: ConnectionError(String), Timeout(u64), ModbusException(String), InvalidRelayId(u8) + - Implement std::error::Error, Display, Debug + - Use thiserror derive macros + - **File**: src/infrastructure/modbus/error.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T024** [US1] [TDD] Write tests for ModbusRelayController + - **REQUIRES HARDWARE/MOCK**: Integration test with tokio_modbus::test utilities + - Test: Connection succeeds with valid config + - Test: read_state() returns correct coil value + - Test: write_state() sends correct Modbus command + - **File**: src/infrastructure/modbus/modbus_controller.rs + - **Complexity**: High → DECOMPOSED below + - **Uncertainty**: High + +--- + +### T025: ModbusRelayController Implementation (DECOMPOSED) + +**Complexity**: High → Broken into 6 sub-tasks +**Uncertainty**: High +**Rationale**: Nested Result handling, Arc synchronization, timeout wrapping + +- [ ] **T025a** [US1] [TDD] Implement ModbusRelayController connection setup + - Struct: ModbusRelayController { ctx: Arc>, timeout_duration: Duration } + - Constructor: new(host, port, slave_id, timeout_secs) → Result + - Use tokio_modbus::client::tcp::connect_slave() + - **File**: src/infrastructure/modbus/modbus_controller.rs + - **Complexity**: Medium | **Uncertainty**: Medium + + **Pseudocode**: + ```rust + pub struct ModbusRelayController { + ctx: Arc>, + timeout_duration: Duration, + } + + impl ModbusRelayController { + pub async fn new(host: &str, port: u16, slave_id: u8, timeout_secs: u64) + -> Result + { + use tokio_modbus::prelude::*; + + let socket_addr = format!("{}:{}", host, port) + .parse() + .map_err(|e| ControllerError::ConnectionError(format!("Invalid address: {}", e)))?; + + let ctx = tcp::connect_slave(socket_addr, Slave(slave_id)) + .await + .map_err(|e| ControllerError::ConnectionError(e.to_string()))?; + + Ok(Self { + ctx: Arc::new(Mutex::new(ctx)), + timeout_duration: Duration::from_secs(timeout_secs), + }) + } + } + ``` + + **TDD Checklist** (write these tests FIRST): + - [ ] Test: new() with valid config connects successfully + - [ ] Test: new() with invalid host returns ConnectionError + - [ ] Test: new() stores correct timeout_duration + +- [ ] **T025b** [US1] [TDD] Implement timeout-wrapped read_coils helper + - Private method: read_coils_with_timeout(addr: u16, count: u16) → Result, ControllerError> + - Wrap ctx.read_coils() with tokio::time::timeout() + - Handle nested Result: timeout → io::Error → Modbus Exception + - **File**: src/infrastructure/modbus/modbus_controller.rs + - **Complexity**: Medium | **Uncertainty**: Medium + + **Pseudocode** (CRITICAL PATTERN): + ```rust + async fn read_coils_with_timeout(&self, addr: u16, count: u16) + -> Result, ControllerError> + { + use tokio::time::timeout; + + let ctx = self.ctx.lock().await; + + // tokio-modbus returns nested Results: Result, io::Error> + // We must unwrap 3 layers: timeout → io::Error → Modbus Exception + + let result = timeout(self.timeout_duration, ctx.read_coils(addr, count)) + .await // Result, Exception>, io::Error>, Elapsed> + .map_err(|_| ControllerError::Timeout(self.timeout_duration.as_secs()))? // Handle timeout + .map_err(|e| ControllerError::ConnectionError(e.to_string()))? // Handle io::Error + .map_err(|e| ControllerError::ModbusException(format!("{:?}", e)))?; // Handle Exception + + Ok(result) + } + ``` + + **TDD Checklist**: + - [ ] Test: read_coils_with_timeout() returns coil values on success + - [ ] Test: read_coils_with_timeout() returns Timeout error when operation exceeds timeout + - [ ] Test: read_coils_with_timeout() returns ConnectionError on io::Error + - [ ] Test: read_coils_with_timeout() returns ModbusException on protocol error + +- [ ] **T025c** [US1] [TDD] Implement timeout-wrapped write_single_coil helper + - Private method: write_single_coil_with_timeout(addr: u16, value: bool) → Result<(), ControllerError> + - Similar nested Result handling as T025b + - **File**: src/infrastructure/modbus/modbus_controller.rs + - **Complexity**: Low | **Uncertainty**: Low + + **Pseudocode**: + ```rust + async fn write_single_coil_with_timeout(&self, addr: u16, value: bool) + -> Result<(), ControllerError> + { + use tokio::time::timeout; + + let ctx = self.ctx.lock().await; + + timeout(self.timeout_duration, ctx.write_single_coil(addr, value)) + .await + .map_err(|_| ControllerError::Timeout(self.timeout_duration.as_secs()))? + .map_err(|e| ControllerError::ConnectionError(e.to_string()))? + .map_err(|e| ControllerError::ModbusException(format!("{:?}", e)))?; + + Ok(()) + } + ``` + + **TDD Checklist**: + - [ ] Test: write_single_coil_with_timeout() succeeds for valid write + - [ ] Test: write_single_coil_with_timeout() returns Timeout on slow device + - [ ] Test: write_single_coil_with_timeout() returns appropriate error on failure + +- [ ] **T025d** [US1] [TDD] Implement RelayController::read_state() using helpers + - Convert RelayId → ModbusAddress (0-based) + - Call read_coils_with_timeout(addr, 1) + - Convert bool → RelayState + - **File**: src/infrastructure/modbus/modbus_controller.rs + - **Complexity**: Low | **Uncertainty**: Low + + **Pseudocode**: + ```rust + #[async_trait] + impl RelayController for ModbusRelayController { + async fn read_state(&self, id: RelayId) -> Result { + let addr = ModbusAddress::from(id).as_u16(); + let coils = self.read_coils_with_timeout(addr, 1).await?; + + Ok(if coils[0] { RelayState::On } else { RelayState::Off }) + } + } + ``` + + **TDD Checklist**: + - [ ] Test: read_state(RelayId(1)) returns On when coil is true + - [ ] Test: read_state(RelayId(1)) returns Off when coil is false + - [ ] Test: read_state() propagates ControllerError from helper + +- [ ] **T025e** [US1] [TDD] Implement RelayController::write_state() using helpers + - Convert RelayId → ModbusAddress + - Convert RelayState → bool (On=true, Off=false) + - Call write_single_coil_with_timeout() + - **File**: src/infrastructure/modbus/modbus_controller.rs + - **Complexity**: Low | **Uncertainty**: Low + + **Pseudocode**: + ```rust + async fn write_state(&self, id: RelayId, state: RelayState) -> Result<(), ControllerError> { + let addr = ModbusAddress::from(id).as_u16(); + let value = matches!(state, RelayState::On); + self.write_single_coil_with_timeout(addr, value).await + } + ``` + + **TDD Checklist**: + - [ ] Test: write_state(RelayId(1), RelayState::On) writes true to coil + - [ ] Test: write_state(RelayId(1), RelayState::Off) writes false to coil + +- [ ] **T025f** [US1] [TDD] Implement RelayController::read_all() and write_all() + - read_all(): Call read_coils_with_timeout(0, 8), map to Vec<(RelayId, RelayState)> + - write_all(): Loop over RelayId 1-8, call write_state() for each + - Add firmware_version() method (read holding register 0x9999, optional) + - **File**: src/infrastructure/modbus/modbus_controller.rs + - **Complexity**: Medium | **Uncertainty**: Low + + **Pseudocode**: + ```rust + async fn read_all(&self) -> Result, ControllerError> { + let coils = self.read_coils_with_timeout(0, 8).await?; + + let mut relays = Vec::new(); + for (idx, &coil_value) in coils.iter().enumerate() { + let relay_id = RelayId::new((idx + 1) as u8)?; + let state = if coil_value { RelayState::On } else { RelayState::Off }; + relays.push((relay_id, state)); + } + Ok(relays) + } + + async fn write_all(&self, state: RelayState) -> Result<(), ControllerError> { + for i in 1..=8 { + let relay_id = RelayId::new(i)?; + self.write_state(relay_id, state).await?; + } + Ok(()) + } + ``` + + **TDD Checklist**: + - [ ] Test: read_all() returns 8 relay states + - [ ] Test: write_all(RelayState::On) turns all relays on + - [ ] Test: write_all(RelayState::Off) turns all relays off + +--- + +- [ ] **T026** [US1] [TDD] Integration test with real hardware (optional) + - **REQUIRES PHYSICAL DEVICE**: Test against actual Modbus relay at configured IP + - Skip if device unavailable, rely on MockRelayController for CI + - **File**: tests/integration/modbus_hardware_test.rs + - **Complexity**: Medium | **Uncertainty**: High + - **Note**: Use #[ignore] attribute, run with cargo test -- --ignored + +- [ ] **T027** [P] [US4] [TDD] Write tests for RelayLabelRepository trait + - Test: get_label(RelayId(1)) → Option + - Test: set_label(RelayId(1), label) → Result<(), RepositoryError> + - Test: delete_label(RelayId(1)) → Result<(), RepositoryError> + - **File**: src/infrastructure/persistence/label_repository.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T028** [P] [US4] [TDD] Implement SQLite RelayLabelRepository + - Implement get_label(), set_label(), delete_label() using SQLx + - Use sqlx::query! macros for compile-time SQL verification + - **File**: src/infrastructure/persistence/sqlite_label_repository.rs + - **Complexity**: Medium | **Uncertainty**: Low + +- [ ] **T029** [US4] [TDD] Write tests for in-memory mock LabelRepository + - For testing without SQLite dependency + - **File**: src/infrastructure/persistence/mock_label_repository.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T030** [US4] [TDD] Implement in-memory mock LabelRepository + - HashMap-based implementation + - **File**: src/infrastructure/persistence/mock_label_repository.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T031** [US3] [TDD] Write tests for HealthMonitor service + - Test: track_success() transitions Degraded → Healthy + - Test: track_failure() transitions Healthy → Degraded → Unhealthy + - **File**: src/application/health_monitor.rs + - **Complexity**: Medium | **Uncertainty**: Low + +- [ ] **T032** [US3] [TDD] Implement HealthMonitor service + - Track consecutive errors, transition states per FR-020, FR-021 + - **File**: src/application/health_monitor.rs + - **Complexity**: Medium | **Uncertainty**: Low + +**Checkpoint**: Infrastructure layer complete with trait abstractions + +--- + +## Phase 4: US1 - Monitor & Toggle Relay States (MVP) (2 days) + +**Goal**: View current state of all 8 relays + toggle individual relay on/off + +**Independent Test**: GET /api/relays returns 8 relays, POST /api/relays/{id}/toggle changes state + +### Application Layer + +- [ ] **T033** [US1] [TDD] Write tests for ToggleRelayUseCase + - Test: execute(RelayId(1)) toggles relay state via controller + - Test: execute() returns error if controller fails + - **File**: src/application/use_cases/toggle_relay.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T034** [US1] [TDD] Implement ToggleRelayUseCase + - Orchestrate: read current state → toggle → write new state + - **File**: src/application/use_cases/toggle_relay.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T035** [P] [US1] [TDD] Write tests for GetAllRelaysUseCase + - Test: execute() returns all 8 relays with states + - **File**: src/application/use_cases/get_all_relays.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T036** [P] [US1] [TDD] Implement GetAllRelaysUseCase + - Call controller.read_all(), map to domain Relay objects + - **File**: src/application/use_cases/get_all_relays.rs + - **Complexity**: Low | **Uncertainty**: Low + +### Presentation Layer (Backend API) + +- [ ] **T037** [US1] [TDD] Define RelayDto in presentation layer + - Fields: id (u8), state ("on"/"off"), label (Option) + - Implement From for RelayDto + - **File**: src/presentation/dto/relay_dto.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T038** [US1] [TDD] Define API error responses + - ApiError enum with status codes and messages + - Implement poem::error::ResponseError + - **File**: src/presentation/error.rs + - **Complexity**: Low | **Uncertainty**: Low + +--- + +### T039: Dependency Injection Setup (DECOMPOSED) + +**Complexity**: High → Broken into 4 sub-tasks +**Uncertainty**: Medium +**Rationale**: Graceful degradation (FR-023), conditional mock/real controller + +- [ ] **T039a** [US1] [TDD] Create ModbusRelayController factory with retry and fallback + - Factory function: create_relay_controller(settings, use_mock) → Arc + - Retry 3 times with 2s backoff on connection failure + - Graceful degradation: fallback to MockRelayController if all retries fail (FR-023) + - **File**: src/infrastructure/modbus/factory.rs + - **Complexity**: Medium | **Uncertainty**: Medium + + **Pseudocode**: + ```rust + pub async fn create_relay_controller( + settings: &ModbusSettings, + use_mock: bool, + ) -> Arc { + if use_mock { + tracing::info!("Using MockRelayController (test mode)"); + return Arc::new(MockRelayController::new()); + } + + // Retry 3 times with 2s backoff + for attempt in 1..=3 { + match ModbusRelayController::new( + &settings.host, + settings.port, + settings.slave_id, + settings.timeout_secs, + ).await { + Ok(controller) => { + tracing::info!("Connected to Modbus device on attempt {}", attempt); + return Arc::new(controller); + } + Err(e) => { + tracing::warn!( + attempt, + error = %e, + "Failed to connect to Modbus device, retrying..." + ); + if attempt < 3 { + tokio::time::sleep(Duration::from_secs(2)).await; + } + } + } + } + + // Graceful degradation: fallback to MockRelayController + tracing::error!( + "Could not connect to Modbus device after 3 attempts, \ + using MockRelayController as fallback" + ); + Arc::new(MockRelayController::new()) + } + ``` + + **TDD Checklist**: + - [ ] Test: use_mock=true returns MockRelayController immediately + - [ ] Test: Successful connection returns ModbusRelayController + - [ ] Test: Connection failure after 3 retries returns MockRelayController + - [ ] Test: Retry delays are 2 seconds between attempts + - [ ] Test: Logs appropriate messages for each connection attempt + +- [ ] **T039b** [US4] [TDD] Create RelayLabelRepository factory + - Factory function: create_label_repository(db_path, use_mock) → Arc + - If use_mock: return MockLabelRepository + - Else: return SQLiteLabelRepository connected to db_path + - **File**: src/infrastructure/persistence/factory.rs + - **Complexity**: Low | **Uncertainty**: Low + + **Pseudocode**: + ```rust + pub fn create_label_repository( + db_path: &str, + use_mock: bool, + ) -> Result, RepositoryError> { + if use_mock { + tracing::info!("Using MockLabelRepository (test mode)"); + return Ok(Arc::new(MockLabelRepository::new())); + } + + let db = Database::new(db_path)?; + Ok(Arc::new(SQLiteLabelRepository::new(db))) + } + ``` + + **TDD Checklist**: + - [ ] Test: use_mock=true returns MockLabelRepository + - [ ] Test: use_mock=false returns SQLiteLabelRepository + - [ ] Test: Invalid db_path returns RepositoryError + +- [ ] **T039c** [US1] [TDD] Wire dependencies in Application::build() + - Determine test mode: cfg!(test) || env::var("CI").is_ok() + - Call create_relay_controller() and create_label_repository() + - Pass dependencies to RelayApi::new() + - **File**: src/startup.rs + - **Complexity**: Medium | **Uncertainty**: Low + + **Pseudocode**: + ```rust + impl Application { + pub async fn build(settings: Settings) -> Result { + let use_mock = cfg!(test) || std::env::var("CI").is_ok(); + + // Create dependencies + let relay_controller = create_relay_controller(&settings.modbus, use_mock).await; + let label_repository = create_label_repository(&settings.database.path, use_mock)?; + + // Create API with dependencies + let relay_api = RelayApi::new(relay_controller, label_repository); + + // Build OpenAPI service + let api_service = OpenApiService::new(relay_api, "STA API", "1.0.0") + .server("http://localhost:8080"); + + let ui = api_service.swagger_ui(); + let spec = api_service.spec(); + + let app = Route::new() + .nest("/api", api_service) + .nest("/", ui) + .at("/openapi.json", poem::endpoint::make_sync(move |_| spec.clone())); + + Ok(Self { app, settings }) + } + } + ``` + + **TDD Checklist**: + - [ ] Test: Application::build() succeeds in test mode + - [ ] Test: Application::build() creates correct mock dependencies when CI=true + - [ ] Test: Application::build() creates real dependencies when not in test mode + +- [ ] **T039d** [US1] [TDD] Register RelayApi in route aggregator + - Add RelayApi to OpenAPI service + - Tag: "Relays" + - **File**: src/startup.rs + - **Complexity**: Low | **Uncertainty**: Low + + **TDD Checklist**: + - [ ] Test: OpenAPI spec includes /api/relays endpoints + - [ ] Test: Swagger UI renders Relays tag + +--- + +- [ ] **T040** [US1] [TDD] Write contract tests for GET /api/relays + - Test: Returns 200 with array of 8 RelayDto + - Test: Each relay has id 1-8, state, and optional label + - **File**: tests/contract/test_relay_api.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T041** [US1] [TDD] Implement GET /api/relays endpoint + - #[oai(path = "/relays", method = "get")] + - Call GetAllRelaysUseCase, map to RelayDto + - **File**: src/presentation/api/relay_api.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T042** [US1] [TDD] Write contract tests for POST /api/relays/{id}/toggle + - Test: Returns 200 with updated RelayDto + - Test: Returns 404 for id < 1 or id > 8 + - Test: State actually changes in controller + - **File**: tests/contract/test_relay_api.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T043** [US1] [TDD] Implement POST /api/relays/{id}/toggle endpoint + - #[oai(path = "/relays/:id/toggle", method = "post")] + - Parse id, call ToggleRelayUseCase, return updated state + - **File**: src/presentation/api/relay_api.rs + - **Complexity**: Low | **Uncertainty**: Low + +### Frontend Implementation + +- [ ] **T044** [P] [US1] [TDD] Create RelayDto TypeScript interface + - Generate from OpenAPI spec or manually define + - **File**: frontend/src/types/relay.ts + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T045** [P] [US1] [TDD] Create API client service + - getAllRelays(): Promise + - toggleRelay(id: number): Promise + - **File**: frontend/src/api/relayApi.ts + - **Complexity**: Low | **Uncertainty**: Low + +--- + +### T046: HTTP Polling Composable (DECOMPOSED) + +**Complexity**: High → Broken into 4 sub-tasks +**Uncertainty**: Medium +**Rationale**: Vue 3 lifecycle hooks, polling management, memory leak prevention + +- [ ] **T046a** [US1] [TDD] Create useRelayPolling composable structure + - Setup reactive refs: relays, isLoading, error, lastFetchTime + - Define interval variable and fetch function signature + - **File**: frontend/src/composables/useRelayPolling.ts + - **Complexity**: Low | **Uncertainty**: Low + + **Pseudocode**: + ```typescript + import { ref, Ref } from 'vue'; + import type { RelayDto } from '@/types/relay'; + + export function useRelayPolling(intervalMs: number = 2000) { + const relays: Ref = ref([]); + const isLoading = ref(true); + const error: Ref = ref(null); + const lastFetchTime: Ref = ref(null); + const isConnected = ref(false); + + let pollingInterval: number | null = null; + + // TODO: Implement fetchData, startPolling, stopPolling + + return { + relays, + isLoading, + error, + isConnected, + lastFetchTime, + refresh: fetchData, + startPolling, + stopPolling, + }; + } + ``` + + **TDD Checklist**: + - [ ] Test: Composable returns correct reactive refs + - [ ] Test: Initial state is loading=true, relays=[], error=null + +- [ ] **T046b** [US1] [TDD] Implement fetchData with parallel requests + - Fetch relays and health status in parallel using Promise.all + - Update reactive state on success + - Handle errors gracefully, set isConnected based on success + - **File**: frontend/src/composables/useRelayPolling.ts + - **Complexity**: Medium | **Uncertainty**: Low + + **Pseudocode**: + ```typescript + const fetchData = async () => { + try { + const [relayData, healthData] = await Promise.all([ + apiClient.getAllRelays(), + apiClient.getHealth(), + ]); + + relays.value = relayData.relays; + isConnected.value = healthData.status === 'healthy'; + lastFetchTime.value = new Date(); + error.value = null; + } catch (err: any) { + error.value = err.message || 'Failed to fetch relay data'; + isConnected.value = false; + console.error('Polling error:', err); + } finally { + isLoading.value = false; + } + }; + ``` + + **TDD Checklist**: + - [ ] Test: fetchData() updates relays on success + - [ ] Test: fetchData() sets error on API failure + - [ ] Test: fetchData() sets isLoading=false after completion + - [ ] Test: fetchData() updates lastFetchTime + +- [ ] **T046c** [US1] [TDD] Implement polling lifecycle with cleanup + - startPolling(): Fetch immediately, then setInterval + - stopPolling(): clearInterval and cleanup + - Use onMounted/onUnmounted for automatic lifecycle management + - **File**: frontend/src/composables/useRelayPolling.ts + - **Complexity**: Medium | **Uncertainty**: Low + + **Pseudocode**: + ```typescript + import { onMounted, onUnmounted } from 'vue'; + + const startPolling = () => { + if (pollingInterval !== null) return; // Already polling + + fetchData(); // Immediate first fetch + pollingInterval = window.setInterval(fetchData, intervalMs); + }; + + const stopPolling = () => { + if (pollingInterval !== null) { + clearInterval(pollingInterval); + pollingInterval = null; + } + }; + + // CRITICAL: Lifecycle cleanup to prevent memory leaks + onMounted(() => { + startPolling(); + }); + + onUnmounted(() => { + stopPolling(); + }); + ``` + + **TDD Checklist**: + - [ ] Test: startPolling() triggers immediate fetch + - [ ] Test: startPolling() sets interval for subsequent fetches + - [ ] Test: stopPolling() clears interval + - [ ] Test: onUnmounted hook calls stopPolling() + +- [ ] **T046d** [US1] [TDD] Add connection status tracking + - Track isConnected based on fetch success/failure + - Display connection status in UI + - **File**: frontend/src/composables/useRelayPolling.ts + - **Complexity**: Low | **Uncertainty**: Low + + **Pseudocode**: + ```typescript + // Already implemented in T046b, just ensure it's exposed + return { + relays, + isLoading, + error, + isConnected, // ← Connection status indicator + lastFetchTime, + refresh: fetchData, + startPolling, + stopPolling, + }; + ``` + + **TDD Checklist**: + - [ ] Test: isConnected is true after successful fetch + - [ ] Test: isConnected is false after failed fetch + +--- + +- [ ] **T047** [US1] [TDD] Create RelayCard component + - Props: relay (RelayDto) + - Display relay ID, state, label + - Emit toggle event on button click + - **File**: frontend/src/components/RelayCard.vue + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T048** [US1] [TDD] Create RelayGrid component + - Use useRelayPolling composable + - Render 8 RelayCard components + - Handle toggle events by calling API + - Display loading/error states + - **File**: frontend/src/components/RelayGrid.vue + - **Complexity**: Medium | **Uncertainty**: Low + +- [ ] **T049** [US1] [TDD] Integration test for US1 + - End-to-end test: Load page → see 8 relays → toggle relay 1 → verify state change + - Use Playwright or Cypress + - **File**: frontend/tests/e2e/relay-control.spec.ts + - **Complexity**: Medium | **Uncertainty**: Medium + +**Checkpoint**: US1 MVP complete - users can view and toggle individual relays + +--- + +## Phase 5: US2 - Bulk Relay Controls (0.5 days) + +**Goal**: Turn all relays on/off with single action + +**Independent Test**: POST /api/relays/all/on turns all 8 relays on + +- [ ] **T050** [US2] [TDD] Write tests for BulkControlUseCase + - Test: execute(BulkOperation::AllOn) turns all relays on + - Test: execute(BulkOperation::AllOff) turns all relays off + - **File**: src/application/use_cases/bulk_control.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T051** [US2] [TDD] Implement BulkControlUseCase + - Call controller.write_all(state) + - **File**: src/application/use_cases/bulk_control.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T052** [US2] [TDD] Define BulkOperation enum + - Variants: AllOn, AllOff + - **File**: src/domain/relay.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T053** [US2] [TDD] Write contract tests for POST /api/relays/all/on + - Test: Returns 200, all relays turn on + - **File**: tests/contract/test_relay_api.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T054** [US2] [TDD] Implement POST /api/relays/all/on endpoint + - Call BulkControlUseCase with AllOn + - **File**: src/presentation/api/relay_api.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T055** [P] [US2] [TDD] Write contract tests for POST /api/relays/all/off + - Test: Returns 200, all relays turn off + - **File**: tests/contract/test_relay_api.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T056** [P] [US2] [TDD] Implement POST /api/relays/all/off endpoint + - Call BulkControlUseCase with AllOff + - **File**: src/presentation/api/relay_api.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T057** [US2] [TDD] Add bulk control buttons to frontend + - Add "All On" and "All Off" buttons to RelayGrid component + - Call API endpoints and refresh relay states + - **File**: frontend/src/components/RelayGrid.vue + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T058** [US2] [TDD] Integration test for US2 + - Click "All On" → verify all 8 relays turn on + - Click "All Off" → verify all 8 relays turn off + - **File**: frontend/tests/e2e/bulk-control.spec.ts + - **Complexity**: Low | **Uncertainty**: Low + +**Checkpoint**: US2 complete - bulk controls functional + +--- + +## Phase 6: US3 - Health Monitoring (1 day) + +**Goal**: Display connection status and device health + +**Independent Test**: GET /api/health returns health status + +- [ ] **T059** [US3] [TDD] Write tests for GetHealthUseCase + - Test: Returns Healthy when controller is responsive + - Test: Returns Degraded after 3 consecutive errors + - Test: Returns Unhealthy after 10 consecutive errors + - **File**: src/application/use_cases/get_health.rs + - **Complexity**: Medium | **Uncertainty**: Low + +- [ ] **T060** [US3] [TDD] Implement GetHealthUseCase + - Use HealthMonitor to track controller status + - Return current HealthStatus + - **File**: src/application/use_cases/get_health.rs + - **Complexity**: Medium | **Uncertainty**: Low + +- [ ] **T061** [US3] [TDD] Define HealthDto + - Fields: status ("healthy"/"degraded"/"unhealthy"), consecutive_errors (optional), reason (optional) + - **File**: src/presentation/dto/health_dto.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T062** [US3] [TDD] Write contract tests for GET /api/health + - Test: Returns 200 with HealthDto + - **File**: tests/contract/test_health_api.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T063** [US3] [TDD] Implement GET /api/health endpoint + - Call GetHealthUseCase, map to HealthDto + - **File**: src/presentation/api/health_api.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T064** [P] [US3] [TDD] Add firmware version display (optional) + - If controller supports firmware_version(), display in UI + - **File**: frontend/src/components/DeviceInfo.vue + - **Complexity**: Low | **Uncertainty**: Medium + - **Note**: Device may not support this feature + +- [ ] **T065** [US3] [TDD] Create HealthIndicator component + - Display connection status with color-coded indicator + - Show firmware version if available + - **File**: frontend/src/components/HealthIndicator.vue + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T066** [US3] [TDD] Integrate HealthIndicator in RelayGrid + - Fetch health status in useRelayPolling composable + - Pass to HealthIndicator component + - **File**: frontend/src/components/RelayGrid.vue + - **Complexity**: Low | **Uncertainty**: Low + +**Checkpoint**: US3 complete - health monitoring visible + +--- + +## Phase 7: US4 - Relay Labeling (0.5 days) + +**Goal**: Set custom labels for each relay + +**Independent Test**: PUT /api/relays/{id}/label sets label, GET /api/relays returns label + +- [ ] **T067** [US4] [TDD] Write tests for SetLabelUseCase + - Test: execute(RelayId(1), "Pump") sets label + - Test: execute with empty label returns error + - Test: execute with 51-char label returns error + - **File**: src/application/use_cases/set_label.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T068** [US4] [TDD] Implement SetLabelUseCase + - Validate label with RelayLabel::new() + - Call label_repository.set_label() + - **File**: src/application/use_cases/set_label.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T069** [US4] [TDD] Write contract tests for PUT /api/relays/{id}/label + - Test: Returns 200, label is persisted + - Test: Returns 400 for invalid label + - **File**: tests/contract/test_relay_api.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T070** [US4] [TDD] Implement PUT /api/relays/{id}/label endpoint + - Parse id and label, call SetLabelUseCase + - **File**: src/presentation/api/relay_api.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T071** [US4] [TDD] Add label editing to RelayCard component + - Click label → show input field + - Submit → call PUT /api/relays/{id}/label + - **File**: frontend/src/components/RelayCard.vue + - **Complexity**: Medium | **Uncertainty**: Low + +- [ ] **T072** [US4] [TDD] Integration test for US4 + - Set label for relay 1 → refresh → verify label persists + - **File**: frontend/tests/e2e/relay-labeling.spec.ts + - **Complexity**: Low | **Uncertainty**: Low + +**Checkpoint**: US4 complete - relay labeling functional + +--- + +## Phase 8: Polish & Deployment (1 day) + +**Purpose**: Testing, documentation, and production readiness + +- [ ] **T073** [P] Add comprehensive logging at all architectural boundaries + - Log all API requests/responses + - Log all Modbus operations + - Log health status transitions + - **Files**: All API and infrastructure modules + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T074** [P] Add OpenAPI documentation for all endpoints + - Document request/response schemas + - Add example values + - Tag endpoints appropriately + - **File**: src/presentation/api/*.rs + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T075** [P] Run cargo clippy and fix all warnings + - Ensure compliance with strict linting + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T076** [P] Run cargo fmt and format all code + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T077** Generate test coverage report + - Run: just coverage + - Ensure > 80% coverage for domain and application layers + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T078** [P] Run cargo audit for dependency vulnerabilities + - Fix any high/critical vulnerabilities + - **Complexity**: Low | **Uncertainty**: Medium + +- [ ] **T079** [P] Update README.md with deployment instructions + - Document environment variables + - Document Modbus device configuration + - Add quickstart guide + - **File**: README.md + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T080** [P] Create Docker image for backend + - Multi-stage build with Rust + - Include SQLite database setup + - **File**: Dockerfile + - **Complexity**: Medium | **Uncertainty**: Low + +- [ ] **T081** [P] Create production settings/production.yaml + - Configure for actual device IP + - Set appropriate timeouts and retry settings + - **File**: settings/production.yaml + - **Complexity**: Low | **Uncertainty**: Low + +- [ ] **T082** Deploy to production environment + - Test with actual Modbus relay device + - Verify all user stories work end-to-end + - **Complexity**: Medium | **Uncertainty**: High + +**Checkpoint**: Production ready, all user stories validated + +--- + +## Dependencies & Execution Order + +### Phase Dependencies + +1. **Phase 1 (Setup)**: No dependencies - start immediately +2. **Phase 2 (Domain TyDD)**: Depends on Phase 1 module structure +3. **Phase 3 (Infrastructure)**: Depends on Phase 2 domain types +4. **Phase 4 (US1 MVP)**: Depends on Phase 3 infrastructure +5. **Phase 5 (US2)**: Depends on Phase 4 backend API complete +6. **Phase 6 (US3)**: Depends on Phase 4 backend API complete (can parallelize with US2) +7. **Phase 7 (US4)**: Depends on Phase 4 backend API complete (can parallelize with US2/US3) +8. **Phase 8 (Polish)**: Depends on all desired user stories complete + +### User Story Independence + +- **US1**: No dependencies on other stories +- **US2**: Reuses US1 backend infrastructure, but independently testable +- **US3**: Reuses US1 backend infrastructure, but independently testable +- **US4**: Reuses US1 backend infrastructure, adds new persistence layer + +### Critical Path + +**MVP (US1 only)**: Phase 1 → Phase 2 → Phase 3 → Phase 4 (5 days) +**Full Feature**: MVP + Phase 5 + Phase 6 + Phase 7 + Phase 8 (7 days) + +### Parallel Opportunities + +- **Phase 1**: T002, T003, T004, T005, T006, T007, T008 can run in parallel +- **Phase 2**: T011, T015 can run in parallel +- **Phase 3**: T020, T027, T028, T029, T030 can run in parallel after T022 complete +- **Phase 4**: T035, T044, T045 can run in parallel +- **After Phase 4**: US2, US3, US4 can be developed in parallel by different developers +- **Phase 8**: T073, T074, T075, T076, T078, T079, T080, T081 can run in parallel + +**Total Parallelizable Tasks**: 35 tasks marked `[P]` + +--- + +## Test-Driven Development Workflow + +**CRITICAL**: For every task marked `[TDD]`, follow this exact sequence: + +1. **Write failing test FIRST** (red) +2. **Verify test fails** for the right reason +3. **Implement minimum code** to pass test (green) +4. **Refactor** while keeping tests green +5. **Commit** after each task or logical group + +### Example TDD Workflow (T010): + +```bash +# 1. Write failing test for RelayId::new() validation +# In src/domain/relay.rs: +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_relay_id_valid_range() { + assert!(RelayId::new(1).is_ok()); + assert!(RelayId::new(8).is_ok()); + } + + #[test] + fn test_relay_id_invalid_range() { + assert!(RelayId::new(0).is_err()); + assert!(RelayId::new(9).is_err()); + } +} + +# 2. Run test → VERIFY IT FAILS +cargo test test_relay_id + +# 3. Implement RelayId to make test pass +# 4. Run test again → VERIFY IT PASSES +# 5. Refactor if needed, keep tests green +# 6. Commit +jj describe -m "feat: implement RelayId with validation (T010)" +``` + +--- + +## Notes + +- **[P]** = Parallelizable (different files, no dependencies) +- **[US1/US2/US3/US4]** = User story mapping for traceability +- **[TDD]** = Test-Driven Development required +- **Complexity**: Low (< 1 hour) | Medium (1-3 hours) | High (> 3 hours or decomposed) +- **Uncertainty**: Low (clear path) | Medium (some unknowns) | High (requires research/spike) +- Commit after each task or logical group using `jj describe` or `jj commit` +- MVP delivery at task T049 (end of Phase 4) +- Stop at any checkpoint to independently validate user story diff --git a/specs/001-modbus-relay-control/types-design.md b/specs/001-modbus-relay-control/types-design.md new file mode 100644 index 0000000..81c91f1 --- /dev/null +++ b/specs/001-modbus-relay-control/types-design.md @@ -0,0 +1,1035 @@ +# Type Design: Modbus Relay Control System + +**Created**: 2025-12-28 +**Feature**: [spec.md](./spec.md) +**Language**: Rust +**Status**: Design + +## Overview + +This document defines the type hierarchy for a Modbus relay control system that manages 8 relay channels via Modbus RTU over TCP. The design enforces compile-time guarantees for relay identifiers, states, and labels while preventing common errors like invalid relay IDs or malformed labels. + +## Design Principles + +1. **Make illegal states unrepresentable**: Invalid relay IDs (0, 9+) cannot be constructed +2. **Validate at boundaries, trust internally**: Parse once at API/Modbus boundaries, trust types everywhere else +3. **Zero-cost abstractions**: Use `#[repr(transparent)]` for single-field newtypes +4. **Clear error messages**: Validation errors provide actionable context +5. **Type safety over convenience**: Prevent mixing RelayId with raw integers + +## Language + +**Target**: Rust (edition 2021) + +**Key features used**: +- Newtype pattern with `#[repr(transparent)]` +- Derive macros for common traits +- `thiserror` for error types +- `serde` for serialization (API boundaries) + +--- + +## Domain Primitives + +### RelayId + +**Purpose**: Type-safe relay identifier preventing out-of-range errors and accidental mixing with other integer types. + +**Wraps**: `u8` + +**Invariants**: +- Value MUST be in range 1-8 (inclusive) +- Represents user-facing relay number (not Modbus address) +- MUST NOT be constructed with value 0 or > 8 + +**Constructor Signature**: +```rust +impl RelayId { + pub fn new(value: u8) -> Result; +} +``` + +**Error Cases**: +- `RelayIdError::OutOfRange { value, min: 1, max: 8 }`: Value outside valid range + +**Methods**: +```rust +impl RelayId { + // Access raw value (for display, logging) + pub fn as_u8(&self) -> u8; + + // Convert to Modbus address (0-7) + pub fn to_modbus_address(&self) -> u16; + + // Convert from Modbus address (0-7) to RelayId (1-8) + pub fn from_modbus_address(address: u16) -> Result; +} +``` + +**Traits to Implement**: +- `Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord` (value semantics) +- `Display` - Format as "Relay {id}" +- `Serialize, Deserialize` - For API JSON (serialize as u8) + +**Rust-Specific**: +```rust +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] +#[repr(transparent)] +pub struct RelayId(u8); +``` + +--- + +### RelayLabel + +**Purpose**: Validated custom label for relays with length and character constraints. + +**Wraps**: `String` + +**Invariants**: +- Length MUST be 1-50 characters (inclusive) +- MUST contain only alphanumeric characters, spaces, hyphens, underscores +- MUST NOT be empty +- MUST NOT consist only of whitespace +- Leading/trailing whitespace is trimmed on construction + +**Constructor Signature**: +```rust +impl RelayLabel { + pub fn new(value: String) -> Result; +} +``` + +**Error Cases**: +- `RelayLabelError::Empty`: String is empty or only whitespace +- `RelayLabelError::TooLong { max: 50, actual }`: Exceeds 50 characters +- `RelayLabelError::InvalidCharacters { position, char }`: Contains disallowed character + +**Methods**: +```rust +impl RelayLabel { + // Access inner string + pub fn as_str(&self) -> &str; + + // Default label for unlabeled relays + pub fn default_for_relay(id: RelayId) -> Self; +} +``` + +**Traits to Implement**: +- `Debug, Clone, PartialEq, Eq, Hash` (no Copy - owns String) +- `Display` - Return inner string as-is +- `Serialize, Deserialize` - Serialize as string +- `AsRef` - Allow ergonomic string access + +**Rust-Specific**: +```rust +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[repr(transparent)] +pub struct RelayLabel(String); +``` + +--- + +### ModbusAddress + +**Purpose**: Type-safe Modbus coil address preventing confusion with RelayId. + +**Wraps**: `u16` + +**Invariants**: +- Value MUST be in range 0-7 (for 8-channel relay) +- Represents Modbus protocol address (0-indexed) +- MUST NOT be confused with RelayId (which is 1-indexed) + +**Constructor Signature**: +```rust +impl ModbusAddress { + pub fn new(value: u16) -> Result; +} +``` + +**Error Cases**: +- `ModbusAddressError::OutOfRange { value, max: 7 }`: Address exceeds device capacity + +**Methods**: +```rust +impl ModbusAddress { + pub fn as_u16(&self) -> u16; + + // Convert to RelayId (add 1) + pub fn to_relay_id(&self) -> RelayId; + + // Convert from RelayId (subtract 1) + pub fn from_relay_id(id: RelayId) -> Self; +} +``` + +**Traits to Implement**: +- `Debug, Clone, Copy, PartialEq, Eq, Hash` (value type) +- `Display` - Format as "Address {value}" + +**Rust-Specific**: +```rust +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +#[repr(transparent)] +pub struct ModbusAddress(u16); +``` + +**Design Note**: This type prevents the common error of using RelayId (1-8) directly as Modbus address (0-7). + +--- + +### FirmwareVersion + +**Purpose**: Validated firmware version string with format constraints. + +**Wraps**: `String` + +**Invariants**: +- MUST NOT be empty +- MUST be max 20 characters +- Format: semantic versioning (e.g., "1.2.3") or vendor-specific +- Leading/trailing whitespace trimmed + +**Constructor Signature**: +```rust +impl FirmwareVersion { + pub fn new(value: String) -> Result; +} +``` + +**Error Cases**: +- `FirmwareVersionError::Empty`: Version string is empty +- `FirmwareVersionError::TooLong { max: 20, actual }`: Exceeds length limit + +**Methods**: +```rust +impl FirmwareVersion { + pub fn as_str(&self) -> &str; +} +``` + +**Traits to Implement**: +- `Debug, Clone, PartialEq, Eq` (no Hash - version comparison) +- `Display` - Return version string +- `Serialize, Deserialize` - As string + +**Rust-Specific**: +```rust +#[derive(Debug, Clone, PartialEq, Eq)] +#[repr(transparent)] +pub struct FirmwareVersion(String); +``` + +--- + +## Sum Types / Enums + +### RelayState + +**Purpose**: Explicit representation of relay physical state. + +**Variants**: +```rust +pub enum RelayState { + On, + Off, +} +``` + +**Pattern Matching**: Required for exhaustiveness +**Compiler Enforcement**: Yes + +**Methods**: +```rust +impl RelayState { + // Toggle state + pub fn toggle(&self) -> Self; + + // Convert to boolean (On = true, Off = false) + pub fn as_bool(&self) -> bool; + + // Convert from boolean + pub fn from_bool(value: bool) -> Self; + + // Convert to Modbus coil value (On = 0xFF00, Off = 0x0000) + pub fn to_modbus_coil(&self) -> u16; + + // Convert from Modbus coil value + pub fn from_modbus_coil(value: u16) -> Self; +} +``` + +**Traits to Implement**: +- `Debug, Clone, Copy, PartialEq, Eq, Hash` +- `Display` - "ON" or "OFF" +- `Serialize, Deserialize` - As lowercase string "on"/"off" for API + +**Design Note**: Explicit enum prevents boolean blindness and makes code self-documenting. + +--- + +### BulkOperation + +**Purpose**: Explicit representation of bulk relay operations. + +**Variants**: +```rust +pub enum BulkOperation { + AllOn, + AllOff, +} +``` + +**Pattern Matching**: Required +**Compiler Enforcement**: Yes + +**Methods**: +```rust +impl BulkOperation { + // Convert to target RelayState + pub fn target_state(&self) -> RelayState; +} +``` + +**Traits to Implement**: +- `Debug, Clone, Copy, PartialEq, Eq` +- `Display` - "All ON" or "All OFF" +- `Serialize, Deserialize` - As "all_on" or "all_off" for API + +--- + +### HealthStatus + +**Purpose**: Explicit device health state with degradation levels. + +**Variants**: +```rust +pub enum HealthStatus { + Healthy, + Degraded { error_count: u32 }, + Unhealthy { reason: UnhealthyReason }, +} +``` + +**Sub-type**: +```rust +pub enum UnhealthyReason { + DeviceUnreachable, + ConnectionLost, + TimeoutExceeded, + ProtocolError { details: String }, +} +``` + +**Pattern Matching**: Required for handling different health states +**Compiler Enforcement**: Yes + +**Methods**: +```rust +impl HealthStatus { + pub fn is_healthy(&self) -> bool; + pub fn can_perform_operations(&self) -> bool; +} +``` + +**Traits to Implement**: +- `Debug, Clone, PartialEq, Eq` +- `Display` - Human-readable status +- `Serialize, Deserialize` - Tagged union for API + +--- + +### ModbusCommand + +**Purpose**: Type-safe representation of Modbus function codes and operations. + +**Variants**: +```rust +pub enum ModbusCommand { + ReadCoils { + starting_address: ModbusAddress, + quantity: u16, + }, + WriteSingleCoil { + address: ModbusAddress, + state: RelayState, + }, + WriteMultipleCoils { + starting_address: ModbusAddress, + states: Vec, + }, +} +``` + +**Pattern Matching**: Required +**Compiler Enforcement**: Yes + +**Methods**: +```rust +impl ModbusCommand { + // Get Modbus function code + pub fn function_code(&self) -> u8; + + // Create command to read all relays + pub fn read_all_relays() -> Self; + + // Create command to toggle single relay + pub fn toggle_relay(id: RelayId, state: RelayState) -> Self; + + // Create command for bulk operation + pub fn bulk_operation(op: BulkOperation) -> Self; +} +``` + +**Traits to Implement**: +- `Debug, Clone, PartialEq, Eq` +- No Serialize/Deserialize - internal representation only + +**Design Note**: Encapsulates Modbus protocol details, preventing direct manipulation of function codes. + +--- + +## Composite Types + +### Relay + +**Purpose**: Complete representation of a relay with all its properties. + +**Fields**: +```rust +pub struct Relay { + id: RelayId, + state: RelayState, + label: Option, +} +``` + +**Invariants**: +- `id` is always valid (enforced by RelayId type) +- `state` is always valid (enforced by RelayState enum) +- `label` is either None or a valid RelayLabel + +**Construction**: +```rust +impl Relay { + pub fn new(id: RelayId, state: RelayState) -> Self; + pub fn with_label(id: RelayId, state: RelayState, label: RelayLabel) -> Self; +} +``` + +**Methods**: +```rust +impl Relay { + pub fn id(&self) -> RelayId; + pub fn state(&self) -> RelayState; + pub fn label(&self) -> Option<&RelayLabel>; + + pub fn set_state(&mut self, state: RelayState); + pub fn set_label(&mut self, label: Option); + + pub fn toggle(&mut self); + + // Get display name (label or default) + pub fn display_name(&self) -> String; +} +``` + +**Traits to Implement**: +- `Debug, Clone, PartialEq, Eq` +- `Serialize, Deserialize` - For API responses + +--- + +### DeviceHealth + +**Purpose**: Complete health information about Modbus device. + +**Fields**: +```rust +pub struct DeviceHealth { + status: HealthStatus, + firmware_version: Option, + last_contact: Option>, + consecutive_errors: u32, +} +``` + +**Invariants**: +- If `status` is `Healthy`, `last_contact` should be `Some` +- If `status` is `Unhealthy`, `last_contact` may be `None` (never connected) or stale +- `consecutive_errors` resets to 0 on successful operation + +**Construction**: +```rust +impl DeviceHealth { + pub fn new() -> Self; // Starts as Unhealthy (not yet connected) + pub fn healthy(firmware: FirmwareVersion) -> Self; +} +``` + +**Methods**: +```rust +impl DeviceHealth { + pub fn status(&self) -> &HealthStatus; + pub fn firmware_version(&self) -> Option<&FirmwareVersion>; + pub fn last_contact(&self) -> Option>; + + pub fn mark_successful_contact(&mut self, firmware: Option); + pub fn mark_error(&mut self, reason: UnhealthyReason); + pub fn mark_degraded(&mut self); + + pub fn is_operational(&self) -> bool; +} +``` + +**Traits to Implement**: +- `Debug, Clone` +- `Serialize, Deserialize` - For API health endpoint + +--- + +### RelayCollection + +**Purpose**: Type-safe collection of exactly 8 relays with indexed access. + +**Fields**: +```rust +pub struct RelayCollection { + relays: [Relay; 8], +} +``` + +**Invariants**: +- MUST contain exactly 8 relays +- Relays MUST have IDs 1-8 in order +- Array index corresponds to RelayId - 1 + +**Construction**: +```rust +impl RelayCollection { + // Create with all relays OFF and no labels + pub fn new() -> Self; + + // Create from array (validates IDs are 1-8) + pub fn from_array(relays: [Relay; 8]) -> Result; +} +``` + +**Methods**: +```rust +impl RelayCollection { + // Get relay by ID (infallible - ID is validated) + pub fn get(&self, id: RelayId) -> &Relay; + pub fn get_mut(&mut self, id: RelayId) -> &mut Relay; + + // Iterate over all relays + pub fn iter(&self) -> impl Iterator; + pub fn iter_mut(&mut self) -> impl Iterator; + + // Bulk operations + pub fn set_all_states(&mut self, state: RelayState); + pub fn apply_bulk_operation(&mut self, op: BulkOperation); +} +``` + +**Traits to Implement**: +- `Debug, Clone` +- `Index` - Ergonomic access: `collection[relay_id]` +- `Serialize, Deserialize` - For API responses + +**Design Note**: Fixed-size array prevents runtime length checks and makes the 8-relay constraint compile-time enforced. + +--- + +## Validation Boundaries + +### API Layer (Parse, Don't Validate) + +**Entry Points**: +- HTTP request path parameters: `/api/relays/{id}` → parse to `RelayId` +- JSON request bodies: deserialize with validated newtypes +- Query parameters: validate and convert to domain types + +**Validation Strategy**: +```rust +// ✅ API handler (parsing boundary) +async fn toggle_relay( + Path(id): Path, // Raw input +) -> Result, ApiError> { + let relay_id = RelayId::new(id) + .map_err(|e| ApiError::InvalidRelayId(e))?; // Validate once + + relay_service.toggle(relay_id).await // Pass validated type +} +``` + +**Error Mapping**: +```rust +impl From for ApiError { + fn from(err: RelayIdError) -> Self { + match err { + RelayIdError::OutOfRange { value, min, max } => + ApiError::BadRequest(format!( + "Relay ID {} out of range (valid: {}-{})", + value, min, max + )) + } + } +} +``` + +--- + +### Domain Layer (Trust Types) + +**Strategy**: Accept only validated types, perform no redundant validation. + +```rust +// ✅ Domain service (trusts types) +impl RelayService { + pub async fn toggle(&self, id: RelayId) -> Result { + // No validation needed - RelayId is already valid + let current_state = self.get_state(id).await?; + let new_state = current_state.toggle(); + self.set_state(id, new_state).await?; + Ok(self.get_relay(id).await?) + } +} +``` + +**No Validation Inside Domain**: +- RelayId is guaranteed valid by type system +- RelayState is guaranteed valid by enum +- RelayLabel is guaranteed valid by constructor + +--- + +### Infrastructure Layer (Modbus Boundary) + +**Modbus → Domain (Parse)**: +```rust +// ✅ Parse Modbus response to domain types +impl ModbusClient { + async fn read_coils(&self) -> Result, ModbusError> { + let raw_coils = self.raw_read_coils(0, 8).await?; + + // Convert raw Modbus values to validated domain types + let states = raw_coils.iter() + .map(|&coil| RelayState::from_modbus_coil(coil)) + .collect(); + + Ok(states) // Return validated types + } +} +``` + +**Domain → Modbus (Convert)**: +```rust +// ✅ Convert validated types to Modbus protocol +impl ModbusClient { + async fn write_single_coil( + &self, + id: RelayId, // Validated type + state: RelayState, + ) -> Result<(), ModbusError> { + let address = id.to_modbus_address(); // Infallible conversion + let coil_value = state.to_modbus_coil(); // Infallible conversion + + self.raw_write_coil(address, coil_value).await + } +} +``` + +--- + +### Persistence Layer (Configuration YAML) + +**File → Domain (Parse)**: +```rust +// ✅ Load relay labels from YAML +impl ConfigLoader { + fn load_labels(&self) -> Result, ConfigError> { + let raw: HashMap = self.read_yaml()?; + + raw.into_iter() + .map(|(id, label)| { + let relay_id = RelayId::new(id)?; + let relay_label = RelayLabel::new(label)?; + Ok((relay_id, relay_label)) + }) + .collect() + } +} +``` + +--- + +## Error Types + +### RelayIdError + +**Purpose**: Validation errors for RelayId construction. + +```rust +#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)] +pub enum RelayIdError { + #[error("Relay ID {value} out of range (valid: {min}-{max})")] + OutOfRange { + value: u8, + min: u8, + max: u8, + }, +} +``` + +**Display Messages**: +- `OutOfRange`: "Relay ID 9 out of range (valid: 1-8)" + +**Usage**: +```rust +RelayId::new(9) // Err(RelayIdError::OutOfRange { value: 9, min: 1, max: 8 }) +``` + +--- + +### RelayLabelError + +**Purpose**: Validation errors for RelayLabel construction. + +```rust +#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)] +pub enum RelayLabelError { + #[error("Relay label cannot be empty")] + Empty, + + #[error("Relay label too long (max: {max}, got: {actual})")] + TooLong { + max: usize, + actual: usize, + }, + + #[error("Invalid character '{char}' at position {position} (only alphanumeric, spaces, hyphens, underscores allowed)")] + InvalidCharacters { + position: usize, + char: char, + }, +} +``` + +**Display Messages**: +- `Empty`: "Relay label cannot be empty" +- `TooLong`: "Relay label too long (max: 50, got: 73)" +- `InvalidCharacters`: "Invalid character '!' at position 5 (only alphanumeric, spaces, hyphens, underscores allowed)" + +--- + +### ModbusAddressError + +**Purpose**: Validation errors for ModbusAddress. + +```rust +#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)] +pub enum ModbusAddressError { + #[error("Modbus address {value} exceeds device capacity (max: {max})")] + OutOfRange { + value: u16, + max: u16, + }, +} +``` + +--- + +### FirmwareVersionError + +**Purpose**: Validation errors for FirmwareVersion. + +```rust +#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)] +pub enum FirmwareVersionError { + #[error("Firmware version cannot be empty")] + Empty, + + #[error("Firmware version too long (max: {max}, got: {actual})")] + TooLong { + max: usize, + actual: usize, + }, +} +``` + +--- + +### RelayCollectionError + +**Purpose**: Errors when constructing RelayCollection. + +```rust +#[derive(Debug, thiserror::Error)] +pub enum RelayCollectionError { + #[error("Relay IDs must be 1-8 in order, found ID {found} at index {index}")] + InvalidIdOrdering { + index: usize, + found: u8, + }, +} +``` + +--- + +## Implementation Notes + +### Rust-Specific Patterns + +**Zero-Cost Abstractions**: +```rust +#[repr(transparent)] // Guarantee no runtime overhead +pub struct RelayId(u8); +``` + +**Infallible Conversions** (when source is already validated): +```rust +impl RelayId { + // Infallible because RelayId is guaranteed valid (1-8) + pub fn to_modbus_address(&self) -> u16 { + (self.0 - 1) as u16 // Always produces 0-7 + } +} + +impl ModbusAddress { + // Infallible because ModbusAddress is guaranteed valid (0-7) + pub fn to_relay_id(&self) -> RelayId { + RelayId(self.0 as u8 + 1) // Always produces 1-8 + } +} +``` + +**Serde Integration**: +```rust +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize)] +#[serde(try_from = "u8", into = "u8")] // Parse from JSON number +pub struct RelayId(u8); + +impl TryFrom for RelayId { + type Error = RelayIdError; + fn try_from(value: u8) -> Result { + RelayId::new(value) + } +} + +impl From for u8 { + fn from(id: RelayId) -> u8 { + id.0 + } +} +``` + +**Array Indexing**: +```rust +impl std::ops::Index for RelayCollection { + type Output = Relay; + + fn index(&self, id: RelayId) -> &Self::Output { + // Safe: RelayId is 1-8, array index is 0-7 + &self.relays[(id.0 - 1) as usize] + } +} +``` + +--- + +### Performance Considerations + +**Copy Types** (cheap to copy, no allocation): +- `RelayId` (u8) +- `RelayState` (enum) +- `BulkOperation` (enum) +- `ModbusAddress` (u16) + +**Clone Types** (heap allocation, clone when needed): +- `RelayLabel` (String) +- `FirmwareVersion` (String) +- `Relay` (contains Option) +- `DeviceHealth` (contains String in enum) + +**Fixed-Size Types** (stack allocation, no heap): +- `RelayCollection` ([Relay; 8] - stack allocated) + +--- + +### Testing Strategy + +**Type Construction Tests**: +```rust +#[cfg(test)] +mod tests { + #[test] + fn relay_id_valid_range() { + assert!(RelayId::new(1).is_ok()); + assert!(RelayId::new(8).is_ok()); + } + + #[test] + fn relay_id_rejects_zero() { + assert!(matches!( + RelayId::new(0), + Err(RelayIdError::OutOfRange { value: 0, .. }) + )); + } + + #[test] + fn relay_id_rejects_out_of_range() { + assert!(matches!( + RelayId::new(9), + Err(RelayIdError::OutOfRange { value: 9, .. }) + )); + } +} +``` + +**Conversion Tests**: +```rust +#[test] +fn relay_id_modbus_address_roundtrip() { + let id = RelayId::new(5).unwrap(); + let address = id.to_modbus_address(); + assert_eq!(address, 4); // 5 - 1 = 4 + + let modbus_addr = ModbusAddress::new(address).unwrap(); + let back_to_id = modbus_addr.to_relay_id(); + assert_eq!(id, back_to_id); +} +``` + +--- + +## Integration with Existing Code + +### Settings (Configuration) + +**Configuration Structure**: +```rust +#[derive(Deserialize)] +pub struct ModbusSettings { + pub host: String, + pub port: u16, + pub device_address: u8, // Parsed to ModbusAddress at startup + pub timeout_secs: u64, +} + +#[derive(Deserialize)] +pub struct RelaySettings { + pub labels: HashMap, // Parsed to HashMap +} +``` + +**Startup Validation**: +```rust +impl Settings { + pub fn validated_modbus_address(&self) -> Result { + ModbusAddress::new(self.modbus.device_address as u16) + .map_err(ConfigError::InvalidModbusAddress) + } + + pub fn validated_relay_labels(&self) -> Result, ConfigError> { + self.relays.labels.iter() + .map(|(id, label)| { + let relay_id = RelayId::new(*id)?; + let relay_label = RelayLabel::new(label.clone())?; + Ok((relay_id, relay_label)) + }) + .collect() + } +} +``` + +--- + +### API Routes (Poem Integration) + +**Path Parameter Parsing**: +```rust +use poem::web::Path; +use poem_openapi::{param::Path as OpenApiPath, payload::Json, OpenApi}; + +#[derive(Debug, Deserialize)] +struct RelayIdParam(u8); + +#[OpenApi] +impl RelayApi { + #[oai(path = "/relays/:id/toggle", method = "post")] + async fn toggle_relay( + &self, + #[oai(name = "id")] id: OpenApiPath, + ) -> Result, ApiError> { + let relay_id = RelayId::new(id.0) + .map_err(ApiError::from)?; + + let relay = self.service.toggle(relay_id).await?; + Ok(Json(relay)) + } +} +``` + +**Request/Response DTOs**: +```rust +#[derive(Serialize, Deserialize, Object)] +pub struct RelayResponse { + id: u8, // Serialized from RelayId + state: String, // "on" or "off" from RelayState + label: Option, // From RelayLabel +} + +impl From for RelayResponse { + fn from(relay: Relay) -> Self { + Self { + id: relay.id().as_u8(), + state: relay.state().to_string().to_lowercase(), + label: relay.label().map(|l| l.as_str().to_string()), + } + } +} +``` + +--- + +## Next Steps + +1. **Review this design**: Validate type hierarchy meets all requirements +2. **Run `/tydd:implement-types`**: Generate Rust implementations +3. **Run `/tdd:write-tests`**: Create comprehensive test suite +4. **Integration**: Update architecture plan with concrete type definitions + +--- + +## Type Summary + +**Domain Primitives** (7): +- `RelayId` - Validated relay identifier (1-8) +- `RelayLabel` - Validated custom label (1-50 chars, alphanumeric) +- `ModbusAddress` - Validated Modbus address (0-7) +- `FirmwareVersion` - Validated version string + +**Sum Types** (4): +- `RelayState` - On | Off +- `BulkOperation` - AllOn | AllOff +- `HealthStatus` - Healthy | Degraded | Unhealthy +- `ModbusCommand` - ReadCoils | WriteSingleCoil | WriteMultipleCoils + +**Composite Types** (3): +- `Relay` - Complete relay representation +- `DeviceHealth` - Device health information +- `RelayCollection` - Type-safe collection of 8 relays + +**Error Types** (5): +- `RelayIdError` +- `RelayLabelError` +- `ModbusAddressError` +- `FirmwareVersionError` +- `RelayCollectionError` + +**Total**: 19 carefully designed types ensuring compile-time correctness. diff --git a/specs/constitution.md b/specs/constitution.md new file mode 100644 index 0000000..f1126c4 --- /dev/null +++ b/specs/constitution.md @@ -0,0 +1,243 @@ + + +# STA (Smart Temperature & Appliance Control) Constitution + +## Core Principles + +### I. Hexagonal Architecture (Clean Architecture) + +The system MUST follow hexagonal architecture principles with clear separation of concerns: + +- **Domain Layer**: Pure business logic with no external dependencies +- **Application Layer**: Use cases and orchestration logic +- **Infrastructure Layer**: External concerns (HTTP, Modbus, persistence) +- **Presentation Layer**: API contracts and DTOs + +All dependencies MUST point inward. Infrastructure and presentation layers depend on domain/application, never the reverse. This ensures testability, maintainability, and framework independence. + +**SOLID Alignment**: This principle directly enforces Dependency Inversion Principle (DIP) through inward-pointing dependencies and Interface Segregation Principle (ISP) through layer boundaries. + +**Rationale**: Hexagonal architecture enables independent testing of business logic, technology substitution without domain changes, and clear ownership boundaries between layers. + +### II. Domain-Driven Design + +The domain model MUST be rich and expressive: + +- Domain entities encapsulate business rules and invariants +- Value objects are immutable and self-validating +- Repositories abstract persistence concerns +- Services contain domain logic that doesn't belong to entities +- Clear ubiquitous language shared between code and specifications + +Domain types MUST NOT leak across architectural boundaries. DTOs and domain entities are distinct. + +**Rationale**: DDD ensures the codebase reflects real-world domain concepts, making it easier to reason about, maintain, and evolve as business requirements change. + +### III. Test-First Development (NON-NEGOTIABLE) + +TDD is mandatory for all feature development: + +1. Write failing tests first +2. User reviews and approves test scenarios +3. Implement minimal code to pass tests +4. Refactor while keeping tests green + +Test coverage MUST include: +- Unit tests for domain logic (isolated, fast) +- Integration tests for infrastructure adapters (Modbus, HTTP) +- Contract tests for API endpoints +- Mock-based tests to avoid hardware dependencies during CI + +**Rationale**: Test-first ensures specifications are validated before implementation, prevents regression, and serves as executable documentation. The red-green-refactor cycle enforces disciplined development. + +### IV. API-First Design + +All functionality MUST be exposed through well-defined API contracts: + +- RESTful HTTP API for web interface (Poem + OpenAPI) +- Modbus TCP protocol for relay hardware communication +- Clear separation between public API contracts and internal implementation +- OpenAPI specifications generated and maintained automatically +- API versioning strategy for backward compatibility + +Backend (Rust) and frontend (TypeScript/Vue) communicate exclusively through documented API contracts. + +**Rationale**: API-first design enables parallel frontend/backend development, clear integration points, and prevents tight coupling between presentation and business logic. + +### V. Observability & Monitoring + +Production systems MUST be observable: + +- Structured logging at all architectural boundaries (tracing crate) +- Request/response logging for HTTP and Modbus communication +- Health check endpoints for system status +- Error context preserved across layer boundaries (thiserror) +- JSON log format for production environments +- Human-readable format for development + +Debugging MUST be possible without modifying code. + +**Rationale**: Observability enables rapid diagnosis of production issues, performance analysis, and understanding system behavior under real-world conditions. + +### VI. SOLID Principles + +All code MUST adhere to SOLID design principles: + +**Single Responsibility Principle (SRP)**: +- Each module, class, or function has ONE reason to change +- Domain entities focus on business rules only +- Infrastructure adapters focus on external integration only +- Controllers/handlers focus on request orchestration only + +**Open/Closed Principle (OCP)**: +- Entities open for extension via traits/interfaces +- Closed for modification through trait implementations +- New behavior added through new implementations, not modifications + +**Liskov Substitution Principle (LSP)**: +- Trait implementations MUST be substitutable without breaking behavior +- Mock implementations MUST honor trait contracts +- Repository implementations MUST preserve domain semantics + +**Interface Segregation Principle (ISP)**: +- Traits MUST be focused and minimal +- Clients depend only on methods they use +- Large interfaces split into role-specific traits + +**Dependency Inversion Principle (DIP)**: +- High-level domain logic depends on abstractions (traits) +- Low-level infrastructure implements abstractions +- Dependencies injected through constructors/builders +- No direct instantiation of concrete infrastructure types in domain + +**Rationale**: SOLID principles ensure code remains maintainable, testable, and extensible as the system evolves. They provide concrete design rules that support the broader clean architecture goals. + +## Technology Stack + +### Backend (Rust) + +- **Web Framework**: Poem with OpenAPI support (poem-openapi) +- **Async Runtime**: Tokio +- **Modbus Protocol**: tokio-modbus 0.17.0 +- **Configuration**: config crate with YAML support +- **Logging**: tracing + tracing-subscriber +- **Error Handling**: thiserror +- **Testing**: Built-in Rust test framework + mockall + +### Frontend (TypeScript/Vue) + +- **Framework**: Vue 3 with TypeScript +- **HTTP Client**: Type-safe API client generated from OpenAPI specs +- **Build Tool**: Vite +- **State Management**: Pinia (if needed for complex state) + +### Architecture Patterns + +- Clean/Hexagonal architecture with explicit layer boundaries +- Repository pattern for persistence abstraction +- Trait-based dependency injection +- Mock-based testing to avoid hardware dependencies +- SOLID principles applied to all design decisions + +## Development Workflow + +### Feature Development Process + +1. **Specification Phase**: + - Write feature specification in `specs//spec.md` + - Define data model in `specs//data-model.md` + - Create implementation plan in `specs//plan.md` + - Document API contracts in `specs//contracts/` + +2. **Test-First Implementation**: + - Write failing tests for domain logic + - Write failing tests for infrastructure adapters + - Write failing contract tests for API endpoints + - Get user approval on test scenarios + - Implement code to pass tests + - Refactor while maintaining green tests + +3. **Integration & Validation**: + - Integration tests with mocked hardware + - Real hardware testing (when available) + - OpenAPI documentation validation + - Code review focusing on architectural compliance + +### Code Review Requirements + +All code changes MUST be reviewed for: +- Compliance with hexagonal architecture principles +- SOLID principles adherence +- Domain model clarity and expressiveness +- Test coverage and quality +- API contract adherence +- Observability (logging, error context) +- No domain logic leaking into infrastructure layer + +### Quality Gates + +Code MUST NOT be merged unless: +- All tests pass (unit + integration) +- Test coverage meets minimum thresholds +- Architecture review confirms layer separation +- SOLID principles validated (no SRP/DIP violations) +- OpenAPI specs are up-to-date +- Logging captures key operational events + +## Governance + +This constitution supersedes all other development practices and guidelines. All architectural decisions MUST align with the principles defined herein. + +### Amendment Process + +Amendments to this constitution require: +1. Documented rationale for the change +2. Impact analysis on existing codebase +3. Migration plan if breaking existing patterns +4. Approval before implementation + +### Compliance Verification + +- All pull requests MUST verify constitutional compliance +- Architecture decisions MUST be justified against these principles +- Complexity introduced MUST be necessary to uphold principles +- Violations MUST be addressed before merge + +### Version Control + +This constitution uses semantic versioning: +- **MAJOR**: Breaking changes to core principles +- **MINOR**: New principles or significant clarifications +- **PATCH**: Typo fixes, wording improvements + +**Version**: 1.1.0 | **Ratified**: 2025-12-27 | **Last Amended**: 2025-12-27 diff --git a/specs/templates/plan-template.md b/specs/templates/plan-template.md new file mode 100644 index 0000000..6a8bfc6 --- /dev/null +++ b/specs/templates/plan-template.md @@ -0,0 +1,104 @@ +# Implementation Plan: [FEATURE] + +**Branch**: `[###-feature-name]` | **Date**: [DATE] | **Spec**: [link] +**Input**: Feature specification from `/specs/[###-feature-name]/spec.md` + +**Note**: This template is filled in by the `/speckit.plan` command. See `.specify/templates/commands/plan.md` for the execution workflow. + +## Summary + +[Extract from feature spec: primary requirement + technical approach from research] + +## Technical Context + + + +**Language/Version**: [e.g., Python 3.11, Swift 5.9, Rust 1.75 or NEEDS CLARIFICATION] +**Primary Dependencies**: [e.g., FastAPI, UIKit, LLVM or NEEDS CLARIFICATION] +**Storage**: [if applicable, e.g., PostgreSQL, CoreData, files or N/A] +**Testing**: [e.g., pytest, XCTest, cargo test or NEEDS CLARIFICATION] +**Target Platform**: [e.g., Linux server, iOS 15+, WASM or NEEDS CLARIFICATION] +**Project Type**: [single/web/mobile - determines source structure] +**Performance Goals**: [domain-specific, e.g., 1000 req/s, 10k lines/sec, 60 fps or NEEDS CLARIFICATION] +**Constraints**: [domain-specific, e.g., <200ms p95, <100MB memory, offline-capable or NEEDS CLARIFICATION] +**Scale/Scope**: [domain-specific, e.g., 10k users, 1M LOC, 50 screens or NEEDS CLARIFICATION] + +## Constitution Check + +*GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.* + +[Gates determined based on constitution file] + +## Project Structure + +### Documentation (this feature) + +```text +specs/[###-feature]/ +├── plan.md # This file (/speckit.plan command output) +├── research.md # Phase 0 output (/speckit.plan command) +├── data-model.md # Phase 1 output (/speckit.plan command) +├── quickstart.md # Phase 1 output (/speckit.plan command) +├── contracts/ # Phase 1 output (/speckit.plan command) +└── tasks.md # Phase 2 output (/speckit.tasks command - NOT created by /speckit.plan) +``` + +### Source Code (repository root) + + +```text +# [REMOVE IF UNUSED] Option 1: Single project (DEFAULT) +src/ +├── models/ +├── services/ +├── cli/ +└── lib/ + +tests/ +├── contract/ +├── integration/ +└── unit/ + +# [REMOVE IF UNUSED] Option 2: Web application (when "frontend" + "backend" detected) +backend/ +├── src/ +│ ├── models/ +│ ├── services/ +│ └── api/ +└── tests/ + +frontend/ +├── src/ +│ ├── components/ +│ ├── pages/ +│ └── services/ +└── tests/ + +# [REMOVE IF UNUSED] Option 3: Mobile + API (when "iOS/Android" detected) +api/ +└── [same as backend above] + +ios/ or android/ +└── [platform-specific structure: feature modules, UI flows, platform tests] +``` + +**Structure Decision**: [Document the selected structure and reference the real +directories captured above] + +## Complexity Tracking + +> **Fill ONLY if Constitution Check has violations that must be justified** + +| Violation | Why Needed | Simpler Alternative Rejected Because | +|-----------|------------|-------------------------------------| +| [e.g., 4th project] | [current need] | [why 3 projects insufficient] | +| [e.g., Repository pattern] | [specific problem] | [why direct DB access insufficient] | diff --git a/specs/templates/spec-checklist.md b/specs/templates/spec-checklist.md new file mode 100644 index 0000000..0a7fe79 --- /dev/null +++ b/specs/templates/spec-checklist.md @@ -0,0 +1,34 @@ +# Specification Quality Checklist: [FEATURE NAME] + +**Purpose**: Validate specification completeness and quality before proceeding to planning +**Created**: [DATE] +**Feature**: [Link to spec.md] + +## Content Quality + +- [ ] No implementation details (languages, frameworks, APIs) +- [ ] Focused on user value and business needs +- [ ] Written for non-technical stakeholders +- [ ] All mandatory sections completed + +## Requirement Completeness + +- [ ] No [NEEDS CLARIFICATION] markers remain +- [ ] Requirements are testable and unambiguous +- [ ] Success criteria are measurable +- [ ] Success criteria are technology-agnostic (no implementation details) +- [ ] All acceptance scenarios are defined +- [ ] Edge cases are identified +- [ ] Scope is clearly bounded +- [ ] Dependencies and assumptions identified + +## Feature Readiness + +- [ ] All functional requirements have clear acceptance criteria +- [ ] User scenarios cover primary flows +- [ ] Feature meets measurable outcomes defined in Success Criteria +- [ ] No implementation details leak into specification + +## Notes + +- Items marked incomplete require spec updates before `/sdd:01-specify` or `/sdd:01-plan` \ No newline at end of file diff --git a/specs/templates/spec-template.md b/specs/templates/spec-template.md new file mode 100644 index 0000000..c67d914 --- /dev/null +++ b/specs/templates/spec-template.md @@ -0,0 +1,115 @@ +# Feature Specification: [FEATURE NAME] + +**Feature Branch**: `[###-feature-name]` +**Created**: [DATE] +**Status**: Draft +**Input**: User description: "$ARGUMENTS" + +## User Scenarios & Testing *(mandatory)* + + + +### User Story 1 - [Brief Title] (Priority: P1) + +[Describe this user journey in plain language] + +**Why this priority**: [Explain the value and why it has this priority level] + +**Independent Test**: [Describe how this can be tested independently - e.g., "Can be fully tested by [specific action] and delivers [specific value]"] + +**Acceptance Scenarios**: + +1. **Given** [initial state], **When** [action], **Then** [expected outcome] +2. **Given** [initial state], **When** [action], **Then** [expected outcome] + +--- + +### User Story 2 - [Brief Title] (Priority: P2) + +[Describe this user journey in plain language] + +**Why this priority**: [Explain the value and why it has this priority level] + +**Independent Test**: [Describe how this can be tested independently] + +**Acceptance Scenarios**: + +1. **Given** [initial state], **When** [action], **Then** [expected outcome] + +--- + +### User Story 3 - [Brief Title] (Priority: P3) + +[Describe this user journey in plain language] + +**Why this priority**: [Explain the value and why it has this priority level] + +**Independent Test**: [Describe how this can be tested independently] + +**Acceptance Scenarios**: + +1. **Given** [initial state], **When** [action], **Then** [expected outcome] + +--- + +[Add more user stories as needed, each with an assigned priority] + +### Edge Cases + + + +- What happens when [boundary condition]? +- How does system handle [error scenario]? + +## Requirements *(mandatory)* + + + +### Functional Requirements + +- **FR-001**: System MUST [specific capability, e.g., "allow users to create accounts"] +- **FR-002**: System MUST [specific capability, e.g., "validate email addresses"] +- **FR-003**: Users MUST be able to [key interaction, e.g., "reset their password"] +- **FR-004**: System MUST [data requirement, e.g., "persist user preferences"] +- **FR-005**: System MUST [behavior, e.g., "log all security events"] + +*Example of marking unclear requirements:* + +- **FR-006**: System MUST authenticate users via [NEEDS CLARIFICATION: auth method not specified - email/password, SSO, OAuth?] +- **FR-007**: System MUST retain user data for [NEEDS CLARIFICATION: retention period not specified] + +### Key Entities *(include if feature involves data)* + +- **[Entity 1]**: [What it represents, key attributes without implementation] +- **[Entity 2]**: [What it represents, relationships to other entities] + +## Success Criteria *(mandatory)* + + + +### Measurable Outcomes + +- **SC-001**: [Measurable metric, e.g., "Users can complete account creation in under 2 minutes"] +- **SC-002**: [Measurable metric, e.g., "System handles 1000 concurrent users without degradation"] +- **SC-003**: [User satisfaction metric, e.g., "90% of users successfully complete primary task on first attempt"] +- **SC-004**: [Business metric, e.g., "Reduce support tickets related to [X] by 50%"] diff --git a/specs/templates/tasks-template.md b/specs/templates/tasks-template.md new file mode 100644 index 0000000..60f9be4 --- /dev/null +++ b/specs/templates/tasks-template.md @@ -0,0 +1,251 @@ +--- + +description: "Task list template for feature implementation" +--- + +# Tasks: [FEATURE NAME] + +**Input**: Design documents from `/specs/[###-feature-name]/` +**Prerequisites**: plan.md (required), spec.md (required for user stories), research.md, data-model.md, contracts/ + +**Tests**: The examples below include test tasks. Tests are OPTIONAL - only include them if explicitly requested in the feature specification. + +**Organization**: Tasks are grouped by user story to enable independent implementation and testing of each story. + +## Format: `[ID] [P?] [Story] Description` + +- **[P]**: Can run in parallel (different files, no dependencies) +- **[Story]**: Which user story this task belongs to (e.g., US1, US2, US3) +- Include exact file paths in descriptions + +## Path Conventions + +- **Single project**: `src/`, `tests/` at repository root +- **Web app**: `backend/src/`, `frontend/src/` +- **Mobile**: `api/src/`, `ios/src/` or `android/src/` +- Paths shown below assume single project - adjust based on plan.md structure + + + +## Phase 1: Setup (Shared Infrastructure) + +**Purpose**: Project initialization and basic structure + +- [ ] T001 Create project structure per implementation plan +- [ ] T002 Initialize [language] project with [framework] dependencies +- [ ] T003 [P] Configure linting and formatting tools + +--- + +## Phase 2: Foundational (Blocking Prerequisites) + +**Purpose**: Core infrastructure that MUST be complete before ANY user story can be implemented + +**⚠️ CRITICAL**: No user story work can begin until this phase is complete + +Examples of foundational tasks (adjust based on your project): + +- [ ] T004 Setup database schema and migrations framework +- [ ] T005 [P] Implement authentication/authorization framework +- [ ] T006 [P] Setup API routing and middleware structure +- [ ] T007 Create base models/entities that all stories depend on +- [ ] T008 Configure error handling and logging infrastructure +- [ ] T009 Setup environment configuration management + +**Checkpoint**: Foundation ready - user story implementation can now begin in parallel + +--- + +## Phase 3: User Story 1 - [Title] (Priority: P1) 🎯 MVP + +**Goal**: [Brief description of what this story delivers] + +**Independent Test**: [How to verify this story works on its own] + +### Tests for User Story 1 (OPTIONAL - only if tests requested) ⚠️ + +> **NOTE: Write these tests FIRST, ensure they FAIL before implementation** + +- [ ] T010 [P] [US1] Contract test for [endpoint] in tests/contract/test_[name].py +- [ ] T011 [P] [US1] Integration test for [user journey] in tests/integration/test_[name].py + +### Implementation for User Story 1 + +- [ ] T012 [P] [US1] Create [Entity1] model in src/models/[entity1].py +- [ ] T013 [P] [US1] Create [Entity2] model in src/models/[entity2].py +- [ ] T014 [US1] Implement [Service] in src/services/[service].py (depends on T012, T013) +- [ ] T015 [US1] Implement [endpoint/feature] in src/[location]/[file].py +- [ ] T016 [US1] Add validation and error handling +- [ ] T017 [US1] Add logging for user story 1 operations + +**Checkpoint**: At this point, User Story 1 should be fully functional and testable independently + +--- + +## Phase 4: User Story 2 - [Title] (Priority: P2) + +**Goal**: [Brief description of what this story delivers] + +**Independent Test**: [How to verify this story works on its own] + +### Tests for User Story 2 (OPTIONAL - only if tests requested) ⚠️ + +- [ ] T018 [P] [US2] Contract test for [endpoint] in tests/contract/test_[name].py +- [ ] T019 [P] [US2] Integration test for [user journey] in tests/integration/test_[name].py + +### Implementation for User Story 2 + +- [ ] T020 [P] [US2] Create [Entity] model in src/models/[entity].py +- [ ] T021 [US2] Implement [Service] in src/services/[service].py +- [ ] T022 [US2] Implement [endpoint/feature] in src/[location]/[file].py +- [ ] T023 [US2] Integrate with User Story 1 components (if needed) + +**Checkpoint**: At this point, User Stories 1 AND 2 should both work independently + +--- + +## Phase 5: User Story 3 - [Title] (Priority: P3) + +**Goal**: [Brief description of what this story delivers] + +**Independent Test**: [How to verify this story works on its own] + +### Tests for User Story 3 (OPTIONAL - only if tests requested) ⚠️ + +- [ ] T024 [P] [US3] Contract test for [endpoint] in tests/contract/test_[name].py +- [ ] T025 [P] [US3] Integration test for [user journey] in tests/integration/test_[name].py + +### Implementation for User Story 3 + +- [ ] T026 [P] [US3] Create [Entity] model in src/models/[entity].py +- [ ] T027 [US3] Implement [Service] in src/services/[service].py +- [ ] T028 [US3] Implement [endpoint/feature] in src/[location]/[file].py + +**Checkpoint**: All user stories should now be independently functional + +--- + +[Add more user story phases as needed, following the same pattern] + +--- + +## Phase N: Polish & Cross-Cutting Concerns + +**Purpose**: Improvements that affect multiple user stories + +- [ ] TXXX [P] Documentation updates in docs/ +- [ ] TXXX Code cleanup and refactoring +- [ ] TXXX Performance optimization across all stories +- [ ] TXXX [P] Additional unit tests (if requested) in tests/unit/ +- [ ] TXXX Security hardening +- [ ] TXXX Run quickstart.md validation + +--- + +## Dependencies & Execution Order + +### Phase Dependencies + +- **Setup (Phase 1)**: No dependencies - can start immediately +- **Foundational (Phase 2)**: Depends on Setup completion - BLOCKS all user stories +- **User Stories (Phase 3+)**: All depend on Foundational phase completion + - User stories can then proceed in parallel (if staffed) + - Or sequentially in priority order (P1 → P2 → P3) +- **Polish (Final Phase)**: Depends on all desired user stories being complete + +### User Story Dependencies + +- **User Story 1 (P1)**: Can start after Foundational (Phase 2) - No dependencies on other stories +- **User Story 2 (P2)**: Can start after Foundational (Phase 2) - May integrate with US1 but should be independently testable +- **User Story 3 (P3)**: Can start after Foundational (Phase 2) - May integrate with US1/US2 but should be independently testable + +### Within Each User Story + +- Tests (if included) MUST be written and FAIL before implementation +- Models before services +- Services before endpoints +- Core implementation before integration +- Story complete before moving to next priority + +### Parallel Opportunities + +- All Setup tasks marked [P] can run in parallel +- All Foundational tasks marked [P] can run in parallel (within Phase 2) +- Once Foundational phase completes, all user stories can start in parallel (if team capacity allows) +- All tests for a user story marked [P] can run in parallel +- Models within a story marked [P] can run in parallel +- Different user stories can be worked on in parallel by different team members + +--- + +## Parallel Example: User Story 1 + +```bash +# Launch all tests for User Story 1 together (if tests requested): +Task: "Contract test for [endpoint] in tests/contract/test_[name].py" +Task: "Integration test for [user journey] in tests/integration/test_[name].py" + +# Launch all models for User Story 1 together: +Task: "Create [Entity1] model in src/models/[entity1].py" +Task: "Create [Entity2] model in src/models/[entity2].py" +``` + +--- + +## Implementation Strategy + +### MVP First (User Story 1 Only) + +1. Complete Phase 1: Setup +2. Complete Phase 2: Foundational (CRITICAL - blocks all stories) +3. Complete Phase 3: User Story 1 +4. **STOP and VALIDATE**: Test User Story 1 independently +5. Deploy/demo if ready + +### Incremental Delivery + +1. Complete Setup + Foundational → Foundation ready +2. Add User Story 1 → Test independently → Deploy/Demo (MVP!) +3. Add User Story 2 → Test independently → Deploy/Demo +4. Add User Story 3 → Test independently → Deploy/Demo +5. Each story adds value without breaking previous stories + +### Parallel Team Strategy + +With multiple developers: + +1. Team completes Setup + Foundational together +2. Once Foundational is done: + - Developer A: User Story 1 + - Developer B: User Story 2 + - Developer C: User Story 3 +3. Stories complete and integrate independently + +--- + +## Notes + +- [P] tasks = different files, no dependencies +- [Story] label maps task to specific user story for traceability +- Each user story should be independently completable and testable +- Verify tests fail before implementing +- Commit after each task or logical group +- Stop at any checkpoint to validate story independently +- Avoid: vague tasks, same file conflicts, cross-story dependencies that break independence