Получить статус интерфейса LTE

Здесь выкладываем скрипты
Ответить
corsair
Сообщения: 8
Зарегистрирован: 13 фев 2016, 19:25

21 янв 2019, 17:44

/interface lte monitor lte1 команда не поддерживается

Как еще можно получить статус интерфейса LTE


Sertik
Сообщения: 622
Зарегистрирован: 15 сен 2017, 09:03

27 янв 2019, 15:58

Проверил - действительно не поддерживается. Похоже косяк разработчиков РоутерОС.
Точнее команда поддерживается, но внутреннюю переменную $status из нее выудить не возможно.
Пишется команда так - надо писать без указания типа интерфейса:

Для терминала:

{
:local Interfaceconnect;
/interface monitor lte1 once do={:set Interfaceconnect $status;}
:put $Interfaceconnect
}

Если из скрипта в лог то видно, что переменная "пустая":

:local Interfaceconnect;
:local InterfaceName "lte1"
/interface monitor $InterfaceName once do={:set Interfaceconnect $status;}
:log info $Interfaceconnect; :log info [:len $Interfaceconnect];


Кстати, чтобы не плодить темы не подскажите как получить статус интерфейса, для которого аналогичная команда monitor поддерживается, например (интерфейса ethernet или pptp-client) в переменную ?

Вот такая аналогичная конструкция позволяет его получить:


:local FreeVPNconnect;
:local VPNfree "pptp-out1"
/interface pptp-client monitor $VPNfree once do={:set FreeVPNconnect $status;}
:put $FreeVPNconnect

Тогда в переменной $FreeVPNconnect будет статус интерфейса pptp-out1, например "connected".
Но слишком криво как-то. Зачем обязательно это once do={, когда нужно просто сразу в переменную ...

Пробовал конструкции типа ниже и другие подобные варианты:

:local FreeVPNconnect [/interface pptp-client monitor $VPNfree get $status]

Так не работает. Как то не так пишу ? Где ошибка ?
Последний раз редактировалось Sertik 27 янв 2019, 20:03, всего редактировалось 4 раза.


Чего не знаем то нагуглим
Sertik
Сообщения: 622
Зарегистрирован: 15 сен 2017, 09:03

27 янв 2019, 19:34

Сам спросил, сам отвечаю - по другому вероятно никак.
Вот что нашел в Mikrotik Wiki Manual Scripting:

Get values from looped interactive commands like "monitor"
Frequently asked question s how to get values in script returned by, for example, monitor command? First problem with such commands is that they are running infinitely until user action is applied, obviously you cannot do that from script. Instead you can run with additional parameter once, it will allow to execute command only once and stop. Another problem is getting variable value sin script, there is no as-value, there is no get, but they have do. What it does is allows to access variables returned by the command as in example below:

[admin@1p_DUT_wAP ac] /interface> monitor-traffic ether1 once do={:global myBps $"rx-bits-per-second" }
...
[admin@1p_DUT_wAP ac] /interface> :environment print
myBps=71464

Так что без конструкции ... monitor ... once do={ c присвоением внутренней переменной своей - никак не обойтись ...


Чего не знаем то нагуглим
Ответить