Итак, нашлось время и желание попробовать написать что нибудь из первого поста. После нескольких часов .... родил следующее:
Скрипт, вызывается каждые 10 секунд. Код: Выделить всё
:local ParamInterfaceName "ISP-PPPoE-OPCOM";
:local ParamPingHost "8.8.8.8";
:local ParamPingCount 10;
:global LastInterfaceStatus;
:global LastAction;
:local DayTime do={
:local tmptime [/system clock get value-name=time];
:return (([:pick $tmptime 0 2] * 3600) + ([:pick $tmptime 3 5] * 60) + [:pick $tmptime 6 8]);
};
:local InterfaceStatus "Unknown";
:local PingStatus 0;
:local SMSString "Empty";
:local Action "None";
if ([$DayTime] >= 20400 && [$DayTime] <= 21600) do={
# Nothing :)
} else={
:set SMSString ("Test interface: " . $ParamInterfaceName);
# Определяем состояние интерфейса (disabled, connected, disconnected, ...).
/interface pppoe-client monitor [find name="$ParamInterfaceName"] once do={:set InterfaceStatus $status};
# Основная логика.
:if ($InterfaceStatus = "connected") do={
:set SMSString ($SMSString . "\nInterface: Connected");
# Проверяем доступность мира #
:set PingStatus [ping count=$ParamPingCount interface=$ParamInterfaceName interval=100ms $ParamPingHost];
:if ($PingStatus > 0) do={
:if ($PingStatus = $ParamPingCount) do={
:set SMSString ($SMSString . "\nPing: Ok");
} else={
:set SMSString ($SMSString . "\nPing: Unstable");
}
} else={
:set SMSString ($SMSString . "\nPing: Failed");
}
# #
:set Action "SMS";
} else={
:if ($InterfaceStatus = "disabled") do={
# Nothing :)
} else={
:set SMSString ($SMSString . "\nInterface: Failed");
:set Action "SMS";
}
}
:if ($Action = "SMS" && $LastInterfaceStatus != $InterfaceStatus) do={
# Отправляем SMS #
:do {
:log info ("/tool sms send port=usb3 phone-number=+79030000000 channel=3 message=$SMSString");
} on-error={
:log info "Send SMS: Error!";
}
# #
:set LastInterfaceStatus $InterfaceStatus;
}
}
Несколько комментариев:
1) "
if ([$DayTime] >= 20400 && [$DayTime] <= 21600)" Таким методом я избавляюсь от ложных срабатываний, т.к. в период с 5:40 до 6:00 мой провайдер перезагружает своё оборудование. Переменная DayTime содержит кол-во секунд с начала дня.
2) Отправку смс временно загнал в лог, отладка...
Что можете сказать по коду, какие предложение по улучшению?
PS> Когда допилем, выложу в паблик.