London

<<< Back

Мониторинг хостов с миротика

На микротике пингую по 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' ? '&#128698;' : '&#128697;').' '.$this->description.PHP_EOL.'&#10060; Отключен'.($gender=='female' ? 'а' : ''),-1);

gotHome:

$this->setProperty('atHome',1);
$gender=$this->getProperty('gender');
say(($gender=='female' ? '&#128698;' : '&#128697;').' '.$this->description.PHP_EOL.'&#9989; Подключен'.($gender=='female' ? 'а' : ''),-1);

Discuss (2) (6)

See also:
2020-09-03 Уведомления ZoneMinder без модуля.
2020-05-14 Подписка на топики mqtt

Ашукино, Россия

На форуме: London