Skip to content

Dashboards

The trackers carry where a client is (connected_to), how (connection) and on which radio (radio, signal). A Markdown card turns that into lists, with nothing to install: add a card of the type Markdown and paste one of the templates below as its content.

Who is where

Every client at home, grouped by the router or access point it uses:

{% set ts = states.device_tracker
   | selectattr('state', 'eq', 'home')
   | selectattr('attributes.connected_to', 'defined')
   | list %}
{% for g in ts | groupby('attributes.connected_to') %}
**{{ g.grouper }}** ({{ g.list | count }})
{% for s in g.list | sort(attribute='name') %}
- [{{ s.name }}](/history?entity_id={{ s.entity_id }}) · {{ s.attributes.connection }}{% if s.attributes.radio %} {{ s.attributes.radio }}, signal {{ s.attributes.signal }}{% endif %}
{% endfor %}
{% endfor %}

Each name links to the client's history.

By radio

Wi-Fi clients by band, with the device they use; useful to see what still uses 2.4 GHz:

{% set ts = states.device_tracker
   | selectattr('state', 'eq', 'home')
   | selectattr('attributes.radio', 'defined')
   | selectattr('attributes.radio', 'ne', none)
   | list %}
{% for g in ts | groupby('attributes.radio') %}
**{{ g.grouper }}** ({{ g.list | count }})
{% for s in g.list | sort(attribute='name') %}
- {{ s.name }} · {{ s.attributes.connected_to }}, signal {{ s.attributes.signal }}
{% endfor %}
{% endfor %}

The radio names are SRM's: 2.4G, 5G, and 5G-2 for a second 5 GHz radio.

A complete dashboard

The example dashboard: router, access point, by radio, who is where

Router and access point with gauges, tiles and a traffic graph, plus both lists above. Download it or copy it from here; the comment at the top says where to paste it and which entity IDs to adjust.

# Example dashboard for Synology SRM Router: Settings, Dashboards, Add dashboard, "New dashboard
# from scratch", then the three dots, Raw configuration editor, and paste this. Replace rt2600ac
# and mr2200ac with your devices' entity ID prefixes (the model names, lower case).
views:
  - title: Network
    type: sections
    max_columns: 3
    sections:
      - type: grid
        cards:
          - type: heading
            heading: Router
            icon: mdi:router-wireless
          - type: gauge
            entity: sensor.rt2600ac_cpu_load
            name: CPU
            grid_options: {columns: 6}
          - type: gauge
            entity: sensor.rt2600ac_memory_usage
            name: Memory
            grid_options: {columns: 6}
          - type: tile
            entity: sensor.rt2600ac_clients
            grid_options: {columns: 6}
          - type: tile
            entity: sensor.rt2600ac_download_rate
            grid_options: {columns: 6}
          - type: tile
            entity: binary_sensor.rt2600ac_wan_connection
            name: Internet
            grid_options: {columns: 6}
          - type: tile
            entity: sensor.rt2600ac_public_ipv4_address
            grid_options: {columns: 6}
          - type: statistics-graph
            title: Traffic
            entities:
              - sensor.rt2600ac_download_rate
              - sensor.rt2600ac_upload_rate
            days_to_show: 1
            period: hour
            stat_types: [mean]
            chart_type: line
      - type: grid
        cards:
          - type: heading
            heading: Access point
            icon: mdi:access-point
          - type: gauge
            entity: sensor.mr2200ac_cpu_load
            name: CPU
            grid_options: {columns: 6}
          - type: gauge
            entity: sensor.mr2200ac_memory_usage
            name: Memory
            grid_options: {columns: 6}
          - type: tile
            entity: sensor.mr2200ac_clients
            grid_options: {columns: 6}
          - type: tile
            entity: sensor.mr2200ac_download_rate
            grid_options: {columns: 6}
          - type: markdown
            title: By radio
            content: |
              {% set ts = states.device_tracker
                 | selectattr('state', 'eq', 'home')
                 | selectattr('attributes.radio', 'defined')
                 | selectattr('attributes.radio', 'ne', none)
                 | list %}
              {% for g in ts | groupby('attributes.radio') %}
              **{{ g.grouper }}** ({{ g.list | count }})
              {% for s in g.list | sort(attribute='name') %}
              - {{ s.name }} · {{ s.attributes.connected_to }}, signal {{ s.attributes.signal }}
              {% endfor %}
              {% endfor %}
      - type: grid
        cards:
          - type: heading
            heading: Clients
            icon: mdi:devices
          - type: markdown
            title: Who is where
            content: |
              {% set ts = states.device_tracker
                 | selectattr('state', 'eq', 'home')
                 | selectattr('attributes.connected_to', 'defined')
                 | list %}
              {% for g in ts | groupby('attributes.connected_to') %}
              **{{ g.grouper }}** ({{ g.list | count }})
              {% for s in g.list | sort(attribute='name') %}
              - [{{ s.name }}](/history?entity_id={{ s.entity_id }}) · {{ s.attributes.connection }}{% if s.attributes.radio %} {{ s.attributes.radio }}, signal {{ s.attributes.signal }}{% endif %}
              {% endfor %}
              {% endfor %}