title: Van Router views: - title: Van Router path: van-router icon: mdi:router-wireless cards: - type: glance title: At a glance entities: - entity: sensor.van_router_ap_5ghz name: 5GHz AP - entity: sensor.van_router_ap_2_4ghz name: 2.4GHz AP - entity: sensor.van_router_starlink name: Starlink - entity: sensor.van_router_wan_failover name: Active WAN - entity: sensor.van_router_connected_clients name: Clients - entity: sensor.van_router_thermal name: Thermal - type: vertical-stack cards: - type: entities title: 5GHz AP entities: - type: attribute entity: sensor.van_router_ap_5ghz attribute: ssid name: SSID - type: attribute entity: sensor.van_router_ap_5ghz attribute: channel name: Channel - type: attribute entity: sensor.van_router_ap_5ghz attribute: client_count name: Clients - entity: button.van_router_restart_5ghz_ap name: Restart - type: entities title: 2.4GHz AP entities: - type: attribute entity: sensor.van_router_ap_2_4ghz attribute: ssid name: SSID - type: attribute entity: sensor.van_router_ap_2_4ghz attribute: channel name: Channel - type: attribute entity: sensor.van_router_ap_2_4ghz attribute: client_count name: Clients - entity: button.van_router_restart_2_4ghz_ap name: Restart - type: markdown title: Connected clients content: | {%- set rows = state_attr('sensor.van_router_connected_clients', 'rows') or [] -%} {%- if rows | length == 0 %} No clients connected. {%- else %} | Host | IP | MAC | Connection | Signal | TX rate | |---|---|---|---|---|---| {%- for r in rows %} | {{ (r.host or '—').replace('-', '‑').replace(' ', ' ') }} | {{ r.ip or '—' }} | {{ r.mac }} | {{ r.conn }} | {{ r.sig or '—' }} | {{ (r.tx.split(' ')[:2] | join(' ')).replace('/', '⁠/⁠') if r.tx else '—' }} | {%- endfor -%} {%- endif %} - type: entities title: WAN failover entities: - entity: select.van_router_preferred_wan name: Preferred WAN - entity: switch.van_router_wan_wifi name: Wi-Fi WAN - entity: switch.van_router_wan_starlink name: Starlink WAN - entity: switch.van_router_wan_cellular name: Cellular WAN - entity: button.van_router_restart_modem name: Restart modem - type: markdown title: WAN detail content: | {%- set wans = state_attr('sensor.van_router_wan_failover', 'wans') or [] -%} | WAN | Priority | Device | Status | Metric | |---|---|---|---|---| {%- for w in wans %} | {{ '★ ' if w.active else '' }}{{ w.name }} | {{ w.priority }}{{ ' (preferred)' if w.preferred else '' }} | {{ w.device or '—' }} | {{ 'up' if w.up else ('absent' if not w.present else 'down') }} | {{ w.route_metric if w.route_metric is not none else '—' }} | {%- endfor %} - type: entities title: Starlink entities: - type: attribute entity: sensor.van_router_starlink attribute: latency_ms name: Latency (PoP) - type: attribute entity: sensor.van_router_starlink attribute: downlink_bps name: Downlink (bps) - type: attribute entity: sensor.van_router_starlink attribute: uplink_bps name: Uplink (bps) - type: attribute entity: sensor.van_router_starlink attribute: obstructed_pct name: Obstructed % - type: markdown title: Thermal content: | {%- set sensors = state_attr('sensor.van_router_thermal', 'sensors') or {} -%} | Sensor | Value | Level | |---|---|---| {%- for name, s in sensors.items() %} | {{ name }} | {{ s.temp if s.kind == 'temp' else (s.rpm ~ ' rpm' if s.kind == 'fan' else s.now) }} | {{ s.level }} | {%- endfor %} - type: conditional conditions: - condition: state entity: sensor.van_router_deploy_warnings state_not: "0" card: type: markdown title: Deploy warnings content: | {%- for w in state_attr('sensor.van_router_deploy_warnings', 'warnings') or [] %} - {{ w }} {%- endfor %}