Разница с реализацией "Bagir" в том, что инициатором отправки выступает не mojerdomo а сам микрот.
скрипт для микрота. вставляется в system -> scheduler. запуск скрипта при загрузки системы
:local url "http://192.168.10.1:8080/mikrot.php"; #вызываемый скрипт
:local delay 10; #период отправки данный в сек.
while (true) do={
:set $str "";
:local cltmp [/caps-man registration-table print count-only]; #Определяем кол-во подключеных клиентов
:local counts ($cltmp-1); #т.к. массив начинается с 0 то уменьшаем на 1.
:local li [:toarray ""];
:for x from=0 to= $counts do={ #вытаскиваем клиентов WIFI и формируем строку _POST
:local client [/caps-man registration-table get number=$x interface ];
:local macadd [/caps-man registration-table get number=$x mac-address ];
:local rx [/caps-man registration-table get number=$x rx-signal ];
if ($str = nil) do= {
:set $str "$client;$macadd;$rx";
} else={
:set $str "$str|$client;$macadd;$rx";
}
}
# отправка запроса на сервере.
:do {
/tool fetch mode=http url=$url keep-result=no http-method="post" http-data="wifi=$str" ;
} on-error={ log warning "Mojerdomo: Send to server Failed!" }
:delay $delay;
}
$ip = $_SERVER['REMOTE_ADDR'];
$array=$_POST['wifi'];
$tmp1 = explode('|', $array); //разбиваем по переданным элементы строки
foreach ($tmp1 as $i) {
list($interface, $mac ,$rx) = explode(";", $i); //вытаскиваем переменные
// echo ("if=$if <br/> mac=$mac <br/>rx=$rx <br/>");
if ($mac != ''){
$wificlienttmp['interface'] = $interface;
$wificlienttmp['mac'] = $mac;
$wificlienttmp['rx'] = $rx;
$wificlienttmp['ip'] = $ip;
$wificlient[] = $wificlienttmp;
}
}
// на выходе получаем массив $wificlient со всеми mac-адресами и к какой точки доступа подключен клиент. дальше пинайте куда надо.
Вообщем мой результат таков
Скрипт на микротике:
:set $str "";
:foreach i in=[/caps-man registration-table find] do={
:local mac [/caps-man registration-table get $i mac-address];
:local ip [/ip dhcp-server lease get [/ip dhcp-server lease find where mac-address="$mac"] address];
:local getcomment [/ip dhcp-server lease get [/ip dhcp-server lease find where address="$ip"] comment];
:local hostname [/ip dhcp-server lease get [/ip dhcp-server lease find where mac-address="$mac"] host-name];
:local capnumber [/caps-man registration-table get [/caps-man registration-table find where mac-address="$mac"] interface];
:local rxsignal [/caps-man registration-table get [/caps-man registration-table find where mac-address="$mac"] rx-signal];
:local uptime [/caps-man registration-table get [/caps-man registration-table find where mac-address="$mac"] uptime];
:set $str "$str|$getcomment;$hostname;$capnumber;$rxsignal;$ip;$mac;$uptime";
}
:do {
/tool fetch mode=http url=$url keep-result=yes dst-path="result.txt" http-method="post" http-data="wifi=$str";
} on-error={ log warning "Mojerdomo: Send to server Failed!" }
$ip = $_SERVER['REMOTE_ADDR'];
$array=$_POST['wifi'];
print_r($array);
$tmp1 = explode('|', $array); //разбиваем по переданным элементы строки
foreach ($tmp1 as $i) {
list($getcomment, $hostname, $capnumber, $rxsignal, $ip, $mac, $uptime) = explode(";", $i); //вытаскиваем переменные
if ($mac != ''){
$wificlienttmp['getcomment'] = $getcomment;
$wificlienttmp['hostname'] = $hostname;
$wificlienttmp['capnumber'] = $capnumber;
$wificlienttmp['rxsignal'] = $rxsignal;
$wificlienttmp['ip'] = $ip;
$wificlienttmp['mac'] = $mac;
$wificlienttmp['uptime'] = $uptime;
$wificlient[] = $wificlienttmp;
}
}
p.s. - утром на свежую голову разобрался print_r($wificlienttmp);
А вот как связать это с majordomo, совсем не знаю, так как с php не дружу, ну или он со мной))
Если кто подскажет, буду очень благодарен.