I have a Z-Wave smartplug on my cable modem. If my Internet goes down for an extended period of time, I want to reboot the modem, by powering it off first, then having a delay, then powering it back on.
Here is the automation I use :
alias: Reboot cable modem if no Internet for 30 minutes
description: ""
trigger:
- platform: state
entity_id:
- binary_sensor.googlednsping
to: "off"
for:
hours: 0
minutes: 30
seconds: 0
condition: []
action:
- service: switch.turn_off
data: {}
target:
entity_id: switch.power_switch_2
- delay:
hours: 0
minutes: 0
seconds: 30
milliseconds: 0
- service: switch.turn_on
data: {}
target:
entity_id: switch.power_switch_2
mode: single
Yesterday, there was an extended outage of 3.5 hours. The automation triggered once after the first 30 minutes of outage, but never again. It wasn’t until I got home and reset the modem manually that Internet came back. The outage could well have been shorter than 3.5 hours, but the XB8 gateway/modem (in bridge mode) somehow isn’t smart enough to reconnect on its own when service comes back, so a reset was necessary, whether manual or automated.
How can I make my automation trigger more than once (ie. try again every 30 minutes during an outage) ? This is primarily to keep the network going in my absence, as was the case yesterday. I actually noticed it because I tried to connect to my home VPN and it failed.
I have the same setup and the same problem. It’s quite fresh for me because the past two days Comcast has been a total piece of crap, going in and out all day. My setup works like this:
Created a Ping sensor to check the internet
When it goes down for more than 5 minutes (indicating an outage) then it enables a “restart” automation that will turn off the smart plug the modem is connected to for 30 seconds and then power it back on again
The automation restarts the modem up to 6 times, with a repeat for every 5 minutes (so 30 minutes total) to see if it comes up. Each time it does that it increments a Helper with how many restarts have been attempted.
If it’s still down then the 5 minute restart automation is disabled and the 15 minute restart automation begins, again incrementing the helper up to 16 times.
If it’s still down then the 15 minute automaton is disabled and a 30 minute automation runs until it comes up again
When it comes up the helper is set back to zero (I call it Comcast Restart Count), all restart automations are disabled and it is back to normal
During each step I use persistent notifications so I know what is happening and at what frequency
I used to just restart the modem in perpetuity but I would sometimes get into strange issues where the modem might take more than 5 minutes to come back up and just get restarted again, resulting in never having my Internet back until I stopped the madness. This new system has been rock solid for me. The biggest reason I wanted such an elaborate system is because I’m often out of town in my RV and cannot afford to have the Internet down at the house.
It requires 3 automations, though. And the duration of the timer has to be input twice, each time the timer is started. Is there any way to avoid that duplication ?
But, once the timer is setup, do you really need to set the number of minutes (I think that is what you are saying) multiple times? I was thinking restart just started over.
Can you show what you have setup so we can discuss?
I haven’t tried restarting the timer without specifying the time. I don’t know if it would run for the previously set amount of time, or if it would run indefinitely.
What I have is this :
alias: Start Google DNS ping timer for 30 minutes
description: Start timer when Google DNS becomes unreachable
trigger:
- platform: state
entity_id:
- binary_sensor.googlednsping
to: "off"
condition: []
action:
- service: timer.start
data:
duration: "00:30:00"
target:
entity_id: timer.googlednstimer
mode: single
alias: Reset Google DNS ping timer
description: Reset timer when Google DNS becomes reachable
trigger:
- platform: state
entity_id:
- binary_sensor.googlednsping
to: "on"
condition: []
action:
- service: timer.cancel
target:
entity_id:
- timer.googlednstimer
device_id: []
area_id: []
data: {}
mode: single
alias: >-
Reboot cable modem if Google DNS ping timer finishes, and restart timer for 30
minutes
description: ""
trigger:
- platform: event
event_type: timer.finished
event_data:
entity_id: timer.googlednstimer
condition: []
action:
- service: switch.turn_off
data: {}
target:
entity_id: switch.power_switch_2
- delay:
hours: 0
minutes: 0
seconds: 30
milliseconds: 0
- service: switch.turn_on
data: {}
target:
entity_id: switch.power_switch_2
- service: timer.start
data:
duration: "00:30:00"
target:
entity_id: timer.googlednstimer
mode: single
Actually it will, not that I care if it survives, because it’s one of the very few places where I enable and disable automation and the automation is on a time pattern, so within X minutes of restart it will try to cycle again.