Two fixes for the birdnet-pipy addon:
1. Icecast log permission error: 01-structure.sh creates /app/data/logs
as root, but start-icecast.sh runs via gosu icecast2. The first log
write fails with "Permission denied", crashing icecast in a restart
loop (502 Bad Gateway on the Live Feed page). Fix: chown the log dir
and file to icecast2 before dropping privileges.
2. Live Feed double-prefixed request in ingress mode: the "/stream/"
sub_filter rule also matches 'api.get("/stream/config")' in the JS
bundle, producing a request like
/hassio_ingress/TOKEN/api/hassio_ingress/TOKEN/stream/config (404).
The upstream frontend (BirdNET-PiPy >= 0.6.2) now strips the leading
slash from stream URLs so they resolve via <base href> — the
sub_filter rule is no longer needed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- New init script 02-timezone.sh: reads TZ from addon config, validates
against /usr/share/zoneinfo, applies to container (/etc/localtime,
/etc/timezone, s6 container env)
- Change default TZ from Etc/UTC to Europe/Paris
- Increment version to 0.5.6-2
- Update CHANGELOG.md and DOCS.md
Co-authored-by: alexbelgium <44178713+alexbelgium@users.noreply.github.com>
Add ingress: true, ingress_port: 0, and ingress_stream: true to
config.yaml. Update ingress_params.conf with sub_filter rules for
Vue.js SPA: rewrite API paths, stream paths, Socket.IO paths, and
inject base href for Vue Router history mode.
Co-authored-by: alexbelgium <44178713+alexbelgium@users.noreply.github.com>
- Use ${PULSE_SERVER:-unix:/run/pulse/native} in icecast/run and main/run
to respect the PULSE_SERVER env var set by HA supervisor
- Create /run/pulse/native symlink when PulseAudio socket is elsewhere
- Copy PulseAudio cookie for icecast2 user authentication
- Add icecast2 to audio group
Co-authored-by: alexbelgium <44178713+alexbelgium@users.noreply.github.com>