Страница 1 из 1

импорт mac в переменную

Добавлено: 22 мар 2015, 10:32
23q
подскажите как с ip hotspot users импортировать mac-адреса всех юзеров в одну переменную.

Re: импорт mac в переменную

Добавлено: 22 мар 2015, 12:59
vqd
вам тупо список нужен или массив?

Re: импорт mac в переменную

Добавлено: 22 мар 2015, 16:12
23q
просто список через замятую типа global mac [ip hotspot user get value-name=mac-address] для всех. я так понял через :foreach

Re: импорт mac в переменную

Добавлено: 22 мар 2015, 16:17
vqd
ну да, через foreach

Re: импорт mac в переменную

Добавлено: 22 мар 2015, 16:47
23q
може подскажешь как его до кучи слепить? ;;-))) ;;-)))

Re: импорт mac в переменную

Добавлено: 22 мар 2015, 17:00
vqd
как то так

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

:foreach i in [/ip hotspot user find] do={:put [/ip hotspot user get $i mac-address ]} 

Re: импорт mac в переменную

Добавлено: 22 мар 2015, 18:21
23q
vqd писал(а):как то так

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

:foreach i in [/ip hotspot user find] do={:put [/ip hotspot user get $i mac-address ]} 

спасибо, сделал так, но записывает только последний мак, я так понял он перезаписывает переменную, а мне нужно ее дополнить:

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

global 2
:foreach i in=[/ip hotspot user find] do={:set 2  [/ip hotspot user get $i mac-address ]}

Re: импорт mac в переменную

Добавлено: 23 мар 2015, 04:28
vqd
Ну логично )))

:set tmp ($tmp . ", " . "123"))

В ТМП будут добавляться 123 через запятую

Re: импорт mac в переменную

Добавлено: 23 мар 2015, 13:39
podarok66
Прикольно выходит. Я тут накропал на основе вашей беседы скриптик, который одним махом формирует списочек подключенных МАС-адресов из Leases:

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

{
    :local t;
    :foreach i in=[/ip dhcp-server lease find] do={ 
        :if ([/ip dhcp-server lease get $i status]="bound") do={
        :set t ($t . "\r\n" . [/ip dhcp-server lease get $i status] . "-" . [/ip dhcp-server lease get $i mac-address])
        }
    }
     :put $t
 }

Очень даже интересное начинание. Оставлю здесь для возможных идей со стороны сообщества. Подкидывайте, кому что придет в голову.

Re: импорт mac в переменную

Добавлено: 19 апр 2015, 19:32
23q
начинание отличное, а вот продолжение :-) :-) :

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

:local time [/system clock get time];
:local date;
:local day;
:local month;
:local year;
:local yeardiv;
:local yearmult;
:local leapyear;
:local lastday;
:local found;
:global counter;
:set date [system clock get date];
:set month [:pick $date 0 3];
:set day [:pick $date 4 6];
:set year [:pick $date 7 11];
:local hotusers "The time is - $date $time hotspot users: $counter";
:local macHotspot;
:foreach i in=[/ip hotspot user find] do={ :set macHotspot ($macHotspot . "\r\n" . [/ip hotspot user get $i mac-address])};
:local ContentsFile [/file get hotusers.txt contents];
/file set [/file find name=hotusers.txt] contents="$ContentsFile \r\n $hotusers $macHotspot \r\n";
:set counter 0;
:set yeardiv ($year / 4);
:set yearmult ($yeardiv * 4);
 :if ([$yearmult] = $year) do={ :set leapyear true } else={ :set leapyear false }
 :if ([$month] = "jan") do={ :set lastday 31 }
 :if ([$month] = "feb") do={
        :if ($leapyear = true) do={ :set lastday 29 }
        :if ($leapyear = false) do={ :set lastday 28 } }
 :if ([$month] = "mar") do={ :set lastday 31 }
 :if ([$month] = "apr") do={ :set lastday 30 }
 :if ([$month] = "may") do={ :set lastday 31 }
 :if ([$month] = "jun") do={ :set lastday 30 }
 :if ([$month] = "jul") do={ :set lastday 31 }
 :if ([$month] = "aug") do={ :set lastday 31 }
 :if ([$month] = "sep") do={ :set lastday 30 }
 :if ([$month] = "oct") do={ :set lastday 31 }
 :if ([$month] = "nov") do={ :set lastday 30 }
 :if ([$month] = "dec") do={ :set lastday 31 }
 :if ([$lastday] = $day) do={
:local body "$date $time hotspot report";
:local smtpserv [:resolve "smtp.yandex.ru"];
:local email "user@yandex.ru";
:local pass 123456;
/tool e-mail send server=$smtpserv port=587 user=$email password=$pass start-tls=yes to="user1@i.com" cc="user2@qwe.qwe.com" from=$email subject="Mikrotik hotspot report" body="$body" file="hotusers.txt";
delay 6;
/file remove hotusers.txt;
/file print file=hotusers.txt;
delay 6;
/file set hotusers.txt contents=""}

Скрипт считает количество подключенных клиентов к хотспот за один день. Дозаписывает их в файл вместе с маками устройств(за каждый день). Каждый последний день месяца отправляет отчет(в виде тхт файла) на мыло двум адресатам.
Скрипт запускает в 20.00, когда хотспот уже неактивен(с 8 до 20). в хотспот "триал уптайм резет" настроен так(13 часов), что скрипт успевает сработать до того как юзеры с хотспот за день пропадут. На следующий день посторяется подсчет юзеров за день работы и запись этого в файл будущего отчета. До того как первый раз запустить скрипт файл hotusers.txt должен быть создан в корне микротик(пустой).
Вид отчета:
The time is - apr/01/2015 20:01:00 hotspot users: 10

ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ


The time is - apr/02/2015 20:01:00 hotspot users: 7

ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ


Трабла може быть с ограничением в запись переменной ContentsFile в 4кб (если много клиентов), тогда файл нужно дополнять

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

ip dhcp-server lease print terse file="1.txt" append


ну и в хотспот в в "on login":

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

:global counter; 
 :set counter ($counter + 1);
 :log info "number of logged users: $counter";