Migrated the reference site off the YAML packages and onto the add-on. Every bug below presented identically: the add-on starts, logs "started", serves its UI, and cannot do its job. - run.sh needs #!/usr/bin/with-contenv sh. s6-overlay sanitises the environment for services, so a plain shebang means SUPERVISOR_TOKEN is absent and every Core API call is 401 - while homeassistant_api: true makes permissions look granted. Startup now prints the token length and probes the API. - Supervisor keys the image by config.yaml `version`, so rebuilding without a bump reuses the old image. Two fixes appeared not to work because of it. - Alpine is musl and has no aiohttp wheel on PyPI; deps now come from apk so nothing compiles on a client's Pi. - Alpine ships paho-mqtt 1.x, which has no CallbackAPIVersion. That raised at construction and took the control loop down with it - so MQTT setup is now wrapped too. Observability must never be able to stop the controller. - MQTT discovery is published from on_connect: paho silently drops QoS-0 publishes issued before the CONNACK, so the previous code announced nothing while logging "MQTT connected". - Repeated failures now log once a minute. Six warnings a second rolled the log buffer and destroyed the startup diagnostics needed to find the 401. - auto_start could never fire, because the store's defaults always supplied auto: False for the fallback to find. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016NckgXecasQb2eSsPYNSW6
17 lines
811 B
Bash
17 lines
811 B
Bash
#!/usr/bin/with-contenv sh
|
|
# ⚠️ THE SHEBANG IS LOAD-BEARING. It must be `with-contenv`, not `env sh`.
|
|
#
|
|
# The Home Assistant base images run s6-overlay, which starts services with a
|
|
# SANITISED environment: the container's variables live in
|
|
# /run/s6/container_environment and are only re-imported by `with-contenv`.
|
|
# With a plain `#!/usr/bin/env sh` the add-on starts perfectly, serves its UI,
|
|
# and then fails EVERY Home Assistant call with 401 Unauthorized - because
|
|
# SUPERVISOR_TOKEN is simply absent, while `homeassistant_api: true` in
|
|
# config.yaml makes the permissions look correctly granted.
|
|
#
|
|
# Diagnosed 2026-08-23 the slow way. The startup probe in main.py now prints the
|
|
# token length so the next person sees it in one line instead of an hour.
|
|
set -e
|
|
cd /opt/goodwe
|
|
exec python3 -m app.main
|