Serve polls the master over UART and pushes live state via WebSocket; reopens the serial port when the device is unplugged and comes back. Co-authored-by: Cursor <cursoragent@cursor.com>
81 lines
2.6 KiB
Markdown
81 lines
2.6 KiB
Markdown
# goTool
|
|
|
|
Host-side UART client for the Powerpod **master** ESP.
|
|
|
|
Full system documentation (roles, ESP-NOW, framing, protobuf): [`../main/README.md`](../main/README.md).
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
cd goTool
|
|
go mod tidy
|
|
go run . -port /dev/ttyUSB0 version
|
|
go run . -port /dev/ttyUSB0 clients
|
|
```
|
|
|
|
| Flag | Default | Description |
|
|
|------|---------|-------------|
|
|
| `-port` | (required) | Serial port on master UART (GPIO2/3 adapter) |
|
|
| `-baud` | `921600` | Must match firmware `UART_BAUD_RATE` |
|
|
|
|
### Commands
|
|
|
|
| Command | UART payload | Description |
|
|
|---------|--------------|-------------|
|
|
| `version` | `0x03` | Prints `version` and `git_hash` from firmware |
|
|
| `clients` | `0x04` | Lists slaves registered on the master via ESP-NOW |
|
|
| `unicast-test` | `0x07` | Sends ESP-NOW unicast test to one slave (`-client`, `-seq`) |
|
|
| `test` | — | Run an automated scenario (JSON configs under `testdata/`) |
|
|
| `serve` | — | Web dashboard at `http://localhost:8080` (WebSocket live updates) |
|
|
|
|
`clients` requires slaves to have responded to master discover broadcasts first.
|
|
|
|
### Automated tests
|
|
|
|
Bench **configs** (`testdata/configs/`) list network, MACs, and serial ports (`uart.master` for commands, `*_console` for esptool reset). **Scenarios** run UART commands plus optional `reset` steps.
|
|
|
|
```bash
|
|
go run . test -list-configs
|
|
go run . test -config example-lab -scenario smoke
|
|
go run . test -config my-lab -scenario smoke -port /dev/ttyUSB1 -v
|
|
```
|
|
|
|
With a complete bench config, `-port` is optional for `test` (uses `uart.master` from JSON).
|
|
|
|
See [`testdata/README.md`](testdata/README.md) for the JSON schema.
|
|
|
|
### Web dashboard
|
|
|
|
Polls the master over UART and pushes state to the browser via WebSocket (Alpine.js + Bootstrap 5).
|
|
|
|
```bash
|
|
go run . -port /dev/ttyUSB0 serve
|
|
go run . -port /dev/ttyUSB0 serve -addr :8080 -interval 2s
|
|
make gotool-serve PORT=/dev/ttyUSB0
|
|
```
|
|
|
|
Open [http://localhost:8080](http://localhost:8080) — shows master firmware info and the ESP-NOW client table from `CLIENT_INFO`.
|
|
|
|
If the UART device is unplugged or the port disappears, `serve` keeps running and retries on each poll interval; the UI shows **UART off** until the port is available again.
|
|
|
|
```bash
|
|
go run . -port /dev/ttyUSB0 unicast-test -client 16 -seq 42
|
|
```
|
|
|
|
On success the slave serial log should show `UNICAST TEST OK from master … seq=42`.
|
|
|
|
Example output:
|
|
|
|
```
|
|
clients (2):
|
|
[0] id=42 mac=aabbccddeeff ver=1 available=true used=false last_ping=250 last_success_ping=250
|
|
```
|
|
|
|
## Regenerate protobuf
|
|
|
|
```bash
|
|
protoc --go_out=./pb --go_opt=paths=source_relative \
|
|
--go_opt=Muart_messages.proto=powerpod/gotool/pb \
|
|
-I ../main/proto ../main/proto/uart_messages.proto
|
|
```
|