本帖最后由 Mirukuteii 于 2018-8-2 12:59 编辑  
 
 
【AsusWrt】自制路由器信息采集插件,支持华硕梅林固件,更新至0.06版 
 
 
【AsusWrt】自制路由器信息插件,支持华硕梅林固件
插件发布 AsusWrt sensor  路由器 华硕 梅林 
      
憋说话,先发图。 
 
 
感谢
万分感谢@aktfin、@咸味土豆、@yoyosuka 以及其他坛友们对本插件提出的宝贵意见和建议,并感谢囧帅大大@Jones以及论坛一如既往的支持。 
更新
- Version:0.06 (update:2018-05-13):
 
-增加了2个新的实体,sensor.router_wifi_24G_stalist、sensor.router_wifi_5G_stalist,用来获取2.4G和5G无线网络设备接入情况。两个实体的状态值代表接入设备的数量,属性sta_list中保存了接入设备的MAC地址列表。 
-更改了若干个实体的默认ICON。 
- Version:0.05 (update:2018-05-11):
 
修正了Telnet链接缺少关键库的疏漏。 
修正了上传速度依然可能为负值的疏漏。 
- Version:0.04 (update:2018-05-10):
 
加入对系统默认温度单位的判断,添加支持华氏度。 
修正了uint32最大值归零,导致网速为负值的错误。 
- Version:0.03 (update:2018-05-10):
 
对实体_update方法的字典取值方式进行改进,避免由于路由器故障而出现KeyError错误。 
 
前言
前段时间楼主拜读了囧帅大大@Jone的神贴:梅林路由器CPU和无线芯片温度接入Home Assistant,有所启发,一直想写本插件。本来五一前准备完成的,不料病来如山倒,一个流感把我折腾了好几个礼拜,真要命,趁着这几天终于觉得好点了,赶紧来交作业。由于时间有限,目前这个插件只是一个很基础的版本,很多功能写得不够完善,设想中的一些功能也没有添加进去,不过至少可以正常使用。 
原理
利用SSH或Telnet远程登录路由器并运行相应指令以获取路由器信息。 
前置条件
- 确保你的路由器固件与AsusWrt兼容(楼主的路由器是网件R7000,固件是华硕梅林380.66_4-X7.5),好吧其实这点也不是很重要。
 
- 确保你的路由器已经打开SSH或者Telnet。这点至关重要。
 
 
特性和展望
- 由于是自制插件,为避免未知错误导致HA无法启动,本插件设定为HA完全初始化之后(通过监听事件)才开始装载。所以理论上,本插件不可能导致HA无法启动的情况,也不可能拖慢HA的启动速度。
 
- 本插件提供的网速功能,计算对象为路由器PPP0口,下载与上传均为对外速度,不包含内部传输。算法上比较粗糙,也许会出现遗漏流量的情况。具体算法为根据插件前后两次读取的数据进行计算,将两次获得的PPP0口数据量之差除以读取时间之差。正因如此,本插件刚启动后,由于只获得一次更新值,故无法通过差值计算网速,此时状态显示为:
spd init...,这是正常现象,只需等待至第二次状态更新后,即可通过差值得到正常数据。 
- 本插件提供的无线传输功率功能,每个值对应的是一根天线,一般有几根天线就有几个值。
 
- 插件装载后,SSH进入打开状态,除非更新时间设定过长超时关闭,否则不会自动关闭,直至HA关闭为止。
 
- 目前本插件只是运行在sensor插件下的一个平台型插件,与HA自带的
device_tracker.asuswrt插件并不冲突。后期考虑并入device_tracker.asuswrt的一些功能。 
- 本插件提供的无线网络接入设备列表,方法为以设备授权为准判定是否接入,略区别于
device_tracker.asuswrt中的以设备关联为准,经测试本方法同样准确、迅速、可靠)。 
- 后期将进一步改进各项功能。
 
 
文件
asuswrt.py
请放在配置文件根目录下的custom_components/sensor文件夹中,若不存在请创建。 
文件链接:(版本0.06 更新2018-05-13)  
 
 
 
asuswrt.py
(20.01 KB, 下载次数: 774)
 
 
routermon.yaml
建议放在自己的packages文件夹中,也可将其内容修改并添加到configuration.yaml中。group中的传感器请注意按照自己的配置进行修改。 
#AsusWrt路由器监控配置文件
sensor:
  - platform: asuswrt
    host: #你的路由器IP地址,必填
    username: #路由器登录用户名,必填
    protocol: #协议,填ssh或者telnet,默认ssh
    port: #ssh或telnet端口, 默认22
    password: #如果使用密码登录,就在这里填密码
    ssh_key: #如果你使用sshkey登录,就在这里填私钥文件的路径
    update_interval: '00:01:00' 
    #更新间隔时间,默认1分钟,建议不低于30秒,不大于5分钟(过大会导致网速计算错误)
    router_conditions:
      - cpu  #可选项,CPU信息类
      - mem  #可选项,内存信息类
      - net  #可选项,网络信息类
      - wifi #可选项,无线网络信息类
             #可选项,不可描述
group:
  routermon:
    name: 'ROUTER监控'
    view: no
    entities:
      - sensor.router_name
      - sensor.router_nowtime
      - sensor.router_uptime
      - sensor.router_cpu_temp
      - sensor.router_cpu_1min_load
      - sensor.router_cpu_5min_load
      - sensor.router_cpu_15min_load
      - sensor.router_mem_used
      - sensor.router_mem_free
      - sensor.router_mem_shrd
      - sensor.router_mem_buff
      - sensor.router_mem_cached
      - sensor.router_net_mac
      - sensor.router_net_wan_ip
      - sensor.router_net_lan_ip
      - sensor.router_net_wan_downspd
      - sensor.router_net_wan_upspd
      - sensor.router_wifi_24G_temp
      - sensor.router_wifi_5G_temp
      - sensor.router_wifi_24G_txpwr
      - sensor.router_wifi_5G_txpwr
      - sensor.router_wifi_24G_stalist
      - sensor.router_wifi_5G_stalist
 
Groups.yaml
把如下代码放置到该文件的某个位置,那个你想要显示的群组的entities项中。 
- group.routermon
  
 
 |