Router Card
Firewalls, routers and mesh Wi-Fi at a glance, Firewalla, OPNsense, UniFi, TP-Link Deco, MikroTik, ASUS and more.
WAN state, download and upload rates, CPU, RAM, temperatures, uptime, mesh units and access points, clients and Wi-Fi networks for some twenty router integrations, and for the others from what their entities say. The header icon shows the kind of device with the brand's logo as a badge, tinted by the WAN state.
Highlights
- Firewalla, OPNsense and pfSense firewalls
- UniFi, Omada, TP-Link, MikroTik, ASUS, NETGEAR, Keenetic, OpenWrt, GL.iNet and Xiaomi routers
- TP-Link Deco, eero, Linksys Velop and Ruckus mesh systems, every unit with its state and clients
- Any other router integration, recognised from the kind and the names of its entities
- Download and upload rates of the WAN with their last 24 hours
- CPU, RAM and disk gauges with their last 24 hours, temperatures, fans and load average
- WAN IP, uptime, latency, packet loss and the last speed test
- Wi-Fi switches turning a network on, or off after a confirmation
- Restart button with a confirmation, firmware update chip
- Thresholds you can set, sensors of your choice
- Compact mini card with a detail view
Cards
type: custom:router-cardInstall
- 1Open the repository in the Marketplace with the Add to Marketplace button above, or add
github.com/juju35/ha-router-cardas a custom repository (category Dashboard). - 2Download it from the Marketplace.
- 3Reload the browser and add the card from the dashboard editor.
Gallery 7
Documentation
From the README Features
Features
- Two cards: a full Router Card and a compact Router Mini Card
- Detail button at the top right of the mini card: it shows the full card in its place (same device and options), and the collapse button, or a click anywhere outside the card, brings the compact view back (
zoom: falseremoves it) - Automatic discovery of the router's entities, by the integration's own translation keys and attributes first, then by the kind of each entity (device class, unit) and the words of its key and entity id, in any language. An integration the card does not know still shows what it can recognise
- Header icon of the kind of device (firewall, router, mesh unit, access point) coloured with the WAN state like the status pill (green online, red offline, grey unavailable; the brand colour when the integration reports no WAN state), with the brand logo as a badge
- A drawing of the kind of device, in the brand's colour, opening the admin interface; model and firmware under the name; a chip when a firmware update is waiting
- Download / upload rates of the WAN, in bytes (kB/s, MB/s) or bits (kb/s, Mb/s), with their last 24 hours drawn behind each tile (recorder statistics), on the full card and the mini card
- WAN IP address, uptime, latency and packet loss, and the last speed test: the router's own (Firewalla, NETGEAR, Linksys Velop), else the Speedtest.net or Fast.com integration's, or another one set in
entities - System: CPU, RAM and disk usage gauges with their last 24 hours behind them (0-100 % scale), temperature gauges, fans, load average
- Mesh and network devices: every mesh unit, access point or switch of the router's integration, with its state and its clients (the main unit first on a mesh system)
- Local network: connected clients (with the wired / Wi-Fi / guest split when the integration gives it), and a tile per Wi-Fi network with a switch that turns it on, or off after a confirmation popup
- A restart button at the top right of the full card reboots the device, after a confirmation popup; shown only when the integration exposes it
- Colours turn orange / red when a threshold is crossed (CPU, RAM, disk, temperatures); every threshold can be set
- Sensors of your choice for the router's values and the speed test, in YAML or in the visual editor (the WAN interface of a MikroTik, say)
- Click any value to open its Home Assistant history (more-info dialog), the logo to open the brand's website
- Visual editor in the dashboard UI for both cards (no YAML needed)
- Light and dark mode, 22 languages (see Translations)
- Unavailable entities (for example while the router restarts) are shown as unavailable, not as offline or Wi-Fi off; the restart button is disabled meanwhile
- Sections view: the full card needs at least 9 columns, the mini card 6; on a narrow card the picture gets smaller then hidden, and the status pill shows only its coloured dot
- Single file, no external dependency: the drawings and brand logos are embedded; only English is in it, the other languages are loaded when needed
Supported integrations
Supported integrations
Each section shows only what the integration exposes. Built-in integrations ship with Home Assistant; custom ones are installed from their repository.
Firewalls#
| Integration | Discovered |
|---|---|
Firewalla Local (firewalla_local, custom) |
CPU, RAM, uptime, WAN IP and online / total hosts (attributes of the System Status sensor), ping latency and packet loss, speed test, SSID switches, AP7 access points with their clients |
OPNsense (opnsense, custom) |
WAN interface traffic rates, gateway status, delay and loss, CPU, memory, filesystem, load average, boot time, temperatures, firmware update, trackers |
pfSense (pfsense, custom) |
Same as OPNsense |
Routers#
| Integration | Discovered |
|---|---|
UniFi Network (unifi, built in) |
Gateway: WAN port bandwidth, CPU, memory, temperatures, uptime, WAN latency, clients, firmware update, restart; access points and switches with their state and clients; WLAN switches. Pick an access point to see it on its own |
TP-Link Omada (tplink_omada, built in) |
Gateway WAN link, CPU, memory, access points and switches with their state |
TP-Link router (tplink_router, custom) |
CPU, memory, WAN IP and uptime, clients (wired, Wi-Fi, guest), Wi-Fi switches, restart, LTE rates |
MikroTik Router (mikrotik_router, custom) and MikroTik (mikrotik, built in) |
Rates and connection of the WAN interface (an interface named WAN, else set it in entities), CPU, memory, disk, temperatures, fans, uptime, wired / wireless clients, firmware update |
ASUSWRT (asuswrt, built in) and AsusRouter (asusrouter, custom) |
Download / upload speed, CPU, memory, CPU and radio temperatures, boot time, load average, connected devices, WAN state and IP, Wi-Fi switches, restart |
NETGEAR (netgear, built in, Orbi included) |
CPU, memory, speed test (downlink / uplink bandwidth, average ping), guest Wi-Fi switches, firmware update, restart |
Keenetic NDMS2 (keenetic_ndms2, built in) |
Connection state, trackers |
OpenWrt (openwrt, custom), OpenWrt (FaserF) (openwrt, custom), OpenWrt ubus (openwrt_ubus, custom) and LuCI (luci, built in, trackers only) |
WAN rates, CPU, memory, load, uptime, wireless clients, mesh peers, Wi-Fi switches, as each integration exposes them |
GL.iNet (glinet, custom) and GL.iNet Router (glinet_router, custom) |
WAN status, CPU temperature, load, memory, flash, uptime, clients, restart |
Xiaomi Mi Wi-Fi (miwifi, custom) |
WAN download / upload speed, memory, temperature, uptime, devices, Wi-Fi switches |
Mesh Wi-Fi and access points#
| Integration | Discovered |
|---|---|
TP-Link Deco (tplink_deco, custom) |
Total download / upload of the clients, internet state, CPU and memory (smoothed), every Deco with its state and clients, trackers |
eero (eero, custom) |
Public IP, connected clients, every eero with its state and clients |
Linksys Velop (linksys_velop, custom) |
WAN status and IP, online devices, speed test, every node with its state and clients |
Ruckus Unleashed (ruckus_unleashed, built in) |
Clients (trackers) |
Any other integration#
Set device to the device id of a router, firewall or access point of another integration (the device page's address ends with it): the card recognises its entities by their kind and their names (download / rx / in, cpu, memory, uptime, wan, clients…) and shows what it finds, in the integration's neutral colours. Open an issue to add the integration's branding and anything the card misses.
Configuration
Configuration
Visual editor#
Edit a dashboard, click Add card and search for Router Card or Router Mini Card. The router is preselected; pick another device in the list if you have several, set an optional title, choose the sections to display, the thresholds, the rate unit and the language. The preview updates live, and options left at their default are kept out of the generated YAML.
Minimal#
type: custom:router-card
type: custom:router-mini-card
Full options#
type: custom:router-card
device: 0123456789abcdef0123456789abcdef
title: Firewall
kind: firewall
admin_url: https://192.168.1.1
show_title: true
show_subtitle: true
show_image: true
show_logo: true
show_network: true
show_history: true
show_speedtest: true
show_system: true
show_nodes: true
show_lan: true
cpu_warning: 80
cpu_critical: 95
ram_warning: 80
ram_critical: 90
disk_warning: 80
disk_critical: 90
temp_warning: 75
temp_critical: 90
rate_unit: bits
language: fr
entities:
rate_down: sensor.mikrotik_ether1_wan_rx
rate_up: sensor.mikrotik_ether1_wan_tx
speedtest:
download: sensor.librespeed_download
upload: sensor.librespeed_upload
ping: sensor.librespeed_ping
type: custom:router-mini-card
device: 0123456789abcdef0123456789abcdef
title: Mesh
show_network: true
show_history: true
show_system: true
zoom: true
rate_unit: bits
Options reference#
| Option | Card | Default | Description |
|---|---|---|---|
device |
both | First router found | Device to display: its device id (pick it in the visual editor), or platform:<integration> for an integration with trackers only (Ruckus Unleashed, LuCI) |
title |
both | Device name | Card title |
show_title |
both | true |
Show the title in the header (e.g. false under a section heading of your own) |
show_subtitle |
both | true |
Show the model and firmware under the title |
kind |
both | Detected | Kind of device, for the header icon and the drawing: firewall, router, mesh or ap (the integration's, or from the model for UniFi and Omada) |
admin_url |
both | Device's own | Admin interface opened when clicking the picture (else the device's configuration URL, else the brand's usual address) |
show_image |
both | true |
Show the drawing of the kind of device |
show_logo |
both | true |
Show the header icon, coloured with the WAN state, with the brand logo (opens the brand website when clicked) |
show_network |
both | true |
Download / upload rates (and WAN IP, uptime, latency, speed test on the full card) |
show_history |
both | true |
24 h curves behind the rate tiles and the CPU / RAM / disk gauges, from the recorder's 5-minute statistics (sensors with a state_class): the curve breaks where the recorder has no data |
show_speedtest |
full | true |
The last speed test in the network section (download, upload and ping; its time on hover) |
show_system |
both | true |
CPU, RAM, disk and temperature gauges, fans and load average (CPU and hottest temperature on the mini card) |
show_nodes |
full | true |
Mesh units, access points and switches of the router's integration |
show_lan |
full | true |
Connected clients and Wi-Fi networks |
entities |
both | — | Sensors of your choice (see below) |
cpu_warning, cpu_critical |
both | 80, 95 |
CPU usage (%) from which the gauge turns orange, red |
ram_warning, ram_critical |
both | 80, 90 |
RAM usage (%) from which the gauge turns orange, red |
disk_warning, disk_critical |
both | 80, 90 |
Disk usage (% used) from which the gauge turns orange, red |
temp_warning, temp_critical |
both | 75, 90 |
Temperature (°C, whatever the sensor's unit) from which a gauge turns orange, red |
zoom |
mini | true |
Detail button at the top right: shows the full card in place of the mini card, and back |
rate_unit |
both | bytes |
Rates unit: bytes (kB/s, MB/s) or bits (kb/s, Mb/s) |
language |
both | Auto | Force language: en, fr, de, es, sr, sr-Latn, it, nl, pt, pl, ro, da, sv, bg, ru, uk, hu, sk, cs, sl, lv or el (auto-detects from HA settings) |
Sensors of your choice#
The cards find the router's sensors and the speed test by themselves. entities sets others, in YAML or in the visual editor under Sensors of your choice.
| Key | Value |
|---|---|
rate_down, rate_up |
Download and upload rates of the WAN |
wan |
WAN state (a connectivity binary sensor, or a sensor whose state is online / offline, connected / disconnected, up / down) |
ip, boot |
WAN IP address, uptime (a boot date or a duration) |
cpu, ram |
CPU and RAM usage, in % |
clients |
Number of connected clients |
speedtest |
download, upload and ping sensors of a speed test; set, they replace the one found |
How it works
How it works
The cards read the entity and device registries of Home Assistant. A device of a supported integration is a router when its entities tell its traffic, its WAN state or its system (CPU, RAM, uptime…); the editor lists them, the gateway first. Each value of the device is then found:
- by the integration's own translation keys, when the card knows them (UniFi
device_cpu_utilization, Omadawan_link, Linksys Velopwan_status…); - by the integration's attributes (Firewalla gives its CPU, RAM, uptime, WAN IP and hosts as attributes of its System Status sensor);
- by the kind of entity and its words: a data-rate sensor whose key or entity id says
rx/in/downloadis a download rate, a%sensor that sayscpuis the CPU usage, a timestamp that saysuptime/bootthe boot date, a connectivity binary sensor that sayswan/internetthe WAN state… The integrations without translation keys name their entities in English, so their entity ids are English whatever the user's language; those with translation keys keep English keys in every language.
The WAN is preferred to the other interfaces (a rate that says wan or internet wins over lan, guest or vpn), totals to per-unit values (TP-Link Deco), smoothed values to raw ones, and the rates of an interface device of the router (MikroTik) are used when the router itself has none. A speed test result, a backhaul or a link speed is never taken for traffic.
The network devices are the other devices of the router's integration entry (UniFi access points and switches, Deco, eero and Velop units, Firewalla AP7) that tell their state or their clients; a device with a tracker is a client, not a unit. The clients are the integration's count, else the sum of its wired / Wi-Fi / guest counts, else its trackers at home. On a mesh system whose count is the main unit's own (Deco), the clients of every unit are added up.
Thresholds:
| Value | Orange | Red |
|---|---|---|
| CPU | 80 % | 95 % |
| RAM | 80 % | 90 % |
| Disk | 80 % | 90 % |
| Temperatures | 75 °C | 90 °C |
Temperatures are shown in the unit of their sensor (°F with the imperial unit system) and compared to these thresholds after conversion to °C.
Changelog
CHANGELOG.md 1.0.1Nov 13, 2026Latest
Fixes
- eero: the header shows the eero logo as a badge, missing in 1.0.0.
1.0.0Nov 12, 2026
First release: generic Lovelace cards for firewalls, routers and mesh Wi-Fi systems, asked for Firewalla (juju35/ha-internet-box-card#105) and TP-Link Deco (juju35/ha-internet-box-card#106) by ssilence5.
Features
- Router Card (
custom:router-card) and Router Mini Card (custom:router-mini-card), with a detail button that shows the full card in place of the mini card. - Supported integrations: Firewalla Local, OPNsense, pfSense, UniFi Network, TP-Link Omada, TP-Link Deco, TP-Link router, MikroTik (core and MikroTik Router), ASUSWRT and AsusRouter, NETGEAR, Keenetic NDMS2, OpenWrt, LuCI, GL.iNet, Xiaomi Mi Wi-Fi, eero, Linksys Velop and Ruckus Unleashed; any other router integration by setting its device.
- Discovery by the integration's translation keys and attributes, then by the kind and the words of each entity, in any language.
- WAN state, download / upload rates with their 24 h curves, WAN IP, uptime, latency and packet loss, last speed test.
- CPU, RAM and disk gauges with their 24 h curves, temperatures, fans, load average.
- Mesh units, access points and switches with their state and clients; connected clients; Wi-Fi switches, turned off after a confirmation.
- Restart button with a confirmation popup, firmware update chip.
- Thresholds for CPU, RAM, disk and temperatures; sensors of your choice (
entities); kind of device (kind). - Visual editor, light and dark themes, 22 languages loaded on demand.