问题

我的家庭网络配置是一个openwrt的软路由,机柜里配备了UPS(不间断电源),理想状态是只要不停电,就可以7x24小时实现网络畅通,确保智能家居的正常运行,但是有一些未知因素,不定期导致断网。

问题一

总是会出现要么openwrt拨号断开,无法联网,查看日志也没找到原因,但是只要重启一下路由器就正常。

问题二

宽带是联通的,光猫的PON认证总是会不定时掉,变成未认证,即使我换了一个VOSL光猫,问题还是是出现。

解决

针对问题一

只需在openwrt中添加定时脚本,只要监测到断网,那么自动重启网络,脚本代码如下:

#!/bin/sh
tries=0
logger "my network watchdog start"
while [[ $tries -lt 5 ]]
do
        if /bin/ping -c 1 114.114.114.114 >/dev/null
        then
            logger "network pass, exit."
            exit 0
        fi
        tries=$((tries+1))
        sleep 10
done
logger "network error, restart network"
/etc/init.d/network restart

保存到 root/xxx.sh xxx是脚本名字,随意起。
然后到openwrt定时任务里添加以下代码,切记添加到其他任务之前,否则路由器重启可能会丢配置

*/6 * * * * sh /root/xxx.sh

以上代码表示每6分钟检查一次网络
通过设置,即可实现路由器监测到断网,自动重启网路并重新拨号

针对问题二

联通送的光猫因技术有限,不能通过脚本实现,只能另寻他法。我的解决方案是光猫的电源上加了一个智能插座,然后通过插件接入home assistant,虽然插座是Wi-Fi连接或者蓝牙mesh连接的,即使断网,home assistant也能控制,所以接下来就比较简单了。

  1. 首先,通过File Editor修改/config/configuration.yaml文件,在末尾添加以下代码

    # ping 检测
    binary_sensor:
      - platform: ping
     host: 114.114.114.114
     name: wannet
     scan_interval: 30
     count: 5

    以上代码是通过ping组件,每30秒钟ping 114.114.114.114服务器5次,如果无法ping通,则代表网络断开。

    注意:yaml文件特别要注意缩进,否则会报错!

    现在已经实现了在home assistant中进行断网检测

  2. 现在点配置——场景与自动化——创建自动化——创建新的自动化,在触发条件中添加状态,实体选择wannet,在从(选填)中填on,在变为(选填)填off,然后在动作中依次添加关闭光猫插座——延迟10秒钟——打开光猫插座即可。yaml代码如下:

    alias: 断网自动重启光猫
    description: ""
    trigger:
      - platform: state
     entity_id:
       - binary_sensor.wannet
     from: "on"
     to: "off"
     for:
       hours: 0
       minutes: 0
       seconds: 10
    condition: []
    action:
      - type: turn_off
     device_id: 光猫插座的device_id
     entity_id: 光猫插座的entity_id
     domain: switch
      - delay:
       hours: 0
       minutes: 0
       seconds: 10
       milliseconds: 0
      - type: turn_on
     device_id: 光猫插座的device_id
     entity_id: 光猫插座的entity_id
     domain: switch
    mode: single

总结

至此,基本实现断网自动化重启全部关键网络节点来恢复网络,极大提高了家庭网络可用性,记录一下。

Last modification:April 23, 2023
If you think my article is useful to you, please feel free to appreciate