Страница 2 из 3

Re: Как правильно написать скрипт в микротике

Добавлено: 23 окт 2014, 17:15
vqd
Вы издеваетесь что ли?
Вам же написал микротик ошибку, вполне все ясно. Или вы переводчиками пользоваться не умеете?

Re: Как правильно написать скрипт в микротике

Добавлено: 27 окт 2014, 16:45
Сержа
Спасибо разобрался.

Re: Как правильно написать скрипт в микротике

Добавлено: 02 дек 2014, 00:45
Vita077
Чтобы не создавать тему, пишу в этой. Пожалуйста подскажите правильный скрипт, который бы оправлял ip интерфейса ppp-out1 с 3G модемом на email, при его смене. Почтовый клиент в микротике настроил, сообщения доходят, находил подобные скрипты, но они для предыдущей пятой версии RouterOS, в синтаксисе пока не силен. В данный момент на роутере использую версию 6.19.
 примерный скрипт для 5 версии
#Check if IP on interface have changed

:global currentIP;

:local newIP [/ip address get [find interface="ppp-out1"] address];

:if ($newIP != $currentIP) do={
:put "ip address $currentIP changed to $newIP";
:set currentIP $newIP;

#Send Message

/tool e-mail
set address=74.125.143.109
set port=587
set from=******@gmail.com
set user=******@gmail.com
set password=************

send to=******@gmail.com=("Mikrotik currentIP = ".[$currentIP]." ( ". [/system clock get date] ." ". [/system clock get time] ." ) " ) \ body=$currentIP start-tls=yes

:log info "Reports send currentIP OK"
}

Re: Как правильно написать скрипт в микротике

Добавлено: 02 дек 2014, 02:54
GDragon
Я сейчас использую вот такую конструкцию.
У меня 6.22 но я думаю должно работать. :)

p.s.
Делал в т.ч. и себе на будущее поэтому там много комментариев и сообщений в логи. (Соответственно можно подчистить - он станет короче).
Т.к. особо скриптингом на Mikrotik не занимался не исключаю что где то можно сделать проще/акуратнее.

Но работает. Шлёт на мыло письмо если IP изменился и не шлёт если нет :D.

 скрипт накатанный мной в 6.22
# Check ip and send to e-mail if changed
#---------- Config below this line ----------

# set WAN interface name
:local WAN "you WAN interface name here";
# set e-mail smtp server name
:local smtpserv [:resolve "you smtp server here"];
# set e-mail username
:local Eaccount "you e-mail here";
# set e-mail password
:local Epassword "you password here";

#---------- Config above this line ----------

:global StoredIP
:local sysname [/system identity get name];
:local sysver [/system package get system version];
:local CurrIP
:log info "Checking external ip & send IP to e-mail if changed"

# Get IP address

:set CurrIP [/ip address get [/ip address find interface=$WAN] address]
:set CurrIP [:pick [:tostr $CurrIP] 0 [:find [:tostr $CurrIP] "/"]]

:if ([:len $CurrIP] = 0) do={
:log error ("Could not get IP for interface " . $WAN)
:error ("Could not get IP for interface " . $WAN)
} else={:log info "IP from $WAN get."}

:log info "Checking & sending IP if needed."

# Check IP address & send if needed

:if ($StoredIP != $CurrIP) do={
/tool e-mail send from="<$Eaccount>" to="<$Eaccount>" server=$smtpserv \
port=587 user=$Eaccount password=$Epassword start-tls=yes \
subject=("Mikrotik $sysname IP changed (" . [/system clock get date] . \
")") body=("New $sysname IP: $CurrIP.\nRouterOS \
version: $sysver\nTime and Date stamp: " . [/system clock get time] . " \
" . [/system clock get date]);
:log info "Send new IP to e-mail complete"
:set StoredIP "$CurrIP"
:log info "Stored IP Updated"
} else={:log info "IP not changed"}

Re: Как правильно написать скрипт в микротике

Добавлено: 02 дек 2014, 23:50
GDragon
Кстати, гуру - подскажите как реализовать проверку на заполненность переменной внутри команды отправки?

Допустим переменная
:local Eccmail "";
если она пустая то команда отправки
/tool e-mail send from="sender" to="recipient" server=smtpserver port=587 user=mailuser password=mailpassword start-tls=yes subject=("subject") body=("body");
Если в ней что-то есть то команда отправки
/tool e-mail send from="sender" to="recipient" cc="$Eccmail" server=smtpserver port=587 user=mailuser password=mailpassword start-tls=yes subject=("subject") body=("body");

(И да я знаю что можно через if выбирать одну из двух команд но зочется покороче)

Возможно ли впихнуть проверку в саму команду?
Например /tool e-mail send from="sender" to="recipient" [:if ( $Eccmail != zero ) do={ cc="$Eccmail" } ] server=smtpserver port=587 user=mailuser password=mailpassword start-tls=yes subject=("subject") body=("body");
Все осложняет отсутствие вменяемых средств отладки в rOS :(

Re: Как правильно написать скрипт в микротике

Добавлено: 03 дек 2014, 06:50
vqd
За утренним кофе особо делать было нечего. Конструкция такая, не проверял

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

:local Eccmail "";
:if ($Eccmail != "") do={:set Eccmail "cc=$Eccmail"}
[:parse "/tool e-mail send from=sender to=recipient $Eccmail server=smtpserver port=587 user=mailuser password=mailpassword start-tls=yes subject=\"subject\" body=\"123\""]



А если подумать то вообще можно сократить до

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

:local Eccmail "";
:if ($Eccmail != "") do={:set Eccmail "cc=$Eccmail"}
[:parse "/tool e-mail send to=recipient $Eccmail subject=\"subject\" body=\"123\""]


А если учесть тот факт что такая конструкция тоже работает

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

/tool e-mail send to=vqd2012@gmail.com cc="" subject="test" body="123" 


То соответственно имеем на выходе

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

/tool e-mail send to=recipient сс=$Eccmail subject="subject" body="123"


Все, кофе закончился, дальше читайте документацию, там все это есть

Re: Как правильно написать скрипт в микротике

Добавлено: 03 дек 2014, 10:59
GDragon

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

/tool e-mail send to=recipient cc="" subject="test" body="123" 

Неа... не работает :) во всяком случае у меня в 6.22 оно ругается на неверный синтаксис при отправке. в логах светится попытка отправки на пустой емейл и ругань почтового сервера на это.

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

:local Eccmail "";
:if ($Eccmail != "") do={:set Eccmail "cc=$Eccmail"}

Какое однако страшное шаманство >_<

Re: Как правильно написать скрипт в микротике

Добавлено: 03 дек 2014, 11:06
vqd
все работает. Надо просто подумать

Re: Как правильно написать скрипт в микротике

Добавлено: 03 дек 2014, 11:11
vqd
Сейчас специально на 6.22 попробовал. Все гуд

Re: Как правильно написать скрипт в микротике

Добавлено: 03 дек 2014, 11:25
GDragon
Да пардон, сам ошибся :)

Ещё 2 вопроса
зачем [:parse если в команде вычислений не производится?

и допустим дефолтная переменная не пустая а содержит текст
:local Eccmail "put additional recepients here, separate with , ";
тогда вариант с наличием cc="$Eccmail" в команде отправки не прокатит :Р

Внутри команды /tool e-mail вычисление и добавление по необходимости точно не сделать? Только снаружи? (Или вообще разделять две команды отправки?)