477 lines
17 KiB
YAML
477 lines
17 KiB
YAML
#:########################################################################################:#
|
|
# Package: EdgeRouter SNMP Monitoring
|
|
# File: edgerouter_snmp.yaml
|
|
# Version: v1.0.1
|
|
# Date: 2026-07-21
|
|
#
|
|
# Purpose:
|
|
# Monitors the EdgeRouter X through read-only SNMPv2c after the previous EdgeOS
|
|
# integration became incompatible with EdgeOS v3.0.x. Provides traffic rates
|
|
# for the major physical interfaces and system health sensors for the router.
|
|
#
|
|
# Interfaces:
|
|
# - eth0 / ifIndex 4: WAN and Internet traffic.
|
|
# - eth1 / ifIndex 5: Home LAN traffic.
|
|
# - eth2 / ifIndex 6: Home Wireless traffic.
|
|
# - eth3 / ifIndex 7: Home Automation traffic.
|
|
# - eth4 / ifIndex 8: Secondary Home Automation traffic.
|
|
#
|
|
# Behaviour:
|
|
# - Polls 64-bit IF-MIB counters so totals remain reliable on busy interfaces.
|
|
# - Converts cumulative received/transmitted byte counters into kB/s rates.
|
|
# - Polls firmware, uptime, CPU idle, load averages, and memory counters.
|
|
# - Calculates memory usage from total, free, buffer, and cache values.
|
|
#
|
|
# Polling:
|
|
# - Traffic counters: Every 60 seconds.
|
|
# - Uptime, CPU, load, and memory: Every 60 seconds.
|
|
# - Firmware description: Every 300 seconds.
|
|
#
|
|
# Notes:
|
|
# - The SNMP community is stored in secrets.yaml and is never hardcoded here.
|
|
# - WAN traffic intentionally uses physical eth0 because hardware-offloaded
|
|
# traffic is under-reported by the logical pppoe0 and eth0.10 interfaces.
|
|
# - Received traffic on LAN interfaces is upload toward the router; transmitted
|
|
# traffic is download from the router toward clients on that interface.
|
|
# - SNMP, derivative, and template platforms create standalone entities rather
|
|
# than a combined Home Assistant device entry.
|
|
#
|
|
# Version History:
|
|
# - v1.0.1 (2026-07-21): Moved the EdgeRouter host address to secrets.yaml.
|
|
# - v1.0.0 (2026-07-21): Initial documented SNMP traffic and health package.
|
|
#:########################################################################################:#
|
|
|
|
sensor:
|
|
#:######################################################################################:#
|
|
# WAN TRAFFIC - eth0 / ifIndex 4
|
|
#:######################################################################################:#
|
|
# ifHCInOctets counts bytes received from the Internet. The physical interface
|
|
# is used so hardware-offloaded traffic is included in the total.
|
|
- platform: snmp
|
|
name: "EdgeRouter WAN Received Bytes"
|
|
unique_id: "edgerouter_wan_received_bytes"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.2.1.31.1.1.1.6.4
|
|
accept_errors: true
|
|
device_class: data_size
|
|
state_class: total_increasing
|
|
unit_of_measurement: "B"
|
|
scan_interval: 60
|
|
|
|
# ifHCOutOctets counts bytes transmitted from the router to the Internet.
|
|
- platform: snmp
|
|
name: "EdgeRouter WAN Transmitted Bytes"
|
|
unique_id: "edgerouter_wan_transmitted_bytes"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.2.1.31.1.1.1.10.4
|
|
accept_errors: true
|
|
device_class: data_size
|
|
state_class: total_increasing
|
|
unit_of_measurement: "B"
|
|
scan_interval: 60
|
|
|
|
# Convert the cumulative received-byte counter into the WAN download rate.
|
|
- platform: derivative
|
|
name: "EdgeRouter WAN Download Rate"
|
|
unique_id: "edgerouter_wan_download_rate"
|
|
source: sensor.edgerouter_wan_received_bytes
|
|
unit_prefix: k
|
|
unit_time: s
|
|
round: 1
|
|
time_window: "00:00:30"
|
|
|
|
# Convert the cumulative transmitted-byte counter into the WAN upload rate.
|
|
- platform: derivative
|
|
name: "EdgeRouter WAN Upload Rate"
|
|
unique_id: "edgerouter_wan_upload_rate"
|
|
source: sensor.edgerouter_wan_transmitted_bytes
|
|
unit_prefix: k
|
|
unit_time: s
|
|
round: 1
|
|
time_window: "00:00:30"
|
|
|
|
#:######################################################################################:#
|
|
# HOME LAN TRAFFIC - eth1 / ifIndex 5
|
|
#:######################################################################################:#
|
|
# Bytes received by the router from Home LAN clients become the LAN upload rate.
|
|
- platform: snmp
|
|
name: "EdgeRouter Home LAN Received Bytes"
|
|
unique_id: "edgerouter_home_lan_received_bytes"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.2.1.31.1.1.1.6.5
|
|
accept_errors: true
|
|
device_class: data_size
|
|
state_class: total_increasing
|
|
unit_of_measurement: "B"
|
|
scan_interval: 60
|
|
|
|
# Bytes transmitted by the router to Home LAN clients become the LAN download rate.
|
|
- platform: snmp
|
|
name: "EdgeRouter Home LAN Transmitted Bytes"
|
|
unique_id: "edgerouter_home_lan_transmitted_bytes"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.2.1.31.1.1.1.10.5
|
|
accept_errors: true
|
|
device_class: data_size
|
|
state_class: total_increasing
|
|
unit_of_measurement: "B"
|
|
scan_interval: 60
|
|
|
|
# Derive the client-to-router upload rate from the received-byte counter.
|
|
- platform: derivative
|
|
name: "EdgeRouter Home LAN Upload Rate"
|
|
unique_id: "edgerouter_home_lan_upload_rate"
|
|
source: sensor.edgerouter_home_lan_received_bytes
|
|
unit_prefix: k
|
|
unit_time: s
|
|
round: 1
|
|
time_window: "00:00:30"
|
|
|
|
# Derive the router-to-client download rate from the transmitted-byte counter.
|
|
- platform: derivative
|
|
name: "EdgeRouter Home LAN Download Rate"
|
|
unique_id: "edgerouter_home_lan_download_rate"
|
|
source: sensor.edgerouter_home_lan_transmitted_bytes
|
|
unit_prefix: k
|
|
unit_time: s
|
|
round: 1
|
|
time_window: "00:00:30"
|
|
|
|
#:######################################################################################:#
|
|
# HOME WIRELESS TRAFFIC - eth2 / ifIndex 6
|
|
#:######################################################################################:#
|
|
# Bytes received by the router from the wireless network become its upload rate.
|
|
- platform: snmp
|
|
name: "EdgeRouter Home Wireless Received Bytes"
|
|
unique_id: "edgerouter_home_wireless_received_bytes"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.2.1.31.1.1.1.6.6
|
|
accept_errors: true
|
|
device_class: data_size
|
|
state_class: total_increasing
|
|
unit_of_measurement: "B"
|
|
scan_interval: 60
|
|
|
|
# Bytes transmitted by the router to the wireless network become its download rate.
|
|
- platform: snmp
|
|
name: "EdgeRouter Home Wireless Transmitted Bytes"
|
|
unique_id: "edgerouter_home_wireless_transmitted_bytes"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.2.1.31.1.1.1.10.6
|
|
accept_errors: true
|
|
device_class: data_size
|
|
state_class: total_increasing
|
|
unit_of_measurement: "B"
|
|
scan_interval: 60
|
|
|
|
# Derive the wireless-to-router upload rate from the received-byte counter.
|
|
- platform: derivative
|
|
name: "EdgeRouter Home Wireless Upload Rate"
|
|
unique_id: "edgerouter_home_wireless_upload_rate"
|
|
source: sensor.edgerouter_home_wireless_received_bytes
|
|
unit_prefix: k
|
|
unit_time: s
|
|
round: 1
|
|
time_window: "00:00:30"
|
|
|
|
# Derive the router-to-wireless download rate from the transmitted-byte counter.
|
|
- platform: derivative
|
|
name: "EdgeRouter Home Wireless Download Rate"
|
|
unique_id: "edgerouter_home_wireless_download_rate"
|
|
source: sensor.edgerouter_home_wireless_transmitted_bytes
|
|
unit_prefix: k
|
|
unit_time: s
|
|
round: 1
|
|
time_window: "00:00:30"
|
|
|
|
#:######################################################################################:#
|
|
# HOME AUTOMATION TRAFFIC - eth3 / ifIndex 7
|
|
#:######################################################################################:#
|
|
# Bytes received by the router from Home Automation become its upload rate.
|
|
- platform: snmp
|
|
name: "EdgeRouter Home Automation Received Bytes"
|
|
unique_id: "edgerouter_home_automation_received_bytes"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.2.1.31.1.1.1.6.7
|
|
accept_errors: true
|
|
device_class: data_size
|
|
state_class: total_increasing
|
|
unit_of_measurement: "B"
|
|
scan_interval: 60
|
|
|
|
# Bytes transmitted by the router to Home Automation become its download rate.
|
|
- platform: snmp
|
|
name: "EdgeRouter Home Automation Transmitted Bytes"
|
|
unique_id: "edgerouter_home_automation_transmitted_bytes"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.2.1.31.1.1.1.10.7
|
|
accept_errors: true
|
|
device_class: data_size
|
|
state_class: total_increasing
|
|
unit_of_measurement: "B"
|
|
scan_interval: 60
|
|
|
|
# Derive the Home Automation upload rate from the received-byte counter.
|
|
- platform: derivative
|
|
name: "EdgeRouter Home Automation Upload Rate"
|
|
unique_id: "edgerouter_home_automation_upload_rate"
|
|
source: sensor.edgerouter_home_automation_received_bytes
|
|
unit_prefix: k
|
|
unit_time: s
|
|
round: 1
|
|
time_window: "00:00:30"
|
|
|
|
# Derive the Home Automation download rate from the transmitted-byte counter.
|
|
- platform: derivative
|
|
name: "EdgeRouter Home Automation Download Rate"
|
|
unique_id: "edgerouter_home_automation_download_rate"
|
|
source: sensor.edgerouter_home_automation_transmitted_bytes
|
|
unit_prefix: k
|
|
unit_time: s
|
|
round: 1
|
|
time_window: "00:00:30"
|
|
|
|
#:######################################################################################:#
|
|
# SECONDARY HOME AUTOMATION TRAFFIC - eth4 / ifIndex 8
|
|
#:######################################################################################:#
|
|
# Bytes received by the router from this network become its upload rate.
|
|
- platform: snmp
|
|
name: "EdgeRouter Home Automation 2 Received Bytes"
|
|
unique_id: "edgerouter_home_automation_2_received_bytes"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.2.1.31.1.1.1.6.8
|
|
accept_errors: true
|
|
device_class: data_size
|
|
state_class: total_increasing
|
|
unit_of_measurement: "B"
|
|
scan_interval: 60
|
|
|
|
# Bytes transmitted by the router to this network become its download rate.
|
|
- platform: snmp
|
|
name: "EdgeRouter Home Automation 2 Transmitted Bytes"
|
|
unique_id: "edgerouter_home_automation_2_transmitted_bytes"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.2.1.31.1.1.1.10.8
|
|
accept_errors: true
|
|
device_class: data_size
|
|
state_class: total_increasing
|
|
unit_of_measurement: "B"
|
|
scan_interval: 60
|
|
|
|
# Derive the secondary Home Automation upload rate from received bytes.
|
|
- platform: derivative
|
|
name: "EdgeRouter Home Automation 2 Upload Rate"
|
|
unique_id: "edgerouter_home_automation_2_upload_rate"
|
|
source: sensor.edgerouter_home_automation_2_received_bytes
|
|
unit_prefix: k
|
|
unit_time: s
|
|
round: 1
|
|
time_window: "00:00:30"
|
|
|
|
# Derive the secondary Home Automation download rate from transmitted bytes.
|
|
- platform: derivative
|
|
name: "EdgeRouter Home Automation 2 Download Rate"
|
|
unique_id: "edgerouter_home_automation_2_download_rate"
|
|
source: sensor.edgerouter_home_automation_2_transmitted_bytes
|
|
unit_prefix: k
|
|
unit_time: s
|
|
round: 1
|
|
time_window: "00:00:30"
|
|
|
|
#:######################################################################################:#
|
|
# ROUTER IDENTITY AND UPTIME
|
|
#:######################################################################################:#
|
|
# sysDescr reports the installed EdgeOS firmware and build information.
|
|
- platform: snmp
|
|
name: "EdgeRouter Firmware"
|
|
unique_id: "edgerouter_firmware"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.2.1.1.1.0
|
|
accept_errors: true
|
|
scan_interval: 300
|
|
|
|
# hrSystemUptime is reported in hundredths of a second and converted to seconds.
|
|
- platform: snmp
|
|
name: "EdgeRouter Uptime"
|
|
unique_id: "edgerouter_uptime"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.2.1.25.1.1.0
|
|
accept_errors: true
|
|
device_class: duration
|
|
state_class: measurement
|
|
unit_of_measurement: "s"
|
|
value_template: "{{ ((value | default(0) | float(0)) / 100) | round(0) }}"
|
|
scan_interval: 60
|
|
|
|
#:######################################################################################:#
|
|
# CPU USAGE AND LOAD AVERAGES
|
|
#:######################################################################################:#
|
|
# UCD-SNMP reports CPU idle percentage, so usage is calculated as 100 - idle.
|
|
- platform: snmp
|
|
name: "EdgeRouter CPU Usage"
|
|
unique_id: "edgerouter_cpu_usage"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.4.1.2021.11.11.0
|
|
accept_errors: true
|
|
state_class: measurement
|
|
unit_of_measurement: "%"
|
|
value_template: "{{ 100 - (value | default(100) | int(100)) }}"
|
|
scan_interval: 60
|
|
|
|
# One-minute load average from the UCD-SNMP load table.
|
|
- platform: snmp
|
|
name: "EdgeRouter Load 1 Minute"
|
|
unique_id: "edgerouter_load_1_minute"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.4.1.2021.10.1.3.1
|
|
accept_errors: true
|
|
state_class: measurement
|
|
value_template: "{{ value | default(0) | float(0) }}"
|
|
scan_interval: 60
|
|
|
|
# Five-minute load average from the UCD-SNMP load table.
|
|
- platform: snmp
|
|
name: "EdgeRouter Load 5 Minutes"
|
|
unique_id: "edgerouter_load_5_minutes"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.4.1.2021.10.1.3.2
|
|
accept_errors: true
|
|
state_class: measurement
|
|
value_template: "{{ value | default(0) | float(0) }}"
|
|
scan_interval: 60
|
|
|
|
# Fifteen-minute load average from the UCD-SNMP load table.
|
|
- platform: snmp
|
|
name: "EdgeRouter Load 15 Minutes"
|
|
unique_id: "edgerouter_load_15_minutes"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.4.1.2021.10.1.3.3
|
|
accept_errors: true
|
|
state_class: measurement
|
|
value_template: "{{ value | default(0) | float(0) }}"
|
|
scan_interval: 60
|
|
|
|
#:######################################################################################:#
|
|
# MEMORY COUNTERS
|
|
#:######################################################################################:#
|
|
# Total physical memory reported by UCD-SNMP in KiB.
|
|
- platform: snmp
|
|
name: "EdgeRouter Memory Total"
|
|
unique_id: "edgerouter_memory_total"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.4.1.2021.4.5.0
|
|
accept_errors: true
|
|
device_class: data_size
|
|
state_class: measurement
|
|
unit_of_measurement: "KiB"
|
|
scan_interval: 60
|
|
|
|
# Currently free memory reported by UCD-SNMP in KiB.
|
|
- platform: snmp
|
|
name: "EdgeRouter Memory Free"
|
|
unique_id: "edgerouter_memory_free"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.4.1.2021.4.6.0
|
|
accept_errors: true
|
|
device_class: data_size
|
|
state_class: measurement
|
|
unit_of_measurement: "KiB"
|
|
scan_interval: 60
|
|
|
|
# Memory allocated to buffers, excluded from calculated active usage.
|
|
- platform: snmp
|
|
name: "EdgeRouter Memory Buffers"
|
|
unique_id: "edgerouter_memory_buffers"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.4.1.2021.4.14.0
|
|
accept_errors: true
|
|
device_class: data_size
|
|
state_class: measurement
|
|
unit_of_measurement: "KiB"
|
|
scan_interval: 60
|
|
|
|
# Memory allocated to cache, excluded from calculated active usage.
|
|
- platform: snmp
|
|
name: "EdgeRouter Memory Cached"
|
|
unique_id: "edgerouter_memory_cached"
|
|
host: !secret edgerouter_host
|
|
community: !secret edgerouter_snmp_community
|
|
version: 2c
|
|
baseoid: 1.3.6.1.4.1.2021.4.15.0
|
|
accept_errors: true
|
|
device_class: data_size
|
|
state_class: measurement
|
|
unit_of_measurement: "KiB"
|
|
scan_interval: 60
|
|
|
|
#:######################################################################################:#
|
|
# DERIVED MEMORY USAGE
|
|
#:######################################################################################:#
|
|
# Calculate active memory as total minus free, buffers, and cache. The template
|
|
# remains unavailable until every source counter has a valid state.
|
|
template:
|
|
- sensor:
|
|
- name: "EdgeRouter Memory Usage"
|
|
unique_id: "edgerouter_memory_usage"
|
|
unit_of_measurement: "%"
|
|
state_class: measurement
|
|
availability: >-
|
|
{{
|
|
has_value('sensor.edgerouter_memory_total')
|
|
and has_value('sensor.edgerouter_memory_free')
|
|
and has_value('sensor.edgerouter_memory_buffers')
|
|
and has_value('sensor.edgerouter_memory_cached')
|
|
}}
|
|
state: >-
|
|
{{
|
|
(
|
|
(
|
|
(states('sensor.edgerouter_memory_total') | float(0))
|
|
- (states('sensor.edgerouter_memory_free') | float(0))
|
|
- (states('sensor.edgerouter_memory_buffers') | float(0))
|
|
- (states('sensor.edgerouter_memory_cached') | float(0))
|
|
)
|
|
/ (states('sensor.edgerouter_memory_total') | float(1))
|
|
* 100
|
|
)
|
|
| round(1)
|
|
}}
|