Skip to content

Changelog

[v1.6.0] - 2026-09-28

  • New The default QuestDB data retention is now 365 days (previously 90). It applies only to a table without a TTL, so existing tables keep their current retention; change it in QuestDB with ALTER TABLE "fritzbox_<serial>" SET TTL 365 DAYS;.
  • New Optional QuestDB OSS downsampling with QUESTDB_DOWNSAMPLING=low|medium|high (30d/1m, 7d/1m, 1d/5m). fritzfluxdb provisions the materialized view and publishes the active profile; QuestDB aggregates and expires data server-side, raw polling is unchanged and no cron job is required.
  • New QuestDB Grafana dashboards use raw data for recent ranges and re-aggregatable rollups for longer ones. Logs, call logs, current snapshots and state histories remain raw-only.
  • New A raw TTL that fritzfluxdb set itself is adjusted when you switch profiles, so raw storage actually shrinks. A TTL of unknown origin is never overwritten; the profile's shorter window is then skipped and the dashboards report the retention that is really in effect.
  • New Disabling downsampling does not restore the previous raw window: rollups and the shortened raw TTL are kept and dashboards fall back to raw only. Widen it with ALTER TABLE "fritzbox_<serial>" SET TTL 365 DAYS;.
  • New Source installs now use python -m pip install .; requirements.txt and the VERSION file are gone, with dependencies and the version living in pyproject.toml.
  • Fix The startup banner no longer reports version dev without build details; it reads the version from the installed package metadata.
Previous versions...

[v1.5.1] - 2026-09-14

  • New The default QuestDB data retention is now 90 days (previously 30). It only applies to tables that do not have a TTL yet, so tables created by an earlier version keep their 30 days. QUESTDB_DATA_RETENTION_DAYS does not change an existing TTL either — adjust it in QuestDB instead, e.g. ALTER TABLE "fritzbox_<serial>" SET TTL 90 DAYS;.
  • New Added utils/questdb/server.conf.example, a sample QuestDB server configuration tuned for small, self-hosted deployments.
  • Fix Grafana dashboards moved from grafana/ to utils/grafana/; the QuestDB dashboards are now numbered (01_–04_) so Grafana imports them in the correct order.
  • Fix QuestDB dashboards no longer show "False" for boolean fields (Upgrade Available, DDNS Enabled, VPN Active/Connected) that were never reported by the FritzBox — QuestDB booleans are never NULL, so presence is now detected via a companion column instead.

[v1.5.0] - 2026-09-14

  • New QuestDB tables now get a data retention (TTL) of 30 days, configurable with QUESTDB_DATA_RETENTION_DAYS (0 disables it). It is only applied to tables without an existing TTL and requires QuestDB 8.2.2+.
  • Fix QuestDB storage no longer grows by gigabytes per day: all values of one FritzBox query are now written as a single row instead of one row per value. InfluxDB stores the data exactly as before.
  • Fix Less aggressive polling: TR-064 data and smart home devices are now read every 60 seconds (previously 10), active network hosts every 10 minutes (previously 2).
  • Security Published Docker images are now blocked when Trivy finds fixable HIGH or CRITICAL vulnerabilities; registry credentials are used only after the image passes its checks.

[v1.4] - 2026-09-04

  • New FritzBox services are now queried concurrently (up to 4 at a time) instead of strictly one after another, making polling cycles faster overall.
  • Fix A FritzBox service that keeps failing is now automatically backed off with an increasing delay instead of being retried every cycle, and repeated connection errors are logged only once every 5 minutes instead of flooding the log on every failed request.
  • Fix A retryable InfluxDB/QuestDB write failure no longer leaves a broken connection open — this previously caused the retry delay to be doubled twice and the "connection restored" log message to report an incorrect number of flushed measurements.
  • Security The Docker release workflow no longer exposes DockerHub registry credentials as job-wide environment variables; they are now scoped only to the steps that need them.

[v1.3] - 2026-06-15

  • Fix Database connection errors now name the underlying cause (e.g. ConnectError, ReadTimeout) instead of logging an empty message — several httpx transport errors have a blank text, which previously produced uninformative lines like unreachable:.
  • Fix The QuestDB schema is now ensured only once per process instead of on every reconnect. During a flaky connection this avoids replaying dozens of ALTER TABLE statements on each connection flap; columns are auto-created by QuestDB's line-protocol writes anyway.

[v1.2] - 2026-06-11

  • New QuestDB support. QuestDB can now be used as storage backend alongside InfluxDB v1/v2 — configured via QUESTDB_* variables and a ready-to-use docker-compose.questdb.yml.
  • New The database backend is now selected with a single DB_TYPE variable (influxdb_v1, influxdb_v2 or questdb). Invalid values are rejected with a clear error instead of silently falling back to InfluxDB v1. INFLUXDB_VERSION keeps working but is deprecated.
  • New The database hostname may now be a full URL (e.g. https://influx.example.com behind a reverse proxy) — protocol and port are detected automatically. Port 443 always enables TLS.
  • New Credentials and tokens are no longer sent over unencrypted HTTP to remote hosts by default. For trusted home networks this can be allowed explicitly with INFLUXDB_ALLOW_PLAINTEXT_CREDENTIALS=true (or QUESTDB_…); the bundled compose files set this for their internal network.
  • New Unraid app template with separate, clearly grouped settings for InfluxDB v1/v2 and QuestDB.
  • New Per-database Docker Compose bundles (docker-compose.influx1.yml, docker-compose.influx2.yml, docker-compose.questdb.yml) including database service, healthcheck and log rotation.
  • New LOG_LEVEL environment variable controls log verbosity (INFO by default, DEBUG, WARNING or ERROR). Can also be set with the -l CLI flag.
  • New FritzBox serial number is now used as the InfluxDB measurement / QuestDB table name with a fritzbox_ prefix (e.g. fritzbox_AA1234567890).
  • Fix QuestDB dashboards now show the same user metrics as the InfluxDB dashboards, including home automation heating, call log details, VPN address fields, MyFritz hostname and current DSL download/upload values.
  • Fix Missing FritzBox fields are pre-created in QuestDB so dashboards no longer abort with Invalid column just because an optional value has never been written.
  • Fix The duplicate FritzBox quick-filter has been removed from the QuestDB dashboards; call log tables are fully restored.
  • Fix Configuration errors now stop the container immediately with a clear message instead of triggering pointless restart loops — a broken configuration cannot be fixed by retrying.
  • Fix A configured but empty QUESTDB_HOSTNAME no longer forces the daemon into QuestDB mode and no longer breaks InfluxDB setups (affected the Unraid template).
  • Fix FritzOS lab/beta versions with build suffixes (e.g. 7.62-123456) are now recognised correctly instead of disabling services.
  • Fix The FritzBox Lua client now uses httpx like the rest of the application — the implicit dependency on requests is gone.
  • Fix Improved error messages: hostname, port and credential problems are reported individually and precisely at startup.
  • Fix Timezone suffix in Fritz!Box time responses (e.g. +02:00) no longer causes a log warning during timezone auto-detection.
  • Fix QuestDB column names containing dots (e.g. WLAN 802.11 metrics) are now sanitised automatically — dots are replaced with underscores before writing.
  • Fix Cable-specific services (e.g. cable channel info) are no longer logged as warnings on DSL devices — the message is suppressed after the first discovery pass.

[v1.1] - 2026-06-09

  • New Updated base image to Python 3.13 on Debian Trixie.
  • New All data is now written to a single InfluxDB measurement named after the FritzBox serial number. Replacing a FritzBox automatically creates a new measurement, keeping historical data cleanly separated. The box tag remains as a human-readable label.
  • New HTTPS is now used by default without requiring configuration. fritzfluxdb tries HTTPS first (accepting the FritzBox self-signed certificate) and only falls back to plain HTTP if the port is unreachable. A warning is shown when falling back. Set ssl = true to enforce HTTPS, or ssl = false to always use HTTP without a warning.
  • New The startup banner is now suppressed on watchdog-triggered restarts and only shown once per container start.
  • Fix Metrics with dynamic tags (VPN users, network hosts, smart home devices) now correctly carry their identifying tags in InfluxDB — previously these tags were silently dropped.
  • Fix Boolean metric values are now written as true/false as required by InfluxDB — previously they were written as Python's True/False and rejected or misinterpreted.
  • Fix Millisecond timestamp precision was incorrectly truncated; timestamps are now stored with the correct precision.
  • Fix FritzBox log entries now include timezone information, preventing timestamp mismatches in Grafana for non-UTC setups.
  • Fix Metrics with integer values outside the signed 64-bit range (e.g. after an AVM byte counter glitch) are now silently dropped instead of causing a write error.
  • Fix Background task failures now result in a non-zero exit code, allowing the watchdog or container orchestrator to detect and restart the process. Previously a failed background worker would be silently ignored.
  • Fix On graceful shutdown, producer tasks are stopped first, the measurement queue is drained, and the InfluxDB writer is stopped last — reducing the risk of data loss on container stop.
  • Fix Connections to FritzBox and InfluxDB are now properly closed on shutdown in all error scenarios.
  • Fix Configuration secrets (passwords, tokens) are now masked in log output even when part of a longer key name (e.g. influxdb_password, api_token).
  • Fix Invalid port numbers and missing credentials in the configuration now produce a clear error on startup instead of a confusing runtime failure.
  • Fix Parsing of malformed or unexpected responses from FritzBox (JSON, XML, call logs) now produces descriptive error messages instead of silent failures.
  • Fix When InfluxDB is unavailable, only a single error is logged at the moment of the outage. Subsequent retries are silent. Once the connection is restored, one info message confirms recovery and reports how many buffered measurements are being flushed.
  • Fix InfluxDB connection errors no longer produce Python stack traces in the log output.

[v1.0] - 2026-06-08

New Initial commit