SNMP

许多Wi-Fi接入点和Wi-Fi路由器支持简单网络管理协议(SNMP)。这是监控/管理网络连接设备的标准化方法。SNMP使用树状层级结构,其中每个节点都是一个对象。这些对象中的许多包含(实时)实例和指标的列表,例如网络接口、磁盘和Wi-Fi注册。

目前Home Assistant支持以下设备类型:

Important

此设备跟踪器需要在路由器上启用SNMP。您可能需要手动安装SNMP支持。

存在检测

以下OID示例从路由器提取当前MAC地址表。这反映了最近在网络上看到的所有设备。然而,由于设备在超时之前不会被移除,因此对于设备跟踪器集成页面来说,这种方法的效果不如预期。建议使用PingNmap

品牌 设备/固件 OID
Aerohive AP230 1.3.6.1.4.1.26928.1.1.1.2.1.2.1.1
Apple Airport Express (第二代) 7.6.9 1.3.6.1.2.1.3.1.1.21.3.6.1.2.1.4.22.1.2
Aruba IAP325在AOS 6.5.4.8上 1.3.6.1.4.1.14823.2.3.3.1.2.4.1.1
BiPAC 7800DXL固件2.32e 1.3.6.1.2.1.17.7.1.2.2.1.1
DD-WRT 未知版本/型号 1.3.6.1.2.1.4.22.1.2
IPFire 2.25 1.3.6.1.2.1.4.22.1.2
MikroTik 未知RouterOS版本/型号 1.3.6.1.4.1.14988.1.1.1.2.1.1
MikroTik RouterOS 6.x在RB2011上 1.3.6.1.2.1.4.22.1.2
OpenWrt Chaos Calmer 15.05 1.3.6.1.2.1.4.22.1.2
OPNSense 19.1 1.3.6.1.2.1.4.22.1.2
pfSense 2.2.4 1.3.6.1.2.1.4.22.1.2
Ruckus ZoneDirector 9.13.3 1.3.6.1.4.1.25053.1.2.2.1.1.3.1.1.1.6
TP-Link Archer VR1600v 1.3.6.1.2.1.3.1.1.2.16.1
TP-Link Archer VR2600v 1.3.6.1.2.1.3.1.1.2.19.1
TP-Link Archer VR600 1.3.6.1.2.1.3.1.1.2
Ubiquiti Edgerouter Lite v1.9.0 1.3.6.1.2.1.4.22.1.2

要在您的安装中使用SNMP版本1或2c平台,请将以下内容添加到您的configuration.yaml文件中:

# SNMP版本1或2c的configuration.yaml示例条目
device_tracker:
  - platform: snmp
    host: 192.168.1.1
    community: public
    baseoid: 1.3.6.1.4.1.14988.1.1.1.2.1.1

如果您想使用加密,则必须通过添加auth_keypriv_key变量并在路由器上启用SNMP版本3来启用它。目前仅支持SHA1用于身份验证和AES用于加密。SNMPv3配置示例:

# SNMP版本3的configuration.yaml示例条目
device_tracker:
  - platform: snmp
    host: 192.168.1.1
    community: USERNAME
    auth_key: AUTHPASS
    priv_key: PRIVPASS
    baseoid: 1.3.6.1.4.1.14988.1.1.1.2.1.1

Configuration Variables

host string Required

路由器的IP地址,例如192.168.1.1。

community string Required

为设备设置的SNMP社区。大多数设备的默认社区设置为public,并具有只读权限(这已足够)。

baseoid string Required

无线客户端注册可以找到的OID前缀,通常是供应商特定的。建议使用数字表示法。要查找此基本OID,请检查供应商文档或检查设备的MIB文件。

auth_key string (Inclusive)

SNMPv3的认证密钥。变量priv_key也必须被设置。

priv_key string (Inclusive)

用于SNMPv3的隐私密钥。变量auth_key也必须被设置。

请参阅设备跟踪器集成页面以获取如何配置需要被跟踪的人的说明。

使用模板

对于传入数据,值模板将传入的 JSON 或原始数据转换为有效的有效负载。 传入的有效负载使用可能的 JSON 值进行渲染,因此在渲染时,可以使用 value_json 访问基于 JSON 的有效负载中的属性,否则可以使用 value 变量来处理非 JSON 基础的数据。

此外,this 可以作为模板中的变量使用。this 属性指的是实体的当前 实体状态。 关于 this 变量的更多信息可以在 模板文档 中找到。

Note

带 json 的示例值模板:

给定有效负载:

{ "state": "ON", "temperature": 21.902 }

模板 {{ value_json.temperature | round(1) }} 渲染为 21.9

传感器

snmp传感器平台显示通过简单网络管理协议(SNMP)获得的信息。SNMP使用树状层级结构,其中每个节点是一个对象,主要支持网络设备,例如路由器、调制解调器和打印机。

要在您的安装中启用此传感器,请将以下内容添加到您的configuration.yaml文件中:

# configuration.yaml条目的示例
sensor:
  - platform: snmp
    host: 192.168.1.32
    baseoid: 1.3.6.1.4.1.2021.10.1.3.1

Configuration Variables

accept_errors string (Optional, default: false)

决定传感器是否应该启动并保持工作,即使SNMP主机不可达或不响应。这允许传感器在启动Home Assistant时正确初始化,即使例如,您的打印机未开启。

auth_key string (Optional, default: 无密钥)

用于SNMP v3的认证密钥。

auth_protocol string (Optional, default: none)

用于SNMP v3的认证协议。

baseoid string Required

信息所在的OID。建议使用数字表示法。

community string (Optional, default: public)

为SNMP v1和v2c设置的设备SNMP社区。大多数设备的默认社区设置为public,具有只读权限(这已足够)。

default_value string (Optional)

决定如果设置了accept_errors并且主机不可达或不响应,传感器应采用什么值。如果未设置,传感器在错误情况下将具有值unknown

device_class string (Optional)

设置设备的类别,更改显示在前端的设备状态和图标。

host string (Optional, default: localhost)

您主机的IP地址,例如192.168.1.32

icon template (Optional)

定义SNMP传感器图标的模板。

name template (Optional, default: SNMP)

定义SNMP传感器名称的模板。

picture template (Optional)

定义SNMP传感器实体图像的模板。

port string (Optional, default: 161)

您主机的SNMP端口。

priv_key string (Optional, default: 无密钥)

用于SNMP v3的隐私密钥。

priv_protocol string (Optional, default: none)

用于SNMP v3的隐私协议。

state_class string (Optional)

传感器的state_class

unique_id string (Optional)

唯一标识此实体的ID。这允许从Web界面更改nameiconentity_id

unit_of_measurement string (Optional)

定义传感器的测量单位(如果有)。

username string (Optional)

用于身份验证的用户名。

value_template template (Optional)

定义一个模板以解析值。

version string (Optional, default: 1)

SNMP协议的版本,12c3。读取64位计数器的数据需要2c或更高版本。

auth_protocol的有效值:

  • none
  • hmac-md5
  • hmac-sha
  • hmac128-sha224
  • hmac192-sha256
  • hmac256-sha384
  • hmac384-sha512

priv_protocol的有效值:

  • none
  • des
  • 3des-ede
  • aes-cfb-128
  • aes-cfb-192
  • aes-cfb-256

查找OID

OID可能在不同系统上有所不同,因为它们是供应商特定的。除了设备手册,OID仓库是查找OID的好地方。例如,以下OID用于Linux系统的负载。

  • 1分钟负载: 1.3.6.1.4.1.2021.10.1.3.1
  • 5分钟负载: 1.3.6.1.4.1.2021.10.1.3.2
  • 15分钟负载: 1.3.6.1.4.1.2021.10.1.3.3

有许多用于SNMP的工具可供使用。snmpwalk让您轻松检索OID的值。

$ snmpwalk -Os -c public -v 2c 192.168.1.32 1.3.6.1.4.1.2021.10.1.3.1
laLoad.1 = STRING: 0.19

示例

打印机正常运行时间(分钟)

根据最常见的SNMP标准,设备的正常运行时间可以在OID 1.3.6.1.2.1.1.3.0下访问。值以称为TimeTicks的格式表示,以百分之一秒为单位。

要创建一个传感器,用于以分钟为单位显示打印机的正常运行时间,您可以使用以下配置:

# configuration.yaml条目的示例
sensor:
  - platform: snmp
    name: "打印机正常运行时间"
    host: 192.168.2.21
    baseoid: 1.3.6.1.2.1.1.3.0
    accept_errors: true
    unit_of_measurement: "分钟"
    value_template: "{{((value | int) / 6000) | int}}"

accept_errors选项将允许传感器在Home Assistant首次启动时即使打印机未开启也能正常工作:传感器将仅显示-而不是分钟数。

value_template选项将原始值转换为分钟。

开关

snmp开关平台允许您控制支持SNMP的设备。

目前,仅支持接受整数值的SNMP OID。支持SNMP v1、v2c和v3。

要在您的安装中使用SNMP开关:

# configuration.yaml条目的示例:
switch:
  - platform: snmp
    host: 192.168.0.2
    baseoid: 1.3.6.1.4.1.19865.1.2.1.4.0

Configuration Variables

baseoid string Required

要轮询开关状态的SNMP BaseOID。

command_oid string (Optional)

开关的SNMP OID,以开关的开与关,如果与baseoid不同。

host string (Optional, default: localhost)

要控制的IP/主机。

port string (Optional, default: 161)

通信的端口。

community string (Optional, default: private)

用于身份验证的社区字符串(SNMP v1和v2c)。

username string (Optional)

用于身份验证的用户名。

auth_key string (Optional, default: 无密钥)

用于SNMP v3的认证密钥。

auth_protocol string (Optional, default: none)

用于SNMP v3的认证协议。

priv_key string (Optional, default: 无密钥)

用于SNMP v3的隐私密钥。

priv_protocol string (Optional, default: none)

用于SNMP v3的隐私协议。

version string (Optional, default: 1)

要使用的SNMP版本- 12c3

payload_on string (Optional, default: 1)

代表开关的状态的返回值。相同的值用于写入以打开开关(如果未设置command_payload_on)。

payload_off string (Optional, default: 0)

代表开关的状态的返回值。相同的值用于写入以关闭开关(如果未设置command_payload_off)。

command_payload_on string (Optional)

要写入以打开开关的值,如果与payload_on不同。

command_payload_off string (Optional)

要写入以关闭开关的值,如果与payload_off不同。

vartype string (Optional, default: none)

根据RFC1902定义的payload_onpayload_off命令的SNMP变量类型。

您应该与设备的供应商联系,以了解正确的BaseOID以及开关的开启和关闭值。

auth_protocol的有效值:

  • none
  • hmac-md5
  • hmac-sha
  • hmac128-sha224
  • hmac192-sha256
  • hmac256-sha384
  • hmac384-sha512

priv_protocol的有效值:

  • none
  • des
  • 3des-ede
  • aes-cfb-128
  • aes-cfb-192
  • aes-cfb-256

vartype的有效值:

  • Counter32
  • Counter64
  • Gauge32
  • Integer32
  • Integer
  • IpAddress
  • ObjectIdentifier
  • OctetString
  • Opaque
  • TimeTicks
  • Unsigned32

完整示例:

switch:
  - platform: snmp
    name: SNMP v1开关
    host: 192.168.0.2
    community: private
    baseoid: 1.3.6.1.4.1.19865.1.2.1.4.0
    payload_on: 1
    payload_off: 0

  - platform: snmp
    name: SNMP v3开关
    host: 192.168.0.3
    version: "3"
    username: "myusername"
    auth_key: "myauthkey"
    auth_protocol: "hmac-sha"
    priv_key: "myprivkey"
    priv_protocol: "aes-cfb-128"
    baseoid: 1.3.6.1.4.1.19865.1.2.1.4.0
    payload_on: 1
    payload_off: 0

  - platform: snmp
    name: 使用SNMP v3启用Netgear交换机端口2的PoE
    host: 192.168.0.4
    version: "3"
    username: "myusername"
    auth_key: "myauthkey"
    auth_protocol: "hmac-sha"
    priv_key: "myprivkey"
    priv_protocol: "des"
    baseoid: 1.3.6.1.4.1.4526.11.15.1.1.1.1.1.2
    payload_on: 15400
    payload_off: 3000
    vartype: Gauge32