оповещение в телегу

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Mk51
Сообщения: 13
Зарегистрирован: 03 май 2022, 16:54

Sheva писал(а): 18 июн 2023, 19:30 Так же была "хотелка" видеть новых клиентов сети в телеграме, получивших динамический IP от микротика. Реализовал без скрипта телеграм через DHCP Server / DHCP / deconf / Script:
Здравствуйте
А для статики как будет? Кроме else ветки главного условия.

Данный скрипт будет работать только в окружении dhcp сервера? Те нельзя как-то вытянуть другие данные с других таблиц, к примеру wifi? И лог не работает.

Код: Выделить всё

:local IpAdd [/ip dhcp-server lease get value-name=address number=[/ip dhcp-server lease find address=$leaseActIP]]
:local WI [/interface wireless registration-table get [find last-ip=$IpAdd] interface];
:log info ($WI);


Sheva
Сообщения: 15
Зарегистрирован: 06 фев 2023, 17:29

Mk51 писал(а): 18 июн 2023, 23:43
Здравствуйте
А для статики как будет? Кроме else ветки главного условия.

Данный скрипт будет работать только в окружении dhcp сервера? Те нельзя как-то вытянуть другие данные с других таблиц, к примеру wifi? И лог не работает.
Ну статика остается статикой, для меня не актуально смотреть на "дискотеку" в телеграме, а вот новые клиенты всегда видны и можно перевести их тоже в статику. Из других таблиц тоже можно "вытягивать", но у меня в микротике нет WiFi и мне не актуально. Обратитесь с кодом и хотелками к GPT чату, он поможет.


Аватара пользователя
LANa
Сообщения: 3
Зарегистрирован: 05 сен 2023, 15:39

Создала по гайду на официальном сайте failover переключение с основного провайдера на симку. Попробовала, всё отлично работает, а при переключении становится недоступным одно из nat правил маскарадинга, привязанного на определённый интерфейс, на который можно было бы подвесить скрипт проверки "отвалившегося" правила и отправлять уведомление в телегу о том, что произошло переключение на другого провайдера?
Изображение
Я пока ещё не профи и только начала изучать Router OS, поэтому прошу помощи в скриптинге. :smu:sche_nie:


Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

На правило или интерфейс подвесить скрипт нельзя. Скрипт либо работает сам по себе из репозитория, либо может быть "подвешен" только к некоторым опциям, например DHCP-серверу или профилю VPN.
В Вашем случае проверять доступность Интернета через определённый интерфейс нужно пингом. Это избитая тема и скриптов было написано подобных тьма, легко гуглится.
Ну а профи тут вообще нет, профи работают в Микротик :-)


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
LANa
Сообщения: 3
Зарегистрирован: 05 сен 2023, 15:39

Sertik писал(а): 06 сен 2023, 08:39 В Вашем случае проверять доступность Интернета через определённый интерфейс нужно пингом.
Как заставить скриптом пинговать действующий маршрут через необходимый интерфейс?


bst-botsman
Сообщения: 189
Зарегистрирован: 13 окт 2018, 20:53
Откуда: Беларусь

LANa писал(а): 06 сен 2023, 10:26
Sertik писал(а): 06 сен 2023, 08:39 В Вашем случае проверять доступность Интернета через определённый интерфейс нужно пингом.
Как заставить скриптом пинговать действующий маршрут через необходимый интерфейс?
Коли уж выдергиваете фразу из контекста - то я Вам постараюсь ответить фразой уважаемого Sertik, которую Вы почему-то проигнорировали:
Sertik писал(а): 06 сен 2023, 08:39 Это избитая тема и скриптов было написано подобных тьма, легко гуглится.


RB3011UiAS x 1
RB4011iGS+5HacQ2HnD x 3
951Ui-2nD x 2
hAP ac^2 x 24
CheckPoint 1590 x 1
Аватара пользователя
LANa
Сообщения: 3
Зарегистрирован: 05 сен 2023, 15:39

Тут все такие отзывчивые, просто милашки, особенно джентльмен выше, пусть конкретно по делу ничего не скажут, зато советов надают... И вообще, чувствуется дружелюбная атмосфера, все готовы прийти новичку на помощь. ) По теме вопроса перелопатила документацию, глянула пару скриптов на официальном форме, после чего написала свой скрипт, it works like a charm!


Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Как заставить скриптом пинговать действующий маршрут через необходимый интерфейс?
Обыкновенно, например так (маршрут должен быть меченым):

:local ping [/tool ping intherface=ether1 routing-mark="bla-bla" count=3]
глянула пару скриптов на официальном форме, после чего написала свой скрипт
Поделитесь опытом, будет интересно и полезно.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
-13-
Сообщения: 125
Зарегистрирован: 18 мар 2021, 12:45

у себя делал резервирование через рекурсивную маршрутизацию, далее раз в минуту скриптами проверяю интерфейсы ISP, результаты которых пишутся в L7, если при очередной проверке результаты разняться отправляем оповещение в телегу

скрипты, возможно подкрутите под себя
 данные с интерфейсов

Код: Выделить всё

# Name: fnListISP
# Description: get ISP name&status

:set $counter 0
/ip dhcp-client
:foreach ISP in=[find ~""] do={
    :set $interfaceISP ([get $ISP]->"interface")
    :set $nameISP ([get $ISP]->"comment")
    :set $statusISP ([get $ISP]->"status")
    :if (!any $statusISP) do={
        :set $statusISP ([/interface ethernet monitor $interfaceISP once as-value]->"status")
    }
    :set $ipISP ([get $ISP]->"address")
    :if (any $ipISP) do={
        :set $ipISP [:pick $ipISP 0 [:find $ipISP "/"]]
    } else={
        :set $ipISP $statusISP
    }
    :set ($listISP->$counter) {name=$nameISP; status=$ipISP; interface=$interfaceISP}
    :set $counter ($counter + 1)
}

:return $listISP

# End
 проверка интерфейсов

Код: Выделить всё

# Name: -Check ISP
# Description: check ISP status

:global fnParse
:global tgSend

:set $dbCmd [[$fnParse script="dbCmd"]]
:set $myChat ($dbCmd->"myChat")
:set $myAlarmChat ($dbCmd->"myAlarmChat")
:set $syName ($dbCmd->"syName")
:set $cuDate ($dbCmd->"syClock"->"date")
:set $cuTime ($dbCmd->"syClock"->"time")
:set $cuWAN ($dbCmd->"cuWAN"->"comment")

:set $ISP [[$fnParse script="fnListISP"]]
:set $nameISP1 ($ISP->0->"name"); :set $cuISP1 ($ISP->0->"status")
:set $nameISP2 ($ISP->1->"name"); :set $cuISP2 ($ISP->1->"status")

:set $ISP1 [[$fnParse script="fnL7"]\
            name=$nameISP1\
            regexp=$cuISP1\
            comment=($nameISP1 . " current status")]
:set $ISP2 [[$fnParse script="fnL7"]\
            name=$nameISP2\
            regexp=$cuISP2\
            comment=($nameISP2 . " current status")]
:set $WAN [[$fnParse script="fnL7"]\
            name="Route to WAN"\
            regexp=$cuWAN\
            comment=("Active route toWAN")]

:set $text  ("$syName%0A\
            $cuDate - $cuTime%0A\
            any ISP change status%0A\
            %0A")

:if (($ISP1 != $cuISP1) or ($ISP2 != $cuISP2) or ($WAN != $cuWAN)) do={
    :if ($ISP1 != $cuISP1) do={
        :set $text   ($text . \
                    "$nameISP1: $cuISP1%0A\
                    old value: $ISP1%0A\
                    %0A")
        /ip firewall layer7-protocol set [find comment ~ $nameISP1] regexp=$cuISP1
        :if ($cuISP1 ~ "[0-9]") do={
            :execute [[$fnParse script="fnYDNS"] cuISP1=$cuISP1]
        }
    }
    :if ($ISP2 != $cuISP2) do={
        :set $text   ($text . \
                    "$nameISP2: $cuISP2%0A\
                    old value: $ISP2%0A\
                    %0A")
        /ip firewall layer7-protocol set [find comment ~ $nameISP2] regexp=$cuISP2
    }
    :if ($WAN != $cuWAN) do={
        :set $text   ($text . \
                    "Route to WAN: $cuWAN%0A\
                    old value: $WAN%0A\
                    %0A")
        /ip firewall layer7-protocol set [find comment="Active route toWAN"] regexp=$cuWAN
    }
    $tgSend chatid=$myChat text=$text
}

# End


Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Я не понял скрипты выше выдернуты из контекста ? ибо где у Вас объявление переменных ?
Вы по старой привычке переменные не объявляете ?
Как это работает. Я не смог запустить ...


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Ответить