Инструменты пользователя

Инструменты сайта


mikrotik:rb3011uias:routeros:system:scripts:test_modem

Периодическое тестирование USB-модема

Данный скрипт предполагает подключение 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 сессия, ошибка пропала!

Код для импорта

test-modem.rsc
/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."

Запуск скрипта

Скрипт должен выполняться периодически. Параметры запуска смотрите в соответствующем разделе.

Политики запуска

Это минимально необходимый набор для работы скрипта.

  • ftp,
  • read,
  • write,
  • policy,
  • test,
  • sensitive.

Дисклеймер

  • Использование материалов данной базы знаний разрешено на условиях лицензии, указанной внизу каждой страницы! При использовании материалов активная гиперссылка на соответствующую страницу данной базы знаний обязательна!
  • Автор не несет и не может нести какую либо ответственность за последствия использования материалов, размещенных в данной базе знаний. Все материалы предоставляются по принципу «как есть». Используйте их исключительно на свой страх и риск.
  • Все высказывания, мысли или идеи автора, размещенные в материалах данной базе знаний, являются исключительно его личным субъективным мнением и могут не совпадать с мнением читателей!
  • При размещении ссылок в данной базе знаний на интернет-страницы третьих лиц автор не несет ответственности за их техническую функциональность (особенно отсутствие вирусов) и содержание! При обнаружении таких ссылок, можно и желательно сообщить о них в комментариях к соответствующей статье.

Обсуждение

Ваш комментарий:
A​ R J B F T E F B H L F D E J᠎ R
 
Последнее изменение: 2022/02/12 11:40 (внешнее изменение)