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

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

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

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.