We hebben het allemaal wel een keer meegemaakt dat Internet thuis opeens niet werkt. Je merkt dan pas hoe afhankelijk je hier van bent en hoe vervelend dat is. In dat geval is de eerste actie altijd om je Modem en/of Router te rebooten. Vaak lost dit dan het probleem op. Indien dat niet het geval is dan ligt de oorzaak niet bij jou maar bij je Internet provider.
Aangezien ik nu Domoticz heb draaien heb ik hier eens over nagedacht of ik deze actie niet kan automatiseren. Ik werd hierbij op het idee gebracht door de bestaande ResetPlug oplossing. Deze oplossing is echter redelijk duur (US$ 59,99) en dat moest goedkoper kunnen dacht ik.
Met behulp van mijn eerdere opgedane kennis met de Sonoff S20 en Watchdog heb ik een idee uitgewerkt. Ik heb nu Sonoff S20 devices gebruikt voor de Ziggo Modem en Unifi USG router die mijn Internet verkeer regelen.
Verder heb ik een LUA ‘Timer’ script geschreven dat een aantal grote internet sites (Google, Cloudfare, Microsoft en NU.nl) checkt. Als deze allemaal niet zijn te pingen voor een langere tijd, dan moet er wel iets met Internet aan de hand zijn. In dat geval schakel ik de power van de Ziggo Modem en Unifi USG Router uit, wacht 1 minuut en schakel deze weer in. Dit zou in de meeste gevallen het probleem moeten oplossen.
Dit alles leidt tot het volgende stappen plan:
- Prepareer Sonoff S20 device (zie hier)
- Installeer ‘System Alive Checker’ plugin (zie hier)
- Maak gebruikersvariabelen aan nodig voor LUA ‘Time’ script
- Voeg LUA ‘Time’ script toe
Bij ‘System Alive Checker’ heb ik de volgende grote internet sites gedefinieerd:
Hiervan heb ik apparaten gemaakt (Instellingen > Apparaten) door de groene pijl te drukken en deze een naam te geven:
Voor het LUA ‘Time’ script heb ik de volgende gebruikersvariabelen (Instellingen > Meer Opties > Gebruikersvariabelen) nodig:
Voeg vervolgens een LUA ‘Time’ script toe:
Zet hierin de volgende inhoud:
-------------------------------------------------------------------------------- -- Internet Beschikbaar -------------------------------------------------------------------------------- -- Check if Internet is still accessible. This is done by pinging some major -- internet sites (Google, Cloudfare, Microsoft, Nu.nl). If you cannot ping -- all of thes internet sites for defined couple of minutes (see below) then: -- - turn 'Off' Modem & Router device -- - wait one LUA 'Time' Script cycle (1 minute) -- - turn 'On' Modem & Router device -------------------------------------------------------------------------------- commandArray = {} -- Define your modem, router and timeout (in minutes) local modem = 'Ziggo Modem' local router = 'Unifi USG' local wait_before_internet_down = 10; -- in minutes -------------------------------------------------------------------------------- -- Implementation -------------------------------------------------------------------------------- -- Check if couple of major internet sites are offline if ( (otherdevices['Ping Google'] == 'Off') and (otherdevices['Ping Cloudfare'] == 'Off') and (otherdevices['Ping Microsoft'] == 'Off') and (otherdevices['Ping NU.nl'] == 'Off') ) then print("Internet Not Available for '" .. uservariables["Watchdog_Internet_Down"] .. "' minutes"); -- Increment Watchdog_Internet_Down commandArray['Variable:Watchdog_Internet_Down'] = tostring( uservariables["Watchdog_Internet_Down"] + 1 ); if ( tonumber(uservariables["Watchdog_Internet_Down"]) >= wait_before_internet_down) then -- Not able to ping couple of major internet sites for 'x' minutes, thus Internet must be off print("Internet Not Available for longer period of time, reboot 'Modem' and 'Router'"); -- Modem & Router not already turned off if (tonumber(uservariables["Modem_Router_Restarted"]) == 0) then -- Turn off Modem & Router devices print ("Turn off Modem"); commandArray[modem] = 'Off' print ("Turn off Router"); commandArray[router] = 'Off' -- Mark that Modem & Router are turned 'Off' commandArray['Variable:Modem_Router_Restarted'] = tostring(1); -- Modem & Router were just turned 'Off', thus turn them 'On' again else commandArray['Variable:Watchdog_Internet_Down'] = tostring(0); commandArray['Variable:Modem_Router_Restarted'] = tostring(0); -- Turn on Modem if set to 'Off' if ( otherdevices[modem] == 'Off') then print ("Turn on Modem"); commandArray[modem] = 'On' end -- Turn on Router if set to 'Off' if ( otherdevices[router] == 'Off') then print ("Turn on Router"); commandArray[router] = 'On' end end end -- Able to ping at least one major internet site, thus Internet Available else -- Mark Internet Up commandArray['Variable:Watchdog_Internet_Down'] = tostring(0); commandArray['Variable:Modem_Router_Restarted'] = tostring(0); end return commandArray
Bovenaan in dit script kun je de Sonoff S20 devices definieren waarop je het Ziggo Modem en Router hebt aangesloten. Verder kun je de timeout instellen hoe lang je geen internet moet hebben voordat het Ziggo Modem en de Router worden gereboot.
Hopelijk heb ik dit script nooit nodig, maar het is altijd handig om te hebben.
Hoi,
de namen die je gebruikt:
local modem = ‘Ziggo Modem’
local router = ‘Unifi USG’
Zijn dit namen zoals die in domoticz genoemd zijn? (de naam van de Switch / Sonoff)?
Dit is eigenlijk het enige stukje wat ik niet begrijp. 🙂
Dat zijn inderdaad de namen zoals ik ze genoemd heb in ‘Apparaten’.