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.