remove rheemcloud pkg, implement against rest api only
Build and Publish / helm-release (push) Has been skipped
Build and Publish / go-binaries (push) Has been skipped
Build and Publish / container-images (push) Has been skipped
Build and Publish / check-chart (push) Successful in 12s

This commit is contained in:
2026-07-05 16:59:53 -04:00
parent dcdf5e4230
commit 047f7c233d
15 changed files with 822 additions and 233 deletions
+15 -9
View File
@@ -1,8 +1,7 @@
# econet-exporter 🔥💧
An exporter for **Rheem EcoNet / Rheemcloud** water-heater data. It keeps a
long-lived connection to the Rheem cloud (via
[`rheemcloud-go`](https://github.com/kevinburke/rheemcloud-go)) and exposes device
An exporter for **Rheem EcoNet / Rheemcloud** water-heater data. It polls the
Rheem cloud REST API (ClearBlade backend) on an interval and exposes device
state and usage three ways:
- **OTEL metrics** served for Prometheus scraping at `/metrics` (live state +
@@ -25,7 +24,7 @@ go-app defaults. Custom fields (see `pkg/config/custom.go`):
| `econetEmail` | `ECONET_EMAIL` | Rheem account email |
| `econetPassword` | `ECONET_PASSWORD` | Prefer the env var; keep out of config.yaml |
| `costPerKWH` | `ECONET_COST_PER_KWH` | **US dollars per kWh** (e.g. `0.18` = 18¢), not cents |
| `usageInterval` | `ECONET_USAGE_INTERVAL` | Energy/water poll interval (default `5m`) |
| `pollInterval` | `ECONET_POLL_INTERVAL` | How often device state + daily energy/water usage are re-fetched over REST (default `1m`) |
Everything under the go-app `AppConfig` (logging, otel, http, grpc) is also
env-overridable with `APP_*` variables — see `env-sample`.
@@ -47,20 +46,27 @@ Then:
Per-device gauges labeled `econet.serial`, `econet.device_id`,
`econet.friendly_name`: `econet_setpoint_fahrenheit`, `econet_connected`,
`econet_running`, `econet_enabled`, `econet_away`,
`econet_hot_water_availability_percent`, `econet_alert_count`,
`econet_wifi_signal_db`, `econet_device_info` (adds `type`/`generic_type`/`mode`).
`econet_running` (adds a `running_state` label naming the active stage, e.g.
`compressor-running` / `element-running` / `idle`), `econet_enabled`,
`econet_away`, `econet_hot_water_availability_percent`, `econet_alert_count`,
`econet_wifi_signal_db`, `econet_mode` (enum: `1` for the current mode, `0`
otherwise, via a `mode` label), `econet_device_info` (adds
`type`/`generic_type`/`mode`).
Polled usage: `econet_energy_usage_kwh`, `econet_water_usage_gallons`,
`econet_energy_cost_dollars`.
> Note: `econet_wifi_signal_db` is only delivered over Rheem's MQTT push stream,
> which this exporter does not use — it stays at `0`.
## 📂 Project Structure
- `proto/econet/v1alpha1/` - Protobuf definitions (source).
- `api/econet/v1alpha1/` - Generated proto, grpc, grpc-gateway code.
- `pkg/config/` - Custom config merged with go-app configuration.
- `pkg/econet/` - `EconetService` (owns the rheemcloud client) plus:
- `pkg/econet/` - `EconetService` (owns the REST client + poll ticker) plus:
- `econetclient/` - minimal EcoNet REST client (auth, devices, usage).
- `econetgrpc/` - gRPC `EconetService` implementation.
- `econetmcp/` - MCP server + tools.
- `econetmetrics/` - OTEL observable gauges + usage poller.
- `econetmetrics/` - OTEL observable gauges.
- `helm/` - Helm chart for Kubernetes deployment.
- `.gitea/workflows/` - CI pipelines.