Packaged as a Home Assistant add-on, with a field guide
Turns the reference RS485 controller into something a technician can install at a client site: a typed config form instead of YAML, an ingress UI that names misconfiguration in words, and persistent state that cannot be broken by a timezone. Why an add-on rather than YAML packages or blueprints: - Blueprints cannot create helpers, and the maintenance cycle is a state machine whose phase and completion date must survive restarts. - YAML packages need filesystem access, a configuration.yaml edit and a restart - none of which belong in a client install. - Add-ons authenticate with SUPERVISOR_TOKEN, so there is no long-lived token to generate, store or leak on someone else's machine. - Requires HA OS/Supervised. Container and Core installs cannot run add-ons at all, which is a market decision, not an oversight. The control law and the maintenance machine are pure functions with no Home Assistant imports, and both ship with runnable checks (22 and 22 assertions). Every assertion corresponds to a rule whose absence caused an observed failure on hardware - the saturation duration term, the clamp-before-slew ordering, the deadband, the sign convention. One behaviour deliberately differs from the implementation it replaces: when its inputs go missing this commands 0 W rather than replaying the last setpoint. The reference version kept replaying, which the hardware watchdog cannot catch - from the ESP32's side, Home Assistant is still talking to it. Includes the ESPHome firmware (now parameterised: node name, inverter rating, watchdog timeout) and the optional RS485 e-stop. FIELD-GUIDE.md carries the commissioning gates, all judged on the wire rather than on how Home Assistant looks, plus the written statement a site without an e-stop needs signed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016NckgXecasQb2eSsPYNSW6
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
# Changelog
|
||||
|
||||
## 0.1.0
|
||||
|
||||
First packaged release. Ports the control loop and the monthly maintenance
|
||||
cycle from the reference Home Assistant implementation into an add-on.
|
||||
|
||||
- Grid-following control: gain/slew/clamp/deadband with anti-windup, all tuned
|
||||
against measured hardware behaviour (see FIELD-GUIDE.md §14).
|
||||
- Saturation freeze **with the duration term** — three consecutive diverging
|
||||
cycles, not one. The instantaneous test fires on every large correction,
|
||||
because the plant itself needs 3-6 s to settle.
|
||||
- Monthly maintenance cycle as an ownership state machine: drain / charge /
|
||||
hold, with exactly one writer of the setpoint at any moment.
|
||||
- Capacity-tariff awareness: the maintenance charge is capped by quarter-hour
|
||||
peak headroom, and peak shaving outranks the maintenance schedule.
|
||||
- Failsafe behaviour: commands 0 W on missing inputs, on stop, and on shutdown.
|
||||
Never replays a stale setpoint - the reference implementation did, and the
|
||||
hardware watchdog cannot catch that.
|
||||
- Ingress UI with a commissioning checklist that names problems in words.
|
||||
- Optional MQTT discovery for status entities.
|
||||
|
||||
Known limits:
|
||||
|
||||
- Home Assistant OS / Supervised only (add-ons cannot run on Container/Core).
|
||||
- The inverter protocol is reverse-engineered; no vendor contract.
|
||||
- Without the optional RS485 e-stop, nothing covers the host machine dying.
|
||||
Reference in New Issue
Block a user