# Changelog ## 0.1.6 Findings from installing this on a live system, replacing a working YAML implementation. Every one of these was silent - the add-on looked healthy while being completely unable to do its job. - **`run.sh` must use `#!/usr/bin/with-contenv sh`.** The HA base images run s6-overlay, which starts services with a SANITISED environment. With a plain shebang, SUPERVISOR_TOKEN is simply absent and every Home Assistant call returns 401 - while `homeassistant_api: true` makes the permissions look correctly granted. Startup now logs the token length and probes the Core API, so the next person sees it in one line. - **Bump `version:` for every change.** Supervisor keys the built image by version, so editing source and rebuilding silently reuses the old image. Two fixes appeared not to work because of this. - **Dependencies come from apk, not pip.** Alpine is musl and there are no musl wheels for aiohttp; pip would compile it on the client's Pi. - **paho-mqtt 1.x and 2.x are both supported.** Alpine ships 1.x, which has no `CallbackAPIVersion`; that raised and took the whole add-on down with it. - **MQTT can no longer take down control.** Publisher construction is wrapped - observability must never stop the controller. - **MQTT discovery is published from `on_connect`.** paho drops QoS-0 publishes issued before the CONNACK, so announcing straight after `connect()` published nothing at all while logging "MQTT connected". - **Repeated failures log at most once a minute.** The control loop retries every second; unthrottled warnings rolled the log buffer and destroyed the startup diagnostics needed to debug the 401 above. - **`auto_start` works.** The store's defaults supplied `auto: False`, so the fallback to the option could never fire. Known issue: after deleting the MQTT entities from the registry during development, Home Assistant would not re-adopt them from retained discovery - not even after clearing the retained topics and reconnecting. The add-on publishes correct discovery and live state (verified on the broker); this is an HA-side adoption problem and affects status entities only, never control. ## 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.