birdnet-pipy: remove TZ option — timezone auto-derived from station location

The app derives its timezone from station lat/lng via timezonefinder
(Settings → Location in the Web UI), so a separate addon-level TZ only
ever created mismatch with the UI-derived zone. All app-facing timestamps
(dashboard, API, DB) and Python service stdout (api/main/birdnet) already
honor the UI zone via logging_config.py's formatter, and the frontend log
viewer re-converts Icecast timestamps on read.

Net effect in the HA addon log pane: Python services still show the
correct local time; only Icecast's raw stdout now prints in UTC (accepted
trade for a single source of truth). Deletes
rootfs/etc/cont-init.d/02-timezone.sh added in 0.5.6-2.

Also cleans up the options YAML in DOCS.md/README.md: drops
RECORDING_MODE and RTSP_URL (never wired — app reads them from
user_settings.json), drops http_stream from the modes list, and moves
STREAM_BITRATE under an env_vars: example since it's honored by
start-icecast.sh but not a schema option.

Bumped to 0.6.3-2 (addon-only, no upstream app change).
This commit is contained in:
Yudong Sun
2026-04-15 08:54:17 -04:00
parent 17df410999
commit 33000347b4
5 changed files with 16 additions and 43 deletions

View File

@@ -1,3 +1,7 @@
## 0.6.3-2 (2026-04-15)
- Remove the `TZ` add-on option. Application timezone is now auto-derived in the Web UI from the station location (latitude/longitude) via `timezonefinder`, so a separately-configured container `TZ` only ever duplicated — and occasionally conflicted with — the UI-derived zone. All app-facing timestamps (dashboard, API responses, database) and Python service stdout (`api`/`main`/`birdnet`) already honor the UI-derived zone via the logging formatter; the frontend log viewer also re-converts Icecast timestamps on read. Net effect in the HA addon log pane: Python logs keep their local-time timestamps; only Icecast's raw stdout now prints in UTC — an intentional trade for a single source of truth. Deletes the now-redundant `rootfs/etc/cont-init.d/02-timezone.sh` added in 0.5.6-2.
- Clean up the options YAML in DOCS.md and README.md. Removed `RECORDING_MODE` and `RTSP_URL` — these were documented as addon options but never wired: the app reads them from `user_settings.json` (configured via the Web UI), not from env vars. Also dropped `http_stream` from the list of modes (only `pulseaudio` and `rtsp` remain in `backend/config/constants.py`). Moved `STREAM_BITRATE` under an `env_vars:` example since it's honored by `start-icecast.sh` but has never been a first-class option in the schema.
## 0.6.3 (2026-04-13)
- Simplify ingress nginx to a single `<base href>` rewrite. Upstream now declares `<base href="/">` in `index.html` with Vite `base: './'` and uses relative paths for all internal URLs (built assets, axios `baseURL`, socket.io `path`). The previous seven `sub_filter` rules (href/src/`/api`/`/socket.io`) are no longer needed — one `<base href>` replacement is sufficient.
- Removes incidental brittleness from byte-level `sub_filter` matches in minified JS bundles (the old `/stream/` rule had inadvertently double-prefixed the literal `api.get("/stream/config")` string).

View File

@@ -15,14 +15,13 @@
## Options
```yaml
TZ: Europe/Paris # Timezone, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
ICECAST_PASSWORD: "" # Optional: set a persistent password for the audio stream
STREAM_BITRATE: 320k # Bitrate for the mp3 stream
RECORDING_MODE: rtsp # pulseaudio | http_stream | rtsp
RTSP_URL: "" # Required if RECORDING_MODE is rtsp
data_location: /config/data # Persistent data location for BirdNET-PiPy
ICECAST_PASSWORD: "" # Optional: persistent password for the Icecast audio stream
data_location: /config/data # Persistent data location (under /config, /share, or /data)
env_vars: # Optional: extra environment variables
- name: STREAM_BITRATE
value: 320k # Icecast mp3 stream bitrate (default 320k)
```
## Audio
The add-on expects audio via PulseAudio (default) or an RTSP stream configured in the BirdNET-PiPy settings.
The add-on expects audio via PulseAudio (default) or an RTSP stream. Pick the source in the BirdNET-PiPy Web UI under **Settings → Audio** after the add-on first starts.

View File

@@ -25,12 +25,11 @@ Options can be configured through three ways:
- Add-on options
```yaml
TZ: Etc/UTC # Timezone, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
ICECAST_PASSWORD: "" # Optional: set a persistent password for the audio stream
STREAM_BITRATE: 320k # Bitrate for the mp3 stream
RECORDING_MODE: rtsp # pulseaudio | http_stream | rtsp
RTSP_URL: "" # Required if RECORDING_MODE is rtsp
data_location: /config/data # Persistent data location for BirdNET-PiPy
ICECAST_PASSWORD: "" # Optional: persistent password for the Icecast audio stream
data_location: /config/data # Persistent data location (under /config, /share, or /data)
env_vars: # Optional: extra environment variables
- name: STREAM_BITRATE
value: 320k # Icecast mp3 stream bitrate (default 320k)
```
- Config.yaml

View File

@@ -73,7 +73,6 @@ name: BirdNET-PiPy
options:
env_vars: []
ICECAST_PASSWORD: ''
TZ: Europe/Paris
data_location: /config/data
panel_icon: mdi:bird
ports:
@@ -85,7 +84,6 @@ schema:
- name: match(^[A-Za-z0-9_]+$)
value: str?
ICECAST_PASSWORD: str?
TZ: str?
certfile: str?
cifsdomain: str?
cifspassword: str?
@@ -97,4 +95,4 @@ schema:
ssl: bool?
slug: birdnet-pipy
url: https://github.com/alexbelgium/hassio-addons/tree/master/birdnet-pipy
version: "0.6.3"
version: "0.6.3-2"

View File

@@ -1,27 +0,0 @@
#!/usr/bin/with-contenv bashio
# shellcheck shell=bash
set -euo pipefail
# Use timezone defined in add-on options
bashio::log.info "Setting timezone..."
TZ_VALUE="$(bashio::config 'TZ' || true)"
TZ_VALUE="${TZ_VALUE:-Europe/Paris}"
if [ ! -f "/usr/share/zoneinfo/${TZ_VALUE}" ]; then
bashio::log.warning "Invalid timezone '${TZ_VALUE}'. Falling back to Europe/Paris."
bashio::log.warning "See https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for valid values."
TZ_VALUE="Europe/Paris"
fi
# Apply timezone to the container
ln -sf "/usr/share/zoneinfo/${TZ_VALUE}" /etc/localtime
echo "${TZ_VALUE}" > /etc/timezone
export TZ="${TZ_VALUE}"
sed -i "1a TZ=\"${TZ_VALUE}\"" /etc/services.d/*
# Update s6 container environment so child processes inherit the timezone
if [ -d /var/run/s6/container_environment ]; then
echo "${TZ_VALUE}" > /var/run/s6/container_environment/TZ
fi
bashio::log.notice "Timezone set to: ${TZ_VALUE}"