All ofthese scripts will be running on an RBLHGR with an R11e-LTE6 modem. First is a script to detect if either of the next two scripts are currently running before starting the internet-detector:
Code: Select all
#check if internet-detector running before starting new instance
:local IDscript "internet-detector"
:local LTERscript "LTE-reset"
:local IDRunning [/system script job find script=$IDscript]
:local LTER-running [/system script job find script=$LTERscript]
:log info message="checking if $IDscript "
:delay 1s
:if ([:len $LTER-running] = 1)
do={:log error message="LTE reset in progress, delaying start of internet-detector"
}
else={:if ([:len $IDRunning] = 0)
do={:log info message="starting internet-detector script"; /system script run $IDscript
} \
} \
else={:log error message="internet-detector already running, delaying script start"
}
Code: Select all
:log info message="internet-detector script starting" \
:local LTER-script "LTE-reset"
:local LTER-running
#remove old file before fetching new copy
:do {/file remove [find where name=Manual:TOC]; \
/tool fetch url=https://update.mikrotik.com/wiki/Manual:TOC mode=https; \
#fetch website to check connectivity and look for timeout
#ping and resolve/nslookup do not fail when modem hangs
on-error {:log error message="internet-detector first fail" \
:delay 30s; \
#wait 30s and try again to give the modem room to self-recover
:do {/tool fetch url=https://update.mikrotik.com/wiki/Manual:TOC mode=https \
on-error {:log error message="internet-detector second fail" \
#check if LTE-reset script is already running before starting it
set $LTER-running = [system script job find script=$LTER-script] \
:delay 1s;
:if ([:len $LTER-running = 0]) do={/system script run $LTER-script} \
}
}
}
}
:log info message="internet-detector script finished"
Code: Select all
:log warning message="LTE-reset script starting"
#reset ether1 interface if its not running
while ([/interface ethernet get ether1 running] = false) \
do={:log error message="ether1 not running, resetting ethernet interface" \
/interface ethernet
set ether1 disabled=yes \
:delay 1s; \
set ether1 disabled=no \
:delay 15s; \
}
:log warning message="Reseting LTE interface now"
/interface lte
set lte1 disabled=yes \
:delay 3s; \
set lte1 disabled=no
:log info message="LTE reset script finished"
edit: had to fix my code blocks. I can provide a network diagram if needed.