Да, Boen! Только сегодня (16:47 суббота в Бразилии) мне удалось выделить время, чтобы вернуться к этому проекту. И твоя подсказка сработала именно так, как ты сказал. Чтобы считать количество пингов из контекста routerOS, я просто сохранил значение в «comment» скрипта. В моём случае мне нужен только код результата всей операции (в моём исходном скрипте), но это простое и эффективное решение. Для тех, кому нужны дополнительные значения, подходит то же решение. Несколько значений можно сохранить, используя разделители, и потом легко разбивать их на части и читать отдельные значения. Чтобы лучше объяснить и помочь другим, я написал небольшой код ниже:
<?php
use PEAR2\Net\RouterOS;
require_once 'PEAR2_Net_RouterOS-1.0.0b6.phar';
# объявление переменных
$device_ip = '<x.x.x.x>';
$device_login = '<login>';
$device_password = '<password>';
$script_name = '<script_name>';
$where_to_ping = '<ip_to_ping>';
$how_many_packets = <ping_count>;
try {
$util = new RouterOS\Util(
$client = new RouterOS\Client($device_ip, $device_login, $device_password));
} catch (Exception $e) {
die('Не удалось подключиться к устройству по адресу '.$device_ip.'.');
}
// Сначала отправляем скрипт на маршрутизатор через script::prepare
// Скрипт просто сохраняется, но не выполняется
$util->setMenu('/system script')->add(
array(
'name' => $script_name,
'comment' => 'Тестовое выполнение скрипта от Boen Mikrotik PHP API',
'policy' => 'read,write,test',
'source' => RouterOS\Script::prepare(
'
:local pingcount [/ping $where count=$packets]
/system script set [find name=$mynameis] comment="pingcount=$pingcount"
',
array(
'mynameis' => $script_name,
'where' => $where_to_ping,
'packets' => $how_many_packets
)
)
)
);
// Теперь ставим этот же скрипт в планировщик, чтобы он запустился через 2 секунды
$util->setMenu('/system scheduler')->add(
array(
'name' => 'big_test',
'start-time' => date_add($util->getCurrentTime(),date_interval_create_from_date_string("2 seconds"))->format('H:i:s'),
'on-event' => $script_name
)
);
?>
Я решил запустить скрипт через 2 секунды после его добавления. Создам тему, чтобы другие могли найти этот пример. Ещё раз спасибо тебе, Boen, за помощь!