Changelog
[v1.6.0] - 2026-09-28¶
NewThe 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 withALTER TABLE "fritzbox_<serial>" SET TTL 365 DAYS;.NewOptional QuestDB OSS downsampling withQUESTDB_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.NewQuestDB 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.NewA 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.NewDisabling 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 withALTER TABLE "fritzbox_<serial>" SET TTL 365 DAYS;.NewSource installs now usepython -m pip install .;requirements.txtand theVERSIONfile are gone, with dependencies and the version living inpyproject.toml.FixThe startup banner no longer reports versiondevwithout build details; it reads the version from the installed package metadata.
Previous versions...
[v1.5.1] - 2026-09-14¶
NewThe 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_DAYSdoes not change an existing TTL either — adjust it in QuestDB instead, e.g.ALTER TABLE "fritzbox_<serial>" SET TTL 90 DAYS;.NewAddedutils/questdb/server.conf.example, a sample QuestDB server configuration tuned for small, self-hosted deployments.FixGrafana dashboards moved fromgrafana/toutils/grafana/; the QuestDB dashboards are now numbered (01_–04_) so Grafana imports them in the correct order.FixQuestDB 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 neverNULL, so presence is now detected via a companion column instead.
[v1.5.0] - 2026-09-14¶
NewQuestDB tables now get a data retention (TTL) of 30 days, configurable withQUESTDB_DATA_RETENTION_DAYS(0disables it). It is only applied to tables without an existing TTL and requires QuestDB 8.2.2+.FixQuestDB 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.FixLess 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).SecurityPublished 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¶
NewFritzBox services are now queried concurrently (up to 4 at a time) instead of strictly one after another, making polling cycles faster overall.FixA 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.FixA 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.SecurityThe 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¶
FixDatabase 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 likeunreachable:.FixThe QuestDB schema is now ensured only once per process instead of on every reconnect. During a flaky connection this avoids replaying dozens ofALTER TABLEstatements on each connection flap; columns are auto-created by QuestDB's line-protocol writes anyway.
[v1.2] - 2026-06-11¶
NewQuestDB support. QuestDB can now be used as storage backend alongside InfluxDB v1/v2 — configured viaQUESTDB_*variables and a ready-to-usedocker-compose.questdb.yml.NewThe database backend is now selected with a singleDB_TYPEvariable (influxdb_v1,influxdb_v2orquestdb). Invalid values are rejected with a clear error instead of silently falling back to InfluxDB v1.INFLUXDB_VERSIONkeeps working but is deprecated.NewThe database hostname may now be a full URL (e.g.https://influx.example.combehind a reverse proxy) — protocol and port are detected automatically. Port443always enables TLS.NewCredentials and tokens are no longer sent over unencrypted HTTP to remote hosts by default. For trusted home networks this can be allowed explicitly withINFLUXDB_ALLOW_PLAINTEXT_CREDENTIALS=true(orQUESTDB_…); the bundled compose files set this for their internal network.NewUnraid app template with separate, clearly grouped settings for InfluxDB v1/v2 and QuestDB.NewPer-database Docker Compose bundles (docker-compose.influx1.yml,docker-compose.influx2.yml,docker-compose.questdb.yml) including database service, healthcheck and log rotation.NewLOG_LEVELenvironment variable controls log verbosity (INFOby default,DEBUG,WARNINGorERROR). Can also be set with the-lCLI flag.NewFritzBox serial number is now used as the InfluxDB measurement / QuestDB table name with afritzbox_prefix (e.g.fritzbox_AA1234567890).FixQuestDB 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.FixMissing FritzBox fields are pre-created in QuestDB so dashboards no longer abort withInvalid columnjust because an optional value has never been written.FixThe duplicate FritzBox quick-filter has been removed from the QuestDB dashboards; call log tables are fully restored.FixConfiguration errors now stop the container immediately with a clear message instead of triggering pointless restart loops — a broken configuration cannot be fixed by retrying.FixA configured but emptyQUESTDB_HOSTNAMEno longer forces the daemon into QuestDB mode and no longer breaks InfluxDB setups (affected the Unraid template).FixFritzOS lab/beta versions with build suffixes (e.g.7.62-123456) are now recognised correctly instead of disabling services.FixThe FritzBox Lua client now useshttpxlike the rest of the application — the implicit dependency onrequestsis gone.FixImproved error messages: hostname, port and credential problems are reported individually and precisely at startup.FixTimezone suffix in Fritz!Box time responses (e.g.+02:00) no longer causes a log warning during timezone auto-detection.FixQuestDB column names containing dots (e.g. WLAN802.11metrics) are now sanitised automatically — dots are replaced with underscores before writing.FixCable-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¶
NewUpdated base image to Python 3.13 on Debian Trixie.NewAll 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. Theboxtag remains as a human-readable label.NewHTTPS 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. Setssl = trueto enforce HTTPS, orssl = falseto always use HTTP without a warning.NewThe startup banner is now suppressed on watchdog-triggered restarts and only shown once per container start.FixMetrics with dynamic tags (VPN users, network hosts, smart home devices) now correctly carry their identifying tags in InfluxDB — previously these tags were silently dropped.FixBoolean metric values are now written astrue/falseas required by InfluxDB — previously they were written as Python'sTrue/Falseand rejected or misinterpreted.FixMillisecond timestamp precision was incorrectly truncated; timestamps are now stored with the correct precision.FixFritzBox log entries now include timezone information, preventing timestamp mismatches in Grafana for non-UTC setups.FixMetrics 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.FixBackground 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.FixOn 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.FixConnections to FritzBox and InfluxDB are now properly closed on shutdown in all error scenarios.FixConfiguration secrets (passwords, tokens) are now masked in log output even when part of a longer key name (e.g.influxdb_password,api_token).FixInvalid port numbers and missing credentials in the configuration now produce a clear error on startup instead of a confusing runtime failure.FixParsing of malformed or unexpected responses from FritzBox (JSON, XML, call logs) now produces descriptive error messages instead of silent failures.FixWhen 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.FixInfluxDB connection errors no longer produce Python stack traces in the log output.
[v1.0] - 2026-06-08¶
New Initial commit