Данный скрипт предполагает подключение USB-модема только в режиме Stick
! Для режима HiLink
нужно писать совершенно другой скрипт.
Инициализация функций, используемых в скрипте. Эти функции вводятся скриптом «variable-initialization»!
:global sendEvent; :global pingSession; :global ispLogging;
Эти переменные также вводятся скриптом «variables-initialization».
:global pppNumber; :global pingCount; :global stableConnectFrom;
Локальные переменные, используемы этим скриптом.
:local interfaceName [/interface ppp-client get $pppNumber name]; :local pingCountTotal ($pingCount * 2); :local pingStatus;
Тело скрипта. Подключает модем, проверяет и, если ошибка, сообщает администратору и логирует.
/interface ppp-client { :if ( [get $pppNumber disable] = true ) do={ :log info ("Connecting $interfaceName for testing..."); :do { set $pppNumber disable=no } on-error={ :log warning ("$interfaceName enabled at the second attempt!"); set $pppNumber disable=no; }; :delay 10s; $pingSession pingFrom=$interfaceName myPingCount=2; :set pingStatus [ $pingSession pingFrom=$interfaceName ]; set $pppNumber disable=yes; :log info ("Disconnecting $interfaceName after testing."); $ispLogging outInt=$interfaceName receivedPing=$pingStatus totalPing=$pingCountTotal startMode="test-modem-scheduler" newFileAt=month; :if ( $pingStatus < $stableConnectFrom ) do={ :local msgBad "$interfaceName failure (received $pingStatus/$pingCountTotal)!"; :log warning ("$msgBad"); $sendEvent msg=$msgBad; } else={ :log info ("$interfaceName is OK (received $pingStatus/$pingCountTotal)."); } } else={ :local modemEnabled "$interfaceName testing is not complete! It is already enabled..."; $sendEvent mode=sms msg=$modemEnabled; :log warning ("$modemEnabled"); } }
В версии RouterOS 6.46.3
(про другие не знаю) есть баг из-за которого, если в списке PPP интерфейсов есть только модем, он с первой попытки не включается, только со второй. Поэтому пришлось вводить костыль. Как только в списке их стало больше одного, добавилась постоянно подключенная VPN сессия, ошибка пропала!
/system script add comment="\CF\E5\F0\E8\EE\E4\E8\F7\E5\F1\EA\EE\E5 \F2\E5\F1\F2\E8\F0\EE\E2\ \E0\ED\E8\E5 \EC\EE\E4\E5\EC\E0" dont-require-permissions=no name=\ test-modem owner=petya policy=ftp,read,write,policy,test,sensitive \ source="# Written by Nikolay Soloshin (nikolay@soloshin.su) for RouterOS v\ 6.46.3 on RB3011UiAS (arm) @ 2020.03\r\ \n\r\ \n# Functions used in the script. They are entered by the script \"variabl\ e-initialization\" when the device starts!\r\ \n:global sendEvent;\r\ \n:global pingSession;\r\ \n:global ispLogging;\r\ \n\r\ \n# These variables are set by the script \"variables-initialization\" whe\ n the device starts!\r\ \n:global pppNumber;\r\ \n:global pingCount;\r\ \n:global stableConnectFrom;\r\ \n\r\ \n# Local variables used in the script.\r\ \n:local interfaceName [/interface ppp-client get \$pppNumber name];\r\ \n:local pingCountTotal (\$pingCount * 2);\r\ \n:local pingStatus;\r\ \n\r\ \n# The body of the script. Checks the modem and sends a message to the ad\ ministrator in case of failure.\r\ \n/interface ppp-client {\r\ \n :if ( [get \$pppNumber disable] = true ) do={\r\ \n :log info (\"Connecting \$interfaceName for testing...\");\r\ \n :do { set \$pppNumber disable=no } on-error={\r\ \n :log warning (\"\$interfaceName enabled at the second attempt!\");\ \r\ \n set \$pppNumber disable=no; };\r\ \n :delay 10s;\r\ \n \$pingSession pingFrom=\$interfaceName myPingCount=2;\r\ \n :set pingStatus [ \$pingSession pingFrom=\$interfaceName ];\r\ \n set \$pppNumber disable=yes;\r\ \n :log info (\"Disconnecting \$interfaceName after testing.\");\r\ \n \$ispLogging outInt=\$interfaceName receivedPing=\$pingStatus totalP\ ing=\$pingCountTotal startMode=\"test-modem-scheduler\" newFileAt=month;\r\ \n :if ( \$pingStatus < \$stableConnectFrom ) do={\r\ \n :local msgBad \"\$interfaceName failure (received \$pingStatus/\$p\ ingCountTotal)!\";\r\ \n :log warning (\"\$msgBad\");\r\ \n \$sendEvent msg=\$msgBad;\r\ \n } else={\r\ \n :log info (\"\$interfaceName is OK (received \$pingStatus/\$ping\ CountTotal).\"); }\r\ \n } else={\r\ \n :local modemEnabled \"\$interfaceName testing is not complete!\ \_It is already enabled...\";\r\ \n \$sendEvent mode=sms msg=\$modemEnabled;\r\ \n :log warning (\"\$modemEnabled\"); }\r\ \n}\r\ \n\r\ \n# With love from Vladivostok."
Скрипт должен выполняться периодически. Параметры запуска смотрите в соответствующем разделе.
Это минимально необходимый набор для работы скрипта.
Обсуждение