Skip to content

Releases: EnricoFlammini/Dashboard_EERO

eero Custom Dashboard & Management Suite — v1.6.1

Choose a tag to compare

@EnricoFlammini EnricoFlammini released this 17 Oct 10:18

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-pending state 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.json and it.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_excluded switch in #deviceDetailModal to 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/networks arrays.
  • 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() in app.js now directly reads st.bufferbloat_grade, st.ping_under_load, and st.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 / 1m matching 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_date prevents notification bursts when containers restart during the dispatch window.
  • Timezone & Hour Customization: Full support for DAILY_DIGEST_HOUR (0–23) and TZ with 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 -d

Docker CLI

docker pull enricoflammini/eero-dashboard:latest
docker stop eero-dashboard && docker rm eero-dashboard
# Restart with your existing docker run command

Release Candidate v1.6.1-rc.1 — Subnet-Aware IPv4 DNS Sync, Pi-hole v6 Pruning, Resilient Network Discovery & WAL Hardening

Choose a tag to compare

@EnricoFlammini EnricoFlammini released this 16 Oct 22:21

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_candidates prioritizes 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/config removes 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_excluded flag 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_ID Fallback: 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 (default 21) and TZ support with full IANA zoneinfo awareness.
  • 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_float safely 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 -wal file growth.
  • Hot Online Backup: POST /api/system/database/backup uses SQLite's native VACUUM INTO to 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 INTO backup 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/data

Apply updates:

docker compose pull
docker compose up -d

Docker 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:test

Documentation

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

Choose a tag to compare

@EnricoFlammini EnricoFlammini released this 09 Oct 20:15

🚀 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 NEW badge for newly connected devices (#60).
  • @WillFulmer:
    • Provided the Wi-Fi Alliance standard fix for Open / Passwordless Guest Wi-Fi QR Codes (T:nopass) (#63).
    • Suggested real-time delivery channel transparency in the Daily Digest Report (#64).
    • Contributed feedback on exposing the relative first-seen timestamp and column customization (#60).
  • @jonmacdonald:
    • Diagnosed and reported the SQLite database lock contention (#62).
    • Validated the _write_lock serialization mutex, 60s timeout, and busy_timeout=60000 pragma 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-face rules.
  • 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 / admin credentials 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_USER and ADMIN_PASSWORD environment variables in docker-compose.yml for 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/neighbors allows external scripts, cron jobs, or AdGuard sidecars to push ip <-> mac neighbor 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 Enriched UI 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_seen timestamps for every device in the network.
  • Dynamic NEW Badges: 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_lock in DBService to 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 .log or 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) and device_tracker entities.
  • Prometheus / OpenMetrics Endpoint: Native /metrics endpoint 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

Choose a tag to compare

@EnricoFlammini EnricoFlammini released this 24 Sep 21:35

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.json permissions, 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 -d

v1.5.0-beta.1 — Multi-Network Fleet Switcher, Device Data Usage, Network Stats & Bilingual Digest

Choose a tag to compare

@EnricoFlammini EnricoFlammini released this 21 Sep 21:04

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 (en or it).
  • 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

Choose a tag to compare

@EnricoFlammini EnricoFlammini released this 14 Sep 21:15

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

Choose a tag to compare

@EnricoFlammini EnricoFlammini released this 11 Sep 21:01

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 (256px expanded ↔ 68px collapsed) with localStorage state 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):
    1. Mesh Topology & Backhaul (Max 40 pts): Node reachability, offline node penalties, and degraded wired/wireless backhauls.
    2. WAN Gateway & Internet Ping (Max 30 pts): Uplink status, gateway state, and WAN latency.
    3. Client Wi-Fi Signal Quality (Max 20 pts): Pinpoints devices with degraded RSSI (< -75 dBm / < -82 dBm).
    4. 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/config and GET /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-ipv6 and environment variable EERO_DROP_IPV6=true to 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 STATIC Badge: Devices with active reservations now reliably retain the green STATIC badge 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.com are 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.0

v. 1.03.03 - Fix 3

Choose a tag to compare

@EnricoFlammini EnricoFlammini released this 11 Sep 20:58

[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 come True per tutti i beacon/nodi foglia della rete, forzando tutti i nodi su Gateway (WAN) ed eleggendo erroneamente il primo nodo alfabetico (es. Bedroom al posto di Wiring Closet).
    • Introdotto il metodo _is_gateway_node in eero_client.py per 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_eeros per garantire l'elezione di un singolo Primary Gateway certificato anche in caso di ambiguità nei payload cloud.

🛡️ 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/update verso AdGuard Home azzeravano i parametri custom impostati dall'utente.
    • Implementato il metodo _merge_adguard_client_data per 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.
  • 🖥️ Distinzione Accurata Tag Desktop / PC vs Laptop (device_pc / device_laptop):
    • Perfezionato map_eero_device_type e get_adguard_tags per distinguere i PC fissi/workstation/tower (assegnando icona pc e tag device_pc) dai portatili (assegnando icona laptop e tag device_laptop).

v 1.03.01 - fix 1

Choose a tag to compare

@EnricoFlammini EnricoFlammini released this 29 Aug 20:59

⚡ 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_port o con neighbour) 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).
  • 🖥️ 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'oggetto connectivity.ethernet_status dei dispositivi client, consentendo alla UI di mostrare correttamente 2.5 Gbps • Ethernet.
  • 📶 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)).

🏷️ Mapping Automatico Categorie Dispositivi, Tag AdGuard Home & Metadati (#13)

  • 🏷️ Categorizzazione Nativa eero Intelligente (Issue #13):
    • Implementata la funzione map_eero_device_type per interpretare automaticamente il campo nativo device_type del 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".
  • 🛡️ 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/adguard e nel motore di sincronizzazione automatica.
  • 🔧 Risoluzione Robusta Salvataggio Metadati & JSON Error Handling:
    • Aggiornati gli endpoint /api/devices/{device_id_or_mac}/metadata per consentire la ricerca per MAC address, ID eero univoco, URL o indirizzo IP.
    • Inserito controllo preventivo res.ok e safe JSON parsing in app.js per eliminare l'errore json parse unexpected character line 1 column 1 in caso di risposte HTTP non riuscite.

🛡️ 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 in index.html per 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.

👥 Supporto Utenti Amministratori Invitati e Reti Condivise (Amazon Workaround)

  • 🔑 Risoluzione Flessibile Topologia per Account Multi-Rete e Admin Invitati:
    • Potenziato il metodo fetch_account_info in eero_client.py per identificare e mappare le reti mesh non solo da account.networks, ma anche dalle strutture shared_networks, guest_networks, admin_networks e 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.

v1.03.00 - Docker Hub Multi-Arch, Sincronizzazione AdGuard Home & Ottimizzazioni Mesh

Choose a tag to compare

@EnricoFlammini EnricoFlammini released this 28 Aug 22:48

📦 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.py e eero_client.py (id numerico, 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.
  • ✨ 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).
  • ⚡ 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.
  • 👤 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) e linux/arm64 (Raspberry Pi 4/5, NAS Synology/QNAP/TrueNAS, Apple Silicon).
    • Avvio immediato a riga di comando senza compilazione locale tramite docker run o docker compose pull.
  • 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/add e /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_devices per 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.
  • 📖 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.
  • ❤️ 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 /devices e 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) e GET /api/devices/export/adguard (JSON provisioning).
    • Script standalone CLI scripts/adguard_sync.py.
    • Specifiche formali e schemi JSON dei payload Webhook nel README.md.