На микротике пингую по 1 пакету айпишки и смотрю, не появился ли арп
Если arp не появился больше чем за count раз, отправляю в телеграм, что отключился пользователь.
:local findARP do={
global checkarp;
:local sendTlgrm do={
:local time [/system clock get time];
:local date [/system clock get date];
:local text;
:if ($conn = "0") do={
:set $text ($who.".outOfHome")
} else={
:set $text ($who.".gotHome")
}
:tool fetch url="http://**IP_сервера_majordomo**/api.php/method/$text" keep-result="no"
}
if ([:typeof $checkarp] != "array") do={ :global checkarp {a=1;} }
if (len(($checkarp->$who)) < 0) do={ set ($checkarp->$who) $count }
:local tmpip;
:local tmpcomplete;
:local pingresult [:ping $ip count=1];
:foreach i in=[ :ip arp find ] do={
:set tmpip [:ip arp get $i address];
:set tmpcomplete [:ip arp get $i complete];
if (($tmpip = $ip) && ($tmpcomplete = true)) do={
if (($checkarp->$who) = $count) do={ $sendTlgrm who=$who conn="1" }
set ($checkarp->$who) 0;
} else={
if ($tmpip = $ip) do={
if (($checkarp->$who) < $count) do={
if (($checkarp->$who) = $count-1) do={ $sendTlgrm who=$who conn="0" }
:set ($checkarp->$who) (($checkarp->$who)+1)
}
}
}
}
}
$findARP who="Vasya" ip="192.168.22.56" count=5
$findARP who="Petya" ip="192.168.21.254" count=5
Vasya и Petya в конце скрипта должны совпадать с названиями соответствующих им объектов в majordomo.
При появлении устройства и запуске скрипта - будет вызван метод gotHome у соответствующего пользователя.
Через count раз отсутсвия устройства будет вызван метод outOfHome
В методах использую такой код, предварительно введя параметр gender для пользователей, определяющий их пол.
outOfHome:
$this->setProperty('atHome',0);
$gender=$this->getProperty('gender');
say(($gender=='female' ? '🚺' : '🚹').' '.$this->description.PHP_EOL.'❌ Отключен'.($gender=='female' ? 'а' : ''),-1);
gotHome:
$this->setProperty('atHome',1);
$gender=$this->getProperty('gender');
say(($gender=='female' ? '🚺' : '🚹').' '.$this->description.PHP_EOL.'✅ Подключен'.($gender=='female' ? 'а' : ''),-1);
Королёв, Россия
На форуме: London