Files
zorruno-homeassistant/packages/edgerouter_snmp.yaml
T
2026-07-24 18:55:12 +12:00

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)
}}