Repository navigation
Releases: EnricoFlammini/Dashboard_EERO
Release list
eero Custom Dashboard & Management Suite — v1.6.1
Highlights & New Features
Full Settings Localization & Loading Flash (FOUT) Elimination (PR #78 - thanks to @todddube)
- 100% Translated Settings & Modals: Removed all remaining hardcoded Italian strings across Controls, Users, Backup, Data Export, and Updates pages. System modals (MQTT Discovery, Schedules, Clear Logs, Update Container) now render natively in the user's selected language.
- Dynamic Parameter Interpolation: Replaced inline ternaries with clean i18n keys and native parameter interpolation (
{version},{minutes},{time}). - Elimination of Untranslated Flashes (FOUT): Introduced an
i18n-pendingstate that smoothly hides the page until locale strings are fetched, with an automatic 4-second CSS safety reveal fallback. - 1:1 Locale Parity: Synchronized all 974 keys between
en.jsonandit.json.
Subnet-Aware IPv4 Prioritization & Pi-hole v6 Stale Record Pruning (Issue #72 - thanks to @onefish2)
- Physical LAN Subnet Scoring: Multi-IP hosts running container runtimes (Docker, Podman) are now accurately assigned their physical eero LAN IP rather than virtual bridge addresses (
172.17.x.x,10.88.x.x). - Smart Pi-hole v6 Pruning: Automatic removal of expired DHCP leases and obsolete mappings via REST API
PATCH /api/config, while strictly preserving custom unmanaged records (printers, local lab servers). - Per-Device "Exclude from DNS Sync" Toggle: Added a dedicated
dns_sync_excludedswitch in#deviceDetailModalto exclude specific devices from DNS sync without manual configuration hacks.
Robust Account Network Discovery & Zero-Network Guidance (Issue #69 - thanks to @tekzer0)
- Universal Payload Parsing: Supports non-standard or single-dictionary eero API responses and raw
/2.2/networksarrays. - Environment Fallback (
EERO_NETWORK_ID): Transparent fallback to the configured environment variable when accounts have delegated or restricted network scopes. - Zero-Network Guide Banner: Clear in-app guidance with quick retry controls and total protection preventing demo devices from contaminating production databases.
Speed Test Bufferbloat Scoring & Duration Units Localization (Issue #71 - thanks to @XprofQ / @todddube)
- Bufferbloat Badge Display Fix:
getBufferbloatGrade()inapp.jsnow directly readsst.bufferbloat_grade,st.ping_under_load, andst.bufferbloat_delta_ms, resolving the"n/a Non Disponibile"reporting bug. - Instant Metric Loading: Speed test metrics and graphs are loaded immediately upon dashboard initialization.
- Localized Retention Units: Buttons dynamically display
7d/7gg,15d/15gg,1mo/1mmatching the selected language.
Daily Digest Restart Idempotency & Custom Dispatch Hour (Issue #70 - thanks to @stevehoek / @todddube)
- Zero Duplicate Notifications: Persistent SQLite tracking of
last_daily_digest_dateprevents notification bursts when containers restart during the dispatch window. - Timezone & Hour Customization: Full support for
DAILY_DIGEST_HOUR(0–23) andTZwith an interactive time-picker in the dashboard.
Multi-Tier Selective Compaction, Timestamp Indexes & Resilient Bitrates (Issues #73, #74)
- Incremental Compaction: Only processes uncompacted hours, reducing CPU overhead by 99.4%.
- B-tree Expression Indexes: Instant queries on SQLite timestamps.
- Synology DSM 7.2+ Template: Added a dedicated deployment template for Synology Container Manager (PR #66).
Community Credits
A huge thank you to our community contributors and testers who made this release possible:
- @todddube for PR #78 (complete settings localization & loading flash fix), PR #66 (Synology DSM deployment template), and testing Issue #70 & #71.
- @onefish2 for reporting and verifying physical subnet prioritization and Pi-hole v6 pruning (Issue #72).
- @tekzer0 for detailed API payload captures and testing zero-network guidance (Issue #69).
- @XprofQ for identifying the bufferbloat grade frontend disconnect (Issue #71).
- @stevehoek for identifying the Daily Digest restart loop (Issue #70).
How to Update
Docker Compose
docker compose pull && docker compose up -dDocker CLI
docker pull enricoflammini/eero-dashboard:latest
docker stop eero-dashboard && docker rm eero-dashboard
# Restart with your existing docker run commandRelease Candidate v1.6.1-rc.1 — Subnet-Aware IPv4 DNS Sync, Pi-hole v6 Pruning, Resilient Network Discovery & WAL Hardening
Status: Pre-Release Candidate available on branch test for community validation.
Docker Hub Image: enricoflammini/eero-dashboard:test
Test Suite: 1,468 / 1,468 passing (100%).
Key Highlights & Improvements
1. Subnet-Aware IPv4 LAN Routing & Pi-hole v6 Pruning (#72 - @onefish2)
- Subnet Prioritization: A 5-tier scoring algorithm in
_sort_ipv4_candidatesprioritizes physical LAN IPs (e.g.,192.168.0.37) over virtual container bridge gateways (172.17.0.1,10.88.0.1). - Pi-hole v6 Lease Pruning: Automated pruning via atomic
PATCH /api/configremoves outdated DHCP leases for managed hosts while leaving manually created DNS entries untouched. - DNS Sync Exclusion Toggle: Devices can now be excluded from DNS synchronization via the
dns_sync_excludedflag in the device detail modal.
2. Resilient Account Network Discovery (#69 - @tekzer0)
- Universal Discovery Parser: Supports non-standard account payloads (singular keys, URLs, flat lists), resolving cases where available networks returned zero.
EERO_NETWORK_IDFallback: Supports direct network binding via environment variable for shared or delegated accounts.- Empty Network Guidance: Displays an actionable banner ("No eero Networks Detected") with retry/switch account controls. Demo mode placeholders will not contaminate empty live sessions.
3. Daily Digest Idempotency & Custom Scheduling (#70 - @stevehoek / @todddube)
- Restart Idempotency: The dispatch date is recorded in SQLite (
last_daily_digest_date), preventing duplicate notifications on container restarts. - Timezone-Aware Scheduling: Configurable dispatch hour via
DAILY_DIGEST_HOUR(default21) andTZsupport with full IANAzoneinfoawareness. - UI Selector: Delivery hour configuration is exposed directly in the Daily Digest settings card.
4. Bufferbloat Telemetry & UI Localization (#71 - @XprofQ / @todddube)
- Bufferbloat Telemetry: Speed test indicators now directly read persisted SQLite metrics (
bufferbloat_grade,ping_under_load), eliminating false-positive "Not Available" badges. - Data Preloading: Speed test metrics load eagerly on initial mount.
- Bilingual Support: Dynamic English/Italian translation for bufferbloat ratings and retention period abbreviations (
7d/7gg,15d/15gg,1mo/1m).
5. Compaction Engine, Expression Indexes & Bitrate Parsing (#73 - @mrtekkid)
- Selective Retention Compaction: Routine hourly cycles process only unaggregated records, reducing background compaction overhead by over 99%.
- B-Tree Expression Indexes: Expression indexes on normalized timestamps eliminate full table scans during aggregations.
- Universal Bitrate Parser:
parse_bitrate_floatsafely handles float values and unit strings (MBit/s,Mbps,Gbps,kbps), eliminating worker crashes.
6. SQLite WAL Hardening, Integrity API & Online Hot Backup (#74 - @WillFulmer)
- WAL Checkpointing: Startup configuration (
PRAGMA wal_autocheckpoint = 1000;) and passive checkpointing prevent unbounded-walfile growth. - Hot Online Backup:
POST /api/system/database/backupuses SQLite's nativeVACUUM INTOto produce consistent, defragmented snapshots suitable for host-level backup tools without file locking risks. - Integrity Diagnostics: Diagnostic checks available via
GET /api/system/database/integrity.
7. Interface Polish & Synology DSM Support (PRs #66, #75, #76, #77 - @todddube)
- UI Enhancements: Resolved login form flash on page reload, added initial scan device baselining (bypassing the 7-day "NEW" flag), and added a column visibility selector in the device table.
- Session Persistence: Added an explicit "Remember Me" toggle (7-day cookie expiration) alongside an ephemeral session-only default.
- Synology DSM 7.2+ Documentation: Deployment documentation and Compose templates available in
deploy/synology/.
Community Contributors
Special thanks to our contributors and community testers for this release:
- @onefish2 — IPv4 candidate prioritization and Pi-hole v6 pruning logic (#72).
- @tekzer0 — Resilient multi-network eero discovery and zero-network UI handling (#69).
- @mrtekkid — Retention worker optimization, SQLite expression indexes, and bitrate parsing (#73).
- @XprofQ — WAN Bufferbloat telemetry corrections and localization fixes (#71).
- @WillFulmer — SQLite WAL checkpointing and
VACUUM INTObackup tooling (#74). - @stevehoek — Daily digest restart idempotency verification (#70).
- @todddube — Synology DSM 7.2+ guide (#66), digest schedule settings (#70), UI polish (PRs #75, #76, #77).
Deployment & Testing
Docker Compose
services:
eero-dashboard:
image: enricoflammini/eero-dashboard:test
container_name: eero-dashboard
restart: unless-stopped
ports:
- "8085:8000"
environment:
- DAILY_DIGEST_HOUR=21
- TZ=Europe/Rome
# - EERO_NETWORK_ID=your_network_id # Optional
volumes:
- ./data:/app/dataApply updates:
docker compose pull
docker compose up -dDocker CLI
docker pull enricoflammini/eero-dashboard:test
docker run -d \
--name eero-dashboard \
-p 8085:8000 \
-v $(pwd)/data:/app/data \
-e TZ=Europe/Rome \
-e DAILY_DIGEST_HOUR=21 \
enricoflammini/eero-dashboard:testDocumentation
Consult changelog.md and docs/EERO_DASHBOARD_KNOWLEDGE_BASE.md for full architectural specifications, schema migrations, and technical deep-dives.
v1.6.0 — Offline-First Architecture, Zero-Default Security, IPv6 ULA Enrichment & Homelab Integration
🚀 eero Custom Dashboard & Management Suite v1.6.0
We are thrilled to announce v1.6.0 (Build 1), one of the biggest milestones in the project's history! This release brings a fully 100% Offline-First architecture (zero external CDN dependencies), a Zero-Default Setup Wizard for secure first-run onboarding, Reverse Client Enrichment for IPv6 ULA addresses, SQLite concurrency hardening, deep Homelab integrations (MQTT, Home Assistant, Prometheus, Grafana), and numerous UI/UX enhancements driven directly by our community!
🏆 Community Hall of Fame & Special Acknowledgments
This release was significantly shaped by community feedback, bug reports, and pull requests. A huge thank you to:
- @jpatchMC:
- Proposed and co-designed the IPv6 ULA Reverse Client Enrichment architecture and ingestion API (#57, #65).
- Advocated and helped implement the Local Asset Bundling initiative for true 100% air-gapped/offline LAN resilience (#58).
- Designed the automatic lifecycle pruning for stale discovered addresses.
- @DannyFeliz:
- Proposed the "Recently Joined" device sorting logic and the dynamic high-visibility emerald
NEWbadge for newly connected devices (#60).
- Proposed the "Recently Joined" device sorting logic and the dynamic high-visibility emerald
- @WillFulmer:
- @jonmacdonald:
- Diagnosed and reported the SQLite database lock contention (#62).
- Validated the
_write_lockserialization mutex, 60s timeout, andbusy_timeout=60000pragma fixes.
🌟 What's New in v1.6.0
📦 1. 100% Offline-First & Air-Gapped LAN Resilience (#58)
- Zero External CDN Dependencies: Tailwind CSS, Alpine.js, Chart.js, and Lucide Icons are now 100% bundled locally in
app/static/vendor/. - Self-Hosted Typography: WOFF2 fonts for Inter and JetBrains Mono are hosted locally via
@font-facerules. - ISP Blackout / Air-Gapped Proof: The dashboard loads, renders, and operates completely offline inside your local LAN without needing an active WAN or Internet connection.
- PWA Service Worker: Pre-caches all local assets and vendor scripts for instant loading and mobile progressive web app functionality.
🔐 2. Zero-Default Security & First-Run Setup Wizard
- No More Hardcoded Default Credentials: Removed all hardcoded
admin / admincredentials and login helpers. - Guided First-Run Onboarding: A new interactive setup modal opens automatically on first launch if no admin account exists, prompting you to set your custom administrator credentials.
- Headless Deployment Support: Pass optional
ADMIN_USERandADMIN_PASSWORDenvironment variables indocker-compose.ymlfor automated or CI/CD deployments.
🔍 3. Reverse Client Enrichment & IPv6 ULA Discovery (#57, #65)
- Overcoming eero L2 Routing Limits: Resolves the issue where local DNS queries to local AdGuard Home/Pi-hole servers over IPv6 Unique Local Addresses (
fd00::/8) bypass eero cloud visibility. - Dedicated Ingestion REST API:
POST /api/network/enrichment/neighborsallows external scripts, cron jobs, or AdGuard sidecars to puship <-> macneighbor mappings securely. - Active NDP Probing Worker: Async ICMP and kernel neighbor table inspection (
ip -6 neigh) automatically resolves MAC addresses. - Full-Circle AdGuard Home Sync: Discovered ULAs are attached to client IDs and synchronized back to AdGuard Home, seamlessly grouping unnamed IPv6 clients under their friendly eero device name!
ULA EnrichedUI Badges: Distinctive amethyst/fuchsia badges and detail views in both the main table and device modal.
🆕 4. "Recently Joined" Sorting & Device Badges (#60)
- First-Seen Tracking: Persisted
first_seentimestamps for every device in the network. - Dynamic
NEWBadges: Displays an eye-catching emerald green pulse badge for devices connected within the last 7 days / 24 hours. - Sort by First Seen: One-click sorting by newest/oldest connected devices in both desktop toolbar and mobile quick filters.
- Relative First-Seen Timing: Instantly see relative times (
Just now,5m ago,2h ago,3d ago) right in the device table row and detail modal.
🛠️ 5. SQLite Concurrency & Stability Hardening (#62)
- Eliminated Container Log Lock Errors: Introduced an async serialization
_write_lockinDBServiceto prevent concurrent write collisions. - 60s Lock Timeout: Enabled
PRAGMA busy_timeout = 60000;on all database connections to gracefully wait out heavy bursts. - Sequential Polling Tasks: Replaced unhandled background tasks with tracked, sequential polling runs to eliminate unretrieved task exception logs.
🪵 6. Live Log Viewer Console & Dynamic Log Levels
- Terminal-Style Live Viewer: Embedded dark acrylic log console with full-text search, severity filtering (DEBUG, INFO, WARNING, ERROR), JSON inspection, and auto-refresh.
- On-the-Fly Log Level: Change log levels dynamically via web UI or API without restarting the container.
- Retention & Export: Configure retention periods and export logs to RFC 5424
.logor structured.json.
🏠 7. Homelab Integrations: MQTT, Home Assistant & Prometheus
- Home Assistant MQTT Auto-Discovery: Publishes telemetry sensors (
WAN Download/Upload,Network Health,Clients Online,Bufferbloat Grade,Nodes Online) anddevice_trackerentities. - Prometheus / OpenMetrics Endpoint: Native
/metricsendpoint for scraping via Prometheus, VictoriaMetrics, or Grafana Agent. - 13-Panel Grafana Dashboard: Pre-built template available in
deploy/grafana/eero_dashboard.json. - Multi-Channel Alerts: Instant notifications via Telegram, Discord Webhooks, and Pushover for Bufferbloat degradation, mesh anomalies, brute-force attempts, and backup status.
📱 8. Open Guest Wi-Fi QR Code & Digest Transparency (#63, #64)
- Open Guest Wi-Fi QR Codes: Follows universal Wi-Fi Alliance syntax (
WIFI:S:<SSID>;T:nopass;H:<hidden>;;) for open guest networks without passwords. - Daily Digest Transparency: Shows active notification delivery channels in real time with quick navigation links.
📖 9. Interactive 2-Column Technical Manual & UI Polish
- Built-in Quick Guide & Manual: Interactive 2-column modal with live text search, deep-linking, category sidebar, and 16 bilingual chapters.
- Traffic Column Fix: Resolved text overflow where live throughput badges collided with the Online/Offline status pill.
v1.5.0 — Multi-Network Fleet Switcher, Per-Device Data Usage & Network Analytics
eero Custom Dashboard v1.5.0
Version v1.5.0 is here! This release brings multi-network management, per-device historical data tracking, extended network analytics, and critical security hardening.
What's New
- ** Multi-Network Fleet Switcher (#22):** Switch between multiple eero networks under the same account on-the-fly using the top header dropdown — zero restarts required.
- ** Per-Device Data Usage Suite:** View historical data usage (Download/Upload) per client across 24 hours, 7 days, and 30 days, plus a new Top Bandwidth Hogs overview widget.
- ** Network Analytics & SLA Dashboard:** New dedicated analytics page tracking Wi-Fi band distributions, mesh node load balancing, vendor breakdown, and ISP SLA reliability trends.
- ** 1-Click Data Export:** Easily export device inventories, WAN speedtest histories, Wi-Fi RSSI signals, and data usage records directly to CSV or JSON.
- ** Intelligent DNS & Address Pruning (#30, #31):** Cleans up stale DHCP leases and rotating SLAAC IPv6 addresses in AdGuard Home without affecting custom tags or aliases.
- ** Dual-Stack IPv6 Visibility (#43):** Live search table filtering by IPv6 address/prefix and dedicated IPv6 details inside the client modal.
- ** Security Hardening:** Patched 4 GHSA advisories (CORS/CSRF middleware, Wi-Fi credential sanitization, secure
session.jsonpermissions, and optional Swagger docs).
Key Fixes & Improvements
- Node ID & Gateway Election (#26, #49): Switched to exact URL path matching to prevent node ID collisions and incorrect primary gateway elections.
- Telemetry Accuracy (#48, #50, #52): Removed synthetic speedtest fallbacks, fixed 5 GHz UNII-3 / 6 GHz channel classifications, and ensured only genuine live metrics are logged.
- Live Session Isolation (#47): Authenticated accounts with temporary cloud lookups no longer fall back to demo data.
- Node Load Matching (#41): Replaced substring matching with exact string/ID equality, fixing 0-device counts on similarly named nodes.
- Bilingual Localization (#38): Full English/Italian localization across daily digests, alerts, and settings.
Special Thanks
A massive thank you to our community contributors for their feedback, testing, and PRs:
@carbones73, @jpatchMC, @Hatton920, @jimcampbell100, @stevehoek, @DannyFeliz, @BaRaD5, @jonmacdonald, @phutmacher, @txrangersxx, @nextlevel2023, and u/djbills.
Upgrade & Run
docker compose pull && docker compose up -dv1.5.0-beta.1 — Multi-Network Fleet Switcher, Device Data Usage, Network Stats & Bilingual Digest
eero Dashboard v1.5.0 (Beta / Pre-Release)
v1.5.0-beta.1 is now available for testing via the Docker Hub :test tag (enricoflammini/eero-dashboard:test).
This update introduces multi-network switching, historical per-device data consumption, a dedicated statistics dashboard, and complete bilingual localization (EN/IT).
Highlights & New Features
- Multi-Network Fleet Switcher (#22): Switch seamlessly between different eero networks under the same account directly from the header dropdown, without restarting or re-authenticating.
- Per-Device Data Usage Suite: Track data consumption (Download/Upload) and real-time throughput per device over 24 hours, 7 days, or 30 days. Includes a new Top Bandwidth Hogs widget on the main dashboard.
- Network Statistics & SLA Dashboard: New dedicated analytics page featuring ISP uptime SLA, latency/speed history over time, and distribution charts (Wi-Fi bands, node load, device categories) with interactive device tooltips.
- Full Bilingual Support & Daily Digest (#38): Telegram reports, intruder alerts, offline node warnings, and dashboard cards now fully respect your selected language (
enorit). - Intelligent IP Pruning for DNS (#30, #31): Automatically cleans up stale DHCP leases and rotating IPv6 SLAAC addresses in AdGuard Home while preserving custom hostnames, tags, and rules.
- Gateway Topology Fix (#36): Strict 5-tier detection preventing secondary wired mesh nodes on switches from falsely registering as the primary WAN gateway.
- 1-Click Data Export: Export devices, signal metrics, speed tests, and consumption history directly to CSV or JSON.
v 1.4.01 Fix
v1.4.01
- Fix Primary Gateway Resolution with PoE & Mixed Mesh Nodes (Issue #26)
- Custom DNS Servers Extraction & Developer IP Fallback Removal (Issue #30)
- Dynamic 6 GHz Wireless Backhaul Detection for Wi-Fi 6E / Wi-Fi 7 Mesh Nodes
- Fix Device Table Frequency Band Filters (ReferenceError Resolution)
- Align Daily Digest Metrics & Expose line_stability in Webhook Payload (Issue #32)
- Accurate Mesh Offline Node Detection & Rebooting State Differentiation (Issue #34)
- Prevent Mock TIM Telemetry Leakage into Performance History & SQLite Purge (Issue #35)
v1.4.0 — Windows 11 Fluent UI, Collapsible Sidebar, Native Pi-hole v6 REST API, Health Score Diagnostics & Port Forwarding Overhaul
What's New in v1.4.0
Version v1.4.0 delivers a complete visual restyling inspired by Windows 11 Fluent Design, a collapsible vertical sidebar navigation, interactive network health diagnostics, native Pi-hole v6 REST API synchronization, overhauled Port Forwarding and DHCP reservation parsing, historical Wi-Fi signal tracking, and major DNS polling optimizations.
🎨 Windows 11 Fluent Design & Dual-Theme Engine
- Refined Fluent Aesthetics: Layered Mica and Acrylic materials, Segoe UI Variable typography, soft borders, and adaptive color palettes.
- 3-State Theme Toggle: Seamlessly switch between ☀️ Light, 🌙 Dark, or 💻 System Auto in the header with zero screen flicker (anti-FOUC) and dynamic real-time Chart.js palette adaptation.
📐 Collapsible Sidebar Navigation & Quick Controls
- Replaced top horizontal tabs with an expandable vertical sidebar (
256pxexpanded ↔68pxcollapsed) withlocalStoragestate persistence. - Repositioned Gaming Focus Mode and Demo Mode into persistent sidebar controls, featuring an emerald green indicator when Demo Mode is active.
❤️ Interactive Network Health Score Breakdown & Diagnostics (Issue #15)
- The circular Health Score badge in the header is now interactive. Clicking it opens a diagnostic modal evaluated across 4 core pillars (100 pts total):
- Mesh Topology & Backhaul (Max 40 pts): Node reachability, offline node penalties, and degraded wired/wireless backhauls.
- WAN Gateway & Internet Ping (Max 30 pts): Uplink status, gateway state, and WAN latency.
- Client Wi-Fi Signal Quality (Max 20 pts): Pinpoints devices with degraded RSSI (< -75 dBm / < -82 dBm).
- Channel Distribution & Band Density (Max 10 pts): 6 GHz / 5 GHz / 2.4 GHz balance and channel congestion.
- Detailed penalty breakdown listing active point deductions, affected nodes/devices, and dynamic optimization recommendations.
🛡️ Multi-Engine DNS Synchronizer & Pi-hole v6 REST API (Issue #25)
- Native Pi-hole v6 REST API: Full synchronization using atomic batch
PATCH /api/configandGET /api/config/dns/hosts, supporting passwordless instances and session SID authentication, with automatic fallback to the v5 API. - Optional Domain Zone / Bare Hostnames: The domain suffix (
.lan) is now optional. When omitted, clean bare hostnames (e.g.,nas,printer,server) are synced directly. - Multi-Instance Support: Simultaneously configure, test, and synchronize multiple heterogeneous DNS engines (e.g., 2 AdGuard Home servers + 1 Pi-hole).
- IPv6 Privacy Extension Filter (Issue #23): CLI flag
--drop-ipv6and environment variableEERO_DROP_IPV6=trueto prevent rotating SLAAC IPv6 addresses from polluting DNS logs.
⚙️ Port Forwarding & DHCP Reservation Normalization
- FastAPI Route Precedence Fix: Resolved a route-shadowing collision where the catch-all wildcard
/{path}intercepted calls to/{mac}/rules, ensuring port rules and reservations load reliably in the device modal. - Bidirectional Correlation (
dev_map&res_map): Recursively parses port forwarding rules and reservations that link to internal eero resource URLs rather than root IP fields. - Persistent
STATICBadge: Devices with active reservations now reliably retain the greenSTATICbadge in the client table.
⚡ 99.9% DNS Query Optimization (Issue #24)
- Implemented persistent HTTP Connection Pooling (120s TLS Keep-Alive) and an in-memory thread-safe DNS TTL cache (300s). Upstream DNS queries to
api-user.e2ro.comare slashed from ~160,000 queries/month to near zero, cutting polling loop latency from ~1.5s to ~250ms.
📶 Wi-Fi Signal Quality & Historical RSSI Analytics
- Continuous SQLite time-series logging for client RSSI levels (dBm), PHY rates, and frequencies.
- Weak Signal Watchlist: Quickly identifies devices struggling with poor coverage along with node placement advice.
- Interactive Chart.js time-series analysis with 24h and 7d historical trends.
🔄 1-Click In-App Docker Auto-Update
- Background version polling against Docker Hub and GitHub Releases with an animated header badge.
- 1-click container recreation directly from the web UI via Docker socket (
/var/run/docker.sock) or Watchtower webhooks.
📦 Docker Pull Commands & Upgrade
Multi-architecture images (amd64 & arm64) are available on Docker Hub:
# Pull latest stable release
docker pull enricoflammini/eero-dashboard:latest
# Or pull the specific v1.4.0 release tag
docker pull enricoflammini/eero-dashboard:v1.4.0v. 1.03.03 - Fix 3
[1.03.03] - 2026-08-31
🌐 Fix Risoluzione Primary Gateway Mesh in Bridge & Routed Mode (#19)
- 🌐 Risoluzione Accurata del Nodo Gateway Principale (Issue #19):
- Risolto il bug di casting booleano indiscriminato in cui i campi stringa URL/ID (es.
"/2.2/eeros/104") restituiti dall'API eero come puntatore al nodo root venivano valutati comeTrueper tutti i beacon/nodi foglia della rete, forzando tutti i nodi suGateway (WAN)ed eleggendo erroneamente il primo nodo alfabetico (es. Bedroom al posto di Wiring Closet). - Introdotto il metodo
_is_gateway_nodeineero_client.pyper confrontare le chiavi URL, ID, serial e IP locali con il puntatore gateway effettivo, supportando in modo trasparente reti in Bridge Mode (con router/DHCP esterno come Peplink, pfSense o modem operatore) e reti standard in Routed Mode. - Implementato algoritmo di riconciliazione univoca in
get_eerosper garantire l'elezione di un singolo Primary Gateway certificato anche in caso di ambiguità nei payload cloud.
- Risolto il bug di casting booleano indiscriminato in cui i campi stringa URL/ID (es.
🛡️ Preservazione Regole AdGuard Home & Distinzione Tag Desktop/Laptop (#21)
- 🛡️ Preservazione Integrale Regole e Filtri Client su AdGuard Home (Issue #21):
- Risolto il bug di sincronizzazione per cui le chiamate
POST /control/clients/updateverso AdGuard Home azzeravano i parametri custom impostati dall'utente. - Implementato il metodo
_merge_adguard_client_dataper ereditare e mantenere al 100% tutte le regole attive: server DNS personalizzati (upstreams), servizi bloccati (blocked_services), pianificazioni (blocked_services_schedule),parental_enabled,safebrowsing_enabled,safesearch_enabled,use_global_settings, filtri querylog e tag personalizzati. - Unito l'elenco degli identificatori (
ids) preservando eventuali IP, alias o MAC aggiunti manualmente in AdGuard senza sovrascriverli.
- Risolto il bug di sincronizzazione per cui le chiamate
- 🖥️ Distinzione Accurata Tag Desktop / PC vs Laptop (
device_pc/device_laptop):- Perfezionato
map_eero_device_typeeget_adguard_tagsper distinguere i PC fissi/workstation/tower (assegnando iconapce tagdevice_pc) dai portatili (assegnando iconalaptope tagdevice_laptop).
- Perfezionato
v 1.03.01 - fix 1
⚡ Fix Negoziazione Porte Ethernet Nodi Mesh & Telemetria Dispositivi (#14)
- ⚡ Priorità Porta WAN/Upstream su Nodi Mesh Multi-Porta (Issue #14):
- Risolto il caso di nodi con più porte attive (es. Bedroom con uplink 2.5 Gbps verso Living Room e porta LAN 1 Gbps): il sistema ora identifica e prioritizza la porta WAN (
isWanPort,is_wan_porto conneighbour) rispetto alle porte LAN client locali. - Risolto il bug di parsing in cui stringhe di frequenza Wi-Fi (es.
"5GHz") venivano scambiate per link Ethernet a 5.0 Gbps (5000 Mbps).
- Risolto il caso di nodi con più porte attive (es. Bedroom con uplink 2.5 Gbps verso Living Room e porta LAN 1 Gbps): il sistema ora identifica e prioritizza la porta WAN (
- 🖥️ Parsing Velocità Ethernet Dispositivi Client (
connectivity.ethernet_status):- Introdotta l'estrazione e decodifica dei codici di velocità
speed(es.P2500➔ 2.5 Gbps,P1000➔ 1.0 Gbps) direttamente dall'oggettoconnectivity.ethernet_statusdei dispositivi client, consentendo alla UI di mostrare correttamente2.5 Gbps • Ethernet.
- Introdotta l'estrazione e decodifica dei codici di velocità
- 📶 Telemetria RSSI dBm su Nodi Mesh Wireless:
- Supportata l'estrazione di valori di segnale anche quando strutturati come dizionari (
signal.rx_rssi,signal_dbm,mesh_quality), garantendo la corretta visualizzazione del badge (es.Wireless Mesh (5 GHz / -58 dBm)).
- Supportata l'estrazione di valori di segnale anche quando strutturati come dizionari (
🏷️ Mapping Automatico Categorie Dispositivi, Tag AdGuard Home & Metadati (#13)
- 🏷️ Categorizzazione Nativa eero Intelligente (Issue #13):
- Implementata la funzione
map_eero_device_typeper interpretare automaticamente il campo nativodevice_typedel cloud eero (laptop,phone,tv,gaming_console,camera,nas,smart_plug,printer,speaker) assegnando categoria e icona corrette senza forzare tutto su"Altro". - Gerarchia di fallback corretta: Priorità alle personalizzazioni utente salvate nel DB locale SQLite > Categoria/Icona nativa eero > Fallback
"Altro".
- Implementata la funzione
- 🛡️ Mappatura Tag Ufficiali AdGuard Home:
- Integrata la conversione delle categorie e icone nei tag client standard di AdGuard Home (
device_laptop,device_pc,device_phone,device_tablet,device_tv,device_gameconsole,device_nas,device_other) nell'endpoint di esportazione/api/devices/export/adguarde nel motore di sincronizzazione automatica.
- Integrata la conversione delle categorie e icone nei tag client standard di AdGuard Home (
- 🔧 Risoluzione Robusta Salvataggio Metadati & JSON Error Handling:
- Aggiornati gli endpoint
/api/devices/{device_id_or_mac}/metadataper consentire la ricerca per MAC address, ID eero univoco, URL o indirizzo IP. - Inserito controllo preventivo
res.oke safe JSON parsing inapp.jsper eliminare l'errorejson parse unexpected character line 1 column 1in caso di risposte HTTP non riuscite.
- Aggiornati gli endpoint
🛡️ Supporto a Istanze Multiple AdGuard Home & Cache-Busting Asset (#17)
- 🛡️ Sincronizzazione DNS Multi-Server (Issue #17):
- Introdotto il supporto per la configurazione e sincronizzazione verso molteplici istanze target AdGuard Home (es. DNS Primario, Secondario o failover).
- Nuova interfaccia grafica nella card AdGuard con gestione dinamica delle istanze (aggiunta
+, rimozione, toggle abilitazione individuale, stato e ora dell'ultimo sync per ciascuna istanza). - Endpoint di test e sync aggiornati per verificare e riconciliare tutti i server contemporaneamente in modo parallelo/sequenziale.
- 🔄 Cache-Busting Automatico & Nota Aggiornamento Browser (Issue #17):
- Aggiunto parametro di versione
?v={{ app_version }}ai link degli asset CSS e JavaScript inindex.htmlper forzare l'aggiornamento automatico della cache del browser ad ogni rilascio. - Documentato nel file
README.md(sia in inglese che in italiano) il comportamento della cache del browser e le istruzioni per l'hard reload (Ctrl + F5/Cmd + Shift + R) all'aggiornamento del container.
- Aggiunto parametro di versione
👥 Supporto Utenti Amministratori Invitati e Reti Condivise (Amazon Workaround)
- 🔑 Risoluzione Flessibile Topologia per Account Multi-Rete e Admin Invitati:
- Potenziato il metodo
fetch_account_infoineero_client.pyper identificare e mappare le reti mesh non solo daaccount.networks, ma anche dalle struttureshared_networks,guest_networks,admin_networkse tramite fallback automatico sull'endpoint/2.2/networks. - Garantito il pieno supporto agli utenti con account proprietario Amazon SSO che invitano un account amministratore secondario dall'app mobile eero per accedere alla Dashboard con 2FA OTP.
- Potenziato il metodo
v1.03.00 - Docker Hub Multi-Arch, Sincronizzazione AdGuard Home & Ottimizzazioni Mesh
📦 Docker Hub Multi-Arch, Sincronizzazione AdGuard Home & Ottimizzazioni Mesh (#12)
- 📡 Risoluzione Universale Nodi e Client Mesh (Issue #12):
- Introdotto motore di indicizzazione multi-chiave in
poller.pyeeero_client.py(idnumerico,serial,url,location/nome,ip) per garantire il matching affidabile dei client connessi su tutte le generazioni eero (eero Pro 7, Pro 6E, eero 6+, Max 7) e versioni eeroOS 7.x. - Risolto il bug per cui i dispositivi su nodi beacon potevano risultare tutti associati al Gateway in presenza di payload cloud privi del campo
location.
- Introdotto motore di indicizzazione multi-chiave in
- ✨ Switch Istantaneo Modalità Demo / Rete Live (senza perdita di Token):
- Aggiunto pulsante interattivo nella barra superiore per passare istantaneamente alla Modalità Demo a scopo di test/anteprima e ritornare alla Rete Live preservando sempre il token di sessione autenticato senza dover reinserire l'OTP.
- 🌡️ Armonizzazione Stato Termico Nodi:
- Ottimizzato il rendering dello stato termico e operativo dei nodi mesh, riflettendo accuratamente lo stato di salute reale fornito dalle API ufficiali eero (
thermal_status: Normale / Nominale).
- Ottimizzato il rendering dello stato termico e operativo dei nodi mesh, riflettendo accuratamente lo stato di salute reale fornito dalle API ufficiali eero (
- ⚡ Velocità Negoziata Ethernet Dispositivi & Backhaul Mesh:
- Rimosso il testo fisso
'GbE 1.0 Gbps'. Ora il sistema rileva e mostra dinamicamente la reale velocità di link per apparati cablati a 10 Gbps, 5.0 Gbps, 2.5 Gbps, 1.0 Gbps e 100 Mbps. - Ispezione automatica delle porte ethernet fisiche (
ports/ethernet_ports) dei nodi eero per rilevare e mostrare la velocità di backhaul cablato.
- Rimosso il testo fisso
- 👤 Sincronizzazione Profilo Famiglia / Utente Cloud eero:
- Visualizzazione e filtro in tempo reale dell'assegnazione profilo utente eero sia nella tabella principale che nel modale dettaglio client.
- 📶 Telemetria Segnale RSSI (dBm) & PHY Link Rate nel Modale:
- Integrata la visualizzazione avanzata della qualità del segnale in dBm e della velocità di modulazione PHY nel riquadro di connessione del modale.
- 🌍 Rimozione Residui di Testo e Localizzazione Completa:
- Localizzati integralmente in inglese e italiano tutti i messaggi di verifica conflitti IP statici, avvisi e notifiche Toast.
- Distribuzione Ufficiale Docker Hub Multi-Arch:
- Configurato workflow GitHub Actions per la compilazione e il push automatico su Docker Hub (
enricoflammini/eero-dashboard). - Supporto nativo alle architetture
linux/amd64(Server x86, PC, VM) elinux/arm64(Raspberry Pi 4/5, NAS Synology/QNAP/TrueNAS, Apple Silicon). - Avvio immediato a riga di comando senza compilazione locale tramite
docker runodocker compose pull.
- Configurato workflow GitHub Actions per la compilazione e il push automatico su Docker Hub (
- Integrazione Nativa AdGuard Home in-App:
- Nuova scheda visuale dedicata nel tab Automazioni & Controlli per configurare la connessione verso AdGuard Home (URL, Username, Password).
- Normalizzazione automatica degli URL locali (pulizia frammenti
#, supporto HTTP e fallback SSL/TLS per certificati self-signed). - Pulsante "Test Connessione" con riscontro immediato via Toast e verifica delle credenziali.
- Pulsante "Sincronizza Ora Tutti i Client" con matching intelligente per nome, MAC e IP (
/control/clients/adde/control/clients/update). - Toggle "Abilita sincronizzazione automatica continua" per sincronizzare silenziosamente in background all'accesso di nuovi dispositivi e su base periodica.
- 🔒 Pulsante Disconnessione con Modale di Sicurezza:
- Ripristinato il pulsante di logout nella barra superiore accanto alla guida rapida.
- Introdotto un modale di conferma Glassmorphism con avviso esplicito sulla necessità di richiedere un nuovo codice 2FA OTP al successivo accesso.
- 📊 Fix & Arricchimento Daily Digest Telegram:
- Risolto l'errore di generazione del report giornaliero delle 21:00 (e manuale da interfaccia) causato da riferimenti a tabelle storiche obsolete.
- Il report inviato su Telegram e via Webhook include ora dati reali certificati: Health Score, ISP, nodi mesh online, client attivi totali, suddivisione dettagliata per frequenza (6GHz, 5GHz, 2.4GHz, Cablati), Speed Test Gateway e Latenza Ping.
- Introdotto un toggle esplicito "Abilita invio automatico programmato (ore 21:00)" per consentire all'utente di disattivare la schedulazione del digest mantenendo disponibile l'invio istantaneo on-demand.
- 🎛️ Riorganizzazione Scheda Automazioni & Toggle Notifiche Telegram:
- Layout del tab Controlli & QR Ospiti riorganizzato a matrice 2x2: Guest Wi-Fi (alto-sx), Integrazione AdGuard Home (alto-dx), Notifiche Telegram & Webhook (basso-sx) e Report Digest Giornaliero (basso-dx).
- Introdotto un toggle esplicito "Abilita invio notifiche su Telegram" per attivare/disattivare rapidamente gli avvisi automatici senza cancellare token o chat ID salvati.
- 🛡️ Registro Persistente Dispositivi Noti (Zero Notifiche Duplicate al Riavvio):
- Creata la tabella SQLite
known_devicesper memorizzare in modo permanente gli indirizzi MAC e lo stato di notifica dei client di rete. - Al riavvio o all'aggiornamento del server/container, il poller carica l'elenco completo dal database, evitando l'invio ripetuto di notifiche Telegram per apparati già noti.
- Creata la tabella SQLite
- 📖 Rendering Ottimizzato del Manuale Utente & Changelog In-App Bilingue:
- Riscritto il parser Markdown interno (
renderSimpleMarkdown) con supporto completo a liste numerate ordinate (<ol>), sottoelenchi puntati indentati (<ul>), collegamenti ipertestuali e formattazione dei paragrafi. - Il visualizzatore del Changelog interno all'app è ora bilingue (Italiano e Inglese) e presenta un sommario essenziale dei soli titoli principali delle release, con link diretto per consultare il registro completo su GitHub.
- Riscritto il parser Markdown interno (
- ❤️ Modale About, Dedica & Informazioni Open Source:
- Aggiunto pulsante dedicato "About" nella barra superiore accanto al badge di versione.
- Include dedica alla community homelab & self-hosted (Crafted with ❤️ by Enrico Flammini), collegamenti rapidi a repository GitHub (codice e issues), licenza MIT, immagine Docker Hub e sezione Fun Notes.
- 🔀 Ordinamento Dispositivi & Barra dei Titoli Bloccata (Sticky Header):
- Introdotta la possibilità di ordinare la tabella dei dispositivi cliccando direttamente su ciascuna intestazione di colonna (Dispositivo/Host, Indirizzo IP numerico IPv4, Profilo, Nodo Mesh, Banda, Segnale RSSI e Stato).
- La barra dei titoli della tabella rimane ora bloccata in alto (
sticky) durante lo scorrimento, garantendo visibilità e orientamento costante anche con centinaia di client connessi.
- ⚙️ Normalizzazione Dinamica Dispositivi & Gestione Flessibile Nodi/Sensori:
- Risolto il bug di parsing dei dispositivi che poteva impedire la visualizzazione dei client connessi con determinati payload eero Cloud.
- Reso pienamente dinamico il rendering dei client e dei conteggi (1, 2, N client o stato vuoto dedicato) con fallback automatico tra endpoint
/devicese dettagli di rete. - I campi e i sensori hardware (es. backhaul su gateway standalone, temperature o firmware) vengono ora mostrati solo se effettivamente disponibili sulla versione hardware in uso.
- Revisionate e completate al 100% tutte le etichette, placeholder e notifiche Toast in lingua inglese e italiana.
- Esportazione DNS & Webhooks:
- Endpoint
GET /api/devices/export/hosts(standard/etc/hosts/dnsmasq) eGET /api/devices/export/adguard(JSON provisioning). - Script standalone CLI
scripts/adguard_sync.py. - Specifiche formali e schemi JSON dei payload Webhook nel
README.md.
- Endpoint