问题
我的家庭网络配置是一个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也能控制,所以接下来就比较简单了。
首先,通过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中进行断网检测现在点
配置
——场景与自动化
——创建自动化
——创建新的自动化
,在触发条件
中添加状态
,实体选择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
总结
至此,基本实现断网自动化重启全部关键网络节点来恢复网络,极大提高了家庭网络可用性,记录一下。