Jump to content
Калькуляторы

Микротик скрипт отправка в телеграмм информации о динамическом IP (решено)

Помогите разобраться, пожалуйста.
Имеется вот такой скриптик, который при получении динамического IP отправляет информацию об устройстве в телегу.

:if ($leaseBound = 1) do={
/ip dhcp-server lease;
:foreach i in=[find dynamic=yes] do={
:local dhcpip
:set dhcpip [ get $i address ];
:local clientid
:set clientid [get $i host-name];
:if ($leaseActIP = $dhcpip) do={
:local comment "New IP"
:set comment ( $comment . ": " .  $dhcpip . ": " . $clientid);
/log error $comment;
/tool fetch url="https://api.telegram.org/botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX/sendMessage?chat_id=XXXXXXXXX&text=IP:$leaseActIP;$leaseActMAC;SRV:$leaseServerName;HN:$clientid"
}
}
}

так вот, при срабатывании в телегу валится 5-10 сообщений.

New Client IP:ХХХ.ХХХ.ХХХ.ХХХ 00:00:00:00:00:00 SRV:home_net HN:android-412b2a0b5cf421b6 signal-strength:-81dBm@1Mbps

подскажите, где кольцо, в чем ошибка?

Edited by Yur0k

Share this post


Link to post
Share on other sites

@Yur0k , у Вас обрабатываются ВСЕ, в том числе, ранее выданные адреса в конструкции 

:foreach i in=[find dynamic=yes]

Share this post


Link to post
Share on other sites

скрипт отрабатывает при выдаче в dhcp. "Lease Script"

соответственно кроме только что выданного нет больше.. его и швыряет в отчет много раз

Share this post


Link to post
Share on other sites

@Yur0k , попробуйте в fetch использовать keep-result=no

Edited by nkusnetsov

Share this post


Link to post
Share on other sites
27 минут назад, nkusnetsov сказал:

@Yur0k , попробуйте в fetch использовать keep-result=no

 

image.thumb.png.01f610926e92ded5d37e3b1d10274e07.png

без изменений.. :(

Share this post


Link to post
Share on other sites

@Yur0k , а в логах что? Команда "/log error $comment" тоже несколько раз отрабатывает?

Share this post


Link to post
Share on other sites
1 час назад, nkusnetsov сказал:

@Yur0k , а в логах что? Команда "/log error $comment" тоже несколько раз отрабатывает?

да, тоже самое

image.png.88eea004f25e13dd94bece98bfa0f2b7.png

Share this post


Link to post
Share on other sites
2 часа назад, nkusnetsov сказал:

@Yur0k , а в логах что? Команда "/log error $comment" тоже несколько раз отрабатывает?

Я сильно виноват.... я не тот скрипт выложил. верхний отрабатывает нормально. мне нужен уровень сигнала. добавляем запрос и получается куча сообщений.

:if ($leaseBound = 0) do={
/int wire reg;
:foreach i in=[find] do={
:local ss
:set ss [get $i signal-strength];

/ip dhcp-server lease;
:foreach i in=[find dynamic=yes] do={
:local dhcpip
:set dhcpip [ get $i address ];
:local clientid
:set clientid [get $i host-name];


:if ($leaseActIP = $dhcpip) do={
:local comment "New IP"
:set comment ( $comment . ": " .  $dhcpip . ": " . $clientid. ": " . $ss);
/log error $comment;
/tool fetch url="https://api.telegram.org/botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX/sendMessage?chat_id=XXXXXXXXX&text=IP:$leaseActIP;$leaseActMAC;SRV:$leaseServerName;HN:$clientid"
}
}
}
}

 

Share this post


Link to post
Share on other sites
7 часов назад, Yur0k сказал:

/int wire reg; :foreach i in=[find]

Вот и ответ. Количество сообщений = количеству зарегистрированных на ТД клиентов.
Поиск в таблице регистрации надо провести единожды (один новый мак) по leaseActMAC, типа
/int wire reg;

:foreach i in=[find mac-address=$leaseActMAC]

Edited by nkusnetsov

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now