Mikrotik

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

eeak1
Сообщения: 51
Зарегистрирован: Чт май 12, 2016 9:13 am
Благодарил (а): 22 раза
Поблагодарили: 11 раз
Контактная информация:

Re: Mikrotik

Сообщение eeak1 » Чт апр 12, 2018 3:23 pm

При API 1.6 попробуйте в скрипте

Код: Выделить всё

$API = new RouterosAPI();
Обратите внимание на заглавные буквы.
Алиса живёт на нубуке с закрытой крышкой в Docker контейнере, соседствует с контейнерами nextcloud, plex, mosquitto, и т.д.
ранее в Docker контейнере на Raspberry Pi 4
ранее натив на Raspberry Pi 3
https://www.eeak.biz
Anton_V
Сообщения: 27
Зарегистрирован: Пн апр 30, 2018 10:15 pm
Откуда: Уфа
Благодарил (а): 7 раз
Поблагодарили: 5 раз

Re: Mikrotik

Сообщение Anton_V » Пн май 07, 2018 10:44 pm

Bagir писал(а):
Чт май 21, 2015 10:34 am
У меня всегда открыт коннект ))
Микротик отлично делится данными, причем ничуть не напрягаясь. Есть только нехороший момент с логами Микротика. Там куча записей об авторизации пользователя, который периодически лазает за данными. Возможно было бы лучше не рвать соединение с микротиком. Как нибудь надо будет попробовать сделать так.
Более того, если в сети несколько Микротиков (один главный, остальные ведомые), То с главного Микротика можно забирать списки всех WiFi клиентов Ведомых Микротиков. Это весьма актуально для частных домов, где один роутер не может надежно покрыть всю площадь дома и сада.
есть идея подобное провернуть только со стороны микрота. т.е. заставить микрот отправлять данные мажердомо, ну или накрайняк написать скрипт приемника на пхп.
со стороны микртота идет отправка скажем массива всех зарегистрированных клиентов на точках доступа, или же даже написать анализ изменения точки регистрации (capsman - registration tab) и при изменение делать вызов php скрипта в можердоме. который уже разпихает все по нужным местам.
у кого нить есть подобные наработки? или с нуля начинать?
Anton_V
Сообщения: 27
Зарегистрирован: Пн апр 30, 2018 10:15 pm
Откуда: Уфа
Благодарил (а): 7 раз
Поблагодарили: 5 раз

Re: Mikrotik

Сообщение Anton_V » Вт май 08, 2018 11:39 pm

Anton_V писал(а):
Пн май 07, 2018 10:44 pm
Bagir писал(а):
Чт май 21, 2015 10:34 am
У меня всегда открыт коннект ))
Микротик отлично делится данными, причем ничуть не напрягаясь. Есть только нехороший момент с логами Микротика. Там куча записей об авторизации пользователя, который периодически лазает за данными. Возможно было бы лучше не рвать соединение с микротиком. Как нибудь надо будет попробовать сделать так.
Более того, если в сети несколько Микротиков (один главный, остальные ведомые), То с главного Микротика можно забирать списки всех WiFi клиентов Ведомых Микротиков. Это весьма актуально для частных домов, где один роутер не может надежно покрыть всю площадь дома и сада.
есть идея подобное провернуть только со стороны микрота. т.е. заставить микрот отправлять данные мажердомо, ну или накрайняк написать скрипт приемника на пхп.
со стороны микртота идет отправка скажем массива всех зарегистрированных клиентов на точках доступа, или же даже написать анализ изменения точки регистрации (capsman - registration tab) и при изменение делать вызов php скрипта в можердоме. который уже разпихает все по нужным местам.
у кого нить есть подобные наработки? или с нуля начинать?
В общем сделал передачу подключенных WIFI клиентов с mikrotik в PHP скрипт. сразу скажу, что делалось все под CAPsMAN. с обычным WIFI работать не будет.
Разница с реализацией "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;

}
ну и сам скрипт в PHP
СпойлерПоказать
<?php

$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-адресами и к какой точки доступа подключен клиент. дальше пинайте куда надо.
За это сообщение автора Anton_V поблагодарил:
Amarok (Ср май 09, 2018 7:49 am)
Рейтинг: 1.16%
Der_Dachs
Сообщения: 16
Зарегистрирован: Пт май 11, 2018 6:40 pm
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: Mikrotik

Сообщение Der_Dachs » Пт май 11, 2018 10:24 pm

TheForum писал(а):
Чт апр 05, 2018 12:14 am
А вы указали IP рутера, его логин и пароль в переменных? У меня уже пару лет скрипт работает...
По шагам (У меня win7 64bit):
1. В папку C:\_majordomo\htdocs\lib добавляете файл routeros_api.class.php;
2. Создаете у объекта ThisComputer 3 новых свойства и вводите свои данные:
ThisComputer.Mikrotik_IP
192.168.0.3 (введите свои данные)
ThisComputer.Mikrotik_login
admin
ThisComputer.Mikrotik_password
pass
Добрый день. Друзья подскажите пожалуйста, у меня используется микрокомпьютер Banana PI M1 Plus с ОС Armbian, установлен с помощью скрипта установки Majordomo. Собственно заинтересовала статья по выводу данных с Mikrotik (Мой MikroTik RB951UI-2HND). Так как с php не дружу особо, то вопрос следующий: где найти объект ThisComputer. API в настройках включено, я так понимаю что в скрипте, который пишется в сценариях, в первых трёх строчках подставить свои значения, а именно ip адрес роутера, логин к нему и пароль. routeros_api.class.php положен в папку /var/www/lib Пока только осваиваюсь в системе...
Единственное, что требуется для триумфа зла - это чтобы хорошие люди ничего не делали. Эдмунд Бёрк
Anton_V
Сообщения: 27
Зарегистрирован: Пн апр 30, 2018 10:15 pm
Откуда: Уфа
Благодарил (а): 7 раз
Поблагодарили: 5 раз

Re: Mikrotik

Сообщение Anton_V » Вс май 13, 2018 10:07 am

Der_Dachs писал(а):
Пт май 11, 2018 10:24 pm
TheForum писал(а):
Чт апр 05, 2018 12:14 am
А вы указали IP рутера, его логин и пароль в переменных? У меня уже пару лет скрипт работает...
По шагам (У меня win7 64bit):
1. В папку C:\_majordomo\htdocs\lib добавляете файл routeros_api.class.php;
2. Создаете у объекта ThisComputer 3 новых свойства и вводите свои данные:
ThisComputer.Mikrotik_IP
192.168.0.3 (введите свои данные)
ThisComputer.Mikrotik_login
admin
ThisComputer.Mikrotik_password
pass
Добрый день. Друзья подскажите пожалуйста, у меня используется микрокомпьютер Banana PI M1 Plus с ОС Armbian, установлен с помощью скрипта установки Majordomo. Собственно заинтересовала статья по выводу данных с Mikrotik (Мой MikroTik RB951UI-2HND). Так как с php не дружу особо, то вопрос следующий: где найти объект ThisComputer. API в настройках включено, я так понимаю что в скрипте, который пишется в сценариях, в первых трёх строчках подставить свои значения, а именно ip адрес роутера, логин к нему и пароль. routeros_api.class.php положен в папку /var/www/lib Пока только осваиваюсь в системе...
ThisComputer находится Объекты -> Computer -> ThisComputer . дальше к объекту ThisComputer нужно добавить 3 новых свойства Mikrotik_IP, Mikrotik_login, Mikrotik_password.
За это сообщение автора Anton_V поблагодарил:
Der_Dachs (Вс май 13, 2018 11:03 am)
Рейтинг: 1.16%
Der_Dachs
Сообщения: 16
Зарегистрирован: Пт май 11, 2018 6:40 pm
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: Mikrotik

Сообщение Der_Dachs » Вс май 13, 2018 11:03 am

Благодарю вас. Думал что-то интересное, а оказалось просто список подключенных клиентов к роутеру по Wi-Fi... :D :D :D
Единственное, что требуется для триумфа зла - это чтобы хорошие люди ничего не делали. Эдмунд Бёрк
Anton_V
Сообщения: 27
Зарегистрирован: Пн апр 30, 2018 10:15 pm
Откуда: Уфа
Благодарил (а): 7 раз
Поблагодарили: 5 раз

Re: Mikrotik

Сообщение Anton_V » Вс май 13, 2018 1:23 pm

Der_Dachs писал(а):
Вс май 13, 2018 11:03 am
Благодарю вас. Думал что-то интересное, а оказалось просто список подключенных клиентов к роутеру по Wi-Fi... :D :D :D
на основе это списка можно много что сделать. например при подходе к дому/воротам/гаражу (регистрация на определенной точки доступа) включать освещение, открывать ворота гаража,выдавать сигнал кто пришел. вариантов использования множество.
За это сообщение автора Anton_V поблагодарил:
Der_Dachs (Вс май 13, 2018 1:34 pm)
Рейтинг: 1.16%
Der_Dachs
Сообщения: 16
Зарегистрирован: Пт май 11, 2018 6:40 pm
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: Mikrotik

Сообщение Der_Dachs » Вс май 13, 2018 1:34 pm

Anton_V писал(а):
Вс май 13, 2018 1:23 pm
Der_Dachs писал(а):
Вс май 13, 2018 11:03 am
Благодарю вас. Думал что-то интересное, а оказалось просто список подключенных клиентов к роутеру по Wi-Fi... :D :D :D
на основе это списка можно много что сделать. например при подходе к дому/воротам/гаражу (регистрация на определенной точки доступа) включать освещение, открывать ворота гаража,выдавать сигнал кто пришел. вариантов использования множество.
К сожалению своими воротами как и домом, я ещё не обзавёлся. :) Есть только своя квартира. Пока тренируюсь на Banana Pi с Armbian на борту и на сервере с ОС Centos 7. MD знаю уже давно, наверное, когда он только появился, а вот руки до него дошли только сейчас...
Единственное, что требуется для триумфа зла - это чтобы хорошие люди ничего не делали. Эдмунд Бёрк
Anton_V
Сообщения: 27
Зарегистрирован: Пн апр 30, 2018 10:15 pm
Откуда: Уфа
Благодарил (а): 7 раз
Поблагодарили: 5 раз

Re: Mikrotik

Сообщение Anton_V » Вс май 13, 2018 2:03 pm

Der_Dachs писал(а):
Вс май 13, 2018 1:34 pm
Anton_V писал(а):
Вс май 13, 2018 1:23 pm
Der_Dachs писал(а):
Вс май 13, 2018 11:03 am
Благодарю вас. Думал что-то интересное, а оказалось просто список подключенных клиентов к роутеру по Wi-Fi... :D :D :D
на основе это списка можно много что сделать. например при подходе к дому/воротам/гаражу (регистрация на определенной точки доступа) включать освещение, открывать ворота гаража,выдавать сигнал кто пришел. вариантов использования множество.
К сожалению своими воротами как и домом, я ещё не обзавёлся. :) Есть только своя квартира. Пока тренируюсь на Banana Pi с Armbian на борту и на сервере с ОС Centos 7. MD знаю уже давно, наверное, когда он только появился, а вот руки до него дошли только сейчас...
тогда согласен. вам эта тема не особо интересна. :)
akininav
Сообщения: 12
Зарегистрирован: Ср мар 06, 2019 7:55 pm
Благодарил (а): 2 раза
Поблагодарили: 4 раза

Re: Mikrotik

Сообщение akininav » Чт мар 07, 2019 10:23 am

В общем сделал передачу подключенных WIFI клиентов с mikrotik в PHP скрипт. сразу скажу, что делалось все под CAPsMAN. с обычным WIFI работать не будет.
Разница с реализацией "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;

}
ну и сам скрипт в PHP
СпойлерПоказать
<?php

$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-адресами и к какой точки доступа подключен клиент. дальше пинайте куда надо.

Доброго времени суток.
Пока не очень разобрался в реализации данного метода (со стороны majordomo и php), но он мне как то больше по душе (когда инициатором выступает mikrotik).
А так еще можно дополнить код такими функциями.
Расписал подробно только для тех кто не очень знаком с языком lua, который используется в микротике.
Автор данного метода и другие любители микротика разберутся сразу.

Код: Выделить всё

:local ip #ищем в лизах ip соответствующий полученному mac-адресу
:local getcomment #ищем в лизах комментарий соответствующий полученному ip-адресу
:local hostname #ищем в лизах имя хоста соответствующее полученному mac-адресу
:local uptime #ищем аптайм соответствующий полученному mac-адресу
:local timenow #получаем текущее время и заносим в переменную
:local date #получаем текущую дату и заносим в переменную (дата выглядит примерно так: mar/07/2019)
:local month #из даты вытаскиваем месяц и заносим в переменную
:local day #из даты вытаскиваем день и заносим в переменную
:local year #из даты вытаскиваем год и заносим в переменную
А вот данный код можно сразу опробовать в консоле микротика, командами put он сразу выведет запрашиваемую информацию.

Код: Выделить всё

: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]
:local timenow [/system clock get time]
:local date [/sys clock get date]
:local month [:pick $date 0 [:find $date "/" 0]]
:local day [:pick $date ([:len $month] + 1) [:find $date "/" ([:len $month] + 1)]]
:local year [:pick $date ([:len $month] + 1 + [:len $day] + 1) [:len $date]]
:put "$getcomment"
:put "$hostname"
:put "$capnumber"
:put "$rxsignal"
:put "$ip"
:put "$mac"
:put "$uptime"
:put "$day $month $year $timenow"
:put ""
}
За это сообщение автора akininav поблагодарили (всего 2):
Plug (Чт мар 07, 2019 5:45 pm) • Amarok (Пт мар 08, 2019 1:22 pm)
Рейтинг: 2.33%
Ответить