Скрипт mikrotik средствами API

Автоматизация при помощи встроенного скриптового языка и RouterOS API
NIK
Сообщения: 4
Зарегистрирован: 16 июн 2022, 15:33

Скрипт mikrotik средствами API

Сообщение NIK »

Прошу помощи. Есть скрипт, который выполняет поиск с двумя условиями, и если находит, то выполняет одно. Если не находит, то выполняет другое.

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

:local exists false; :foreach i in=[/queue simple find name=user1 limit=1k/1k] do={:log info ("Blocked" ); :set exists true}; :if (!$exists) do={ :log info ("Active" ) }
Нужно тоже самое написать используя API

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

<?php

function f_add_user($login, $speed)

{
require('routeros_api.class.php');

$API = new RouterosAPI();
if ($API->connect('10.0.0.11', 'user', '12345')) { 

$API->write('/queue/simple/print', false);
 $API->write('?name='. $login, '?limit='. $limit, false);
 $API->write('=.proplist=.id');
 $ARRAYS = $API->read();

NIK
Сообщения: 4
Зарегистрирован: 16 июн 2022, 15:33

Re: Скрипт mikrotik средствами API

Сообщение NIK »

Я так и не смог пока самостоятельно разобраться. Вообще задача такая, есть запись в queue simple. Необходимо по запросу извлечь какая указана скорость у определенного имени. Помогите разобраться как это сделать. Любая информация будет полезной.
Пока я только понял, что даже этот скрипт
:local exists false; :foreach i in=[/queue simple find name=user1 limit=1k/1k] do={:log info ("Blocked" ); :set exists true}; :if (!$exists) do={ :log info ("Active" ) }
работает не правильно. ну то есть не правильно я его написал. он работает, но не так как мне нужно.
NIK
Сообщения: 4
Зарегистрирован: 16 июн 2022, 15:33

Re: Скрипт mikrotik средствами API

Сообщение NIK »

Почти получилось что хотел

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

<?php
require('routeros_api.class.php');

$API = new RouterosAPI();
if ($API->connect('1.1.1.1', 'admin', '1234509876')) {

   $API->write('/queue/simple/print', false);
   $API->write('?name='. user, false);
   $API->write('=.proplist=max-limit');
   $ARRAY = $API->read();
   print_r($ARRAY);

$API->disconnect();

}
?>
вывод такой
Array ( [0] => Array ( [max-limit] => 1000/1000 ) )
пока не пойму, почему и как сделать чтобы вместо 1000/1000 выводил 1/1
Аватара пользователя
Chupaka
Сообщения: 3483
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Скрипт mikrotik средствами API

Сообщение Chupaka »

Ну, 1/1 он точно выводить не будет, да и зачем? В консоли у вас 1k/1k, но 1k = 1000, а в API никакие сокращения не используются.

Скрипт ваш ищет очередь с нужным именем и лимитом 1000/1000. Если находит - выводит Blocked, если не находит - Active.

Такой запрос на API - это что-то вроде

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

   $API->write('/queue/simple/print', false);
   $API->write('=.proplist=.id', false);
   $API->write('?name='. user, false);
   $API->write('?max-limit=1000/1000');
   $ARRAY = $API->read();
Вернёт пустой результат, если очереди нет, и её/их .id - если есть.
NIK
Сообщения: 4
Зарегистрирован: 16 июн 2022, 15:33

Re: Скрипт mikrotik средствами API

Сообщение NIK »

Да, спасибо! я так и сделал:

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

$API = new RouterosAPI();
if ($API->connect('1.1.1.1', 'user', '12345')) {

   $API->write('/queue/simple/print', false);
   $API->write('?name='.$login, false);
   $API->write('=.proplist=max-limit');
   $ARRAY = $API->read();
   
    $block = $ARRAY[0];
    $par = $block['max-limit'];
$API->disconnect();

}
return $par;
}