diff --git a/CHANGELOG.md b/CHANGELOG.md index f13dd3a..32cc8d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,8 +6,26 @@ project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [v0.4.0] - 2026-07-16 + ### Added +* **Mode control (first mutating RPC).** New `SetMode` RPC on `EconetService`, + exposed over gRPC, the REST gateway (`POST /v1alpha1/devices/{serial}/mode`), + and as an MCP tool. Writes go out over ClearBlade's REST publish endpoint + (`POST /message/{systemKey}/publish`, topic `user/{account_id}/device/desired`, + payload `{"@MODE": , ...}`) — the HTTP equivalent of the app's MQTT + publish, so **no MQTT client is required**. The mode is applied + asynchronously by the Rheem cloud and only reflected on a later poll. +* `Mode` proto enum (`off`, `electric`, `energy-saving`, `heat-pump`, + `high-demand`, `gas`, `performance`, `vacation`) with protovalidate rejecting + the unspecified value. The enum flows into the MCP tool's input schema, so + clients see the valid modes. Supported modes are validated per-device against + the unit's reported mode list (`@MODE` is published as an index into it). +* Generated MCP server (`econetmcpgen`) built from the proto via + `protoc-gen-go-mcp`, now mounted at `/api/mcp`, forwarding in-process to the + gRPC server through the go-sdk adapter. The hand-written `econetmcp` package + is retained as a one-line-switchable fallback in `pkg/econet/econet.go`. * Optional Grafana dashboard shipped as a ConfigMap in the Helm chart. Enable with `hull.config.settings.grafanaDashboard.enabled=true`; the ConfigMap is labeled `grafana_dashboard: "1"` for the Grafana sidecar to auto-import. The @@ -17,6 +35,13 @@ project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). energy + cost + water usage, a heating-state timeline, WiFi signal, and a device-info table. Sidecar label/value and Grafana folder are configurable. +### Changed + +* MCP tool surface changed with the switch to generated tools: `/api/mcp` now + serves `econet_v1alpha1_EconetService_ListDevices`, `_GetDevice`, and + `_SetMode` (structured JSON output) instead of the single `list_water_heaters` + summary tool. Switch back via the aliased import in `pkg/econet/econet.go`. + ## [v0.3.0] - 2026-07-05 ### Changed