/interface lte monitor lte1 команда не поддерживается
Как еще можно получить статус интерфейса LTE
Получить статус интерфейса LTE
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
Проверил - действительно не поддерживается. Похоже косяк разработчиков РоутерОС.
Точнее команда поддерживается, но внутреннюю переменную $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]
Так не работает. Как то не так пишу ? Где ошибка ?
Точнее команда поддерживается, но внутреннюю переменную $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 раза.
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
Сам спросил, сам отвечаю - по другому вероятно никак.
Вот что нашел в 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 присвоением внутренней переменной своей - никак не обойтись ...
Вот что нашел в 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 присвоением внутренней переменной своей - никак не обойтись ...
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
Кто-нибудь знает сейчас уже с появлением РОС 6.45 можно как то получить "registration-status" LTE-интерфейса в переменную скриптом ?
Или до сих пор нельзя ?
Или до сих пор нельзя ?
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
Пока придумал только так:
:global ltecmd do={[/interface lte info lte1 once as-value];}
:put [$ltecmd]
И потом парсить весь "info" и искать в нем нужный параметр ...
Может как то поизящнее можно сразу отдельный параметр получить ?
:global ltecmd do={[/interface lte info lte1 once as-value];}
:put [$ltecmd]
И потом парсить весь "info" и искать в нем нужный параметр ...
Может как то поизящнее можно сразу отдельный параметр получить ?
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
Пока получилось так:
:local typepar "registration-status";
:local ltename "lte2"
:local ltecmd [:tostr [/interface lte info $ltename once as-value]]
:local c [:pick $ltecmd [:find $ltecmd ("$typepar"."=")] [:len $ltecmd]];
:local ltestatus [:pick $c ([:find $c "="]+1) [:find $c ";"]]
:log info $ltestatus
Можно попробовать строку ltecmd в одномерный ключевой массив преобразовать, а потом по ключам извлекать нужные параметры ...
:local typepar "registration-status";
:local ltename "lte2"
:local ltecmd [:tostr [/interface lte info $ltename once as-value]]
:local c [:pick $ltecmd [:find $ltecmd ("$typepar"."=")] [:len $ltecmd]];
:local ltestatus [:pick $c ([:find $c "="]+1) [:find $c ";"]]
:log info $ltestatus
Можно попробовать строку ltecmd в одномерный ключевой массив преобразовать, а потом по ключам извлекать нужные параметры ...
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 162
- Зарегистрирован: 23 июл 2013, 18:47
Статус lte(набор параметров) будет плясать от модели модема. Что то они не до думали. Легче запросить статус через at-chat и распарсить его. Команды at более унифицированны .
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
Согласен. Можно, конечно, действовать и через lte at-chat.Статус lte(набор параметров) будет плясать от модели модема.
Но параметр "registration-status" в /interface lte info очень стабилен, он будет у большинства модемов.
И получив его от info не нужно будет его "расшифровывать". Там уже будет "registered", "unknown", "searching", "not searching", "denied" и т.д.., то есть сразу ясно что и как ...
Я работал с родным Микротиковским R11e-LTE (естественно он наиболее нормально поддерживается РОС, т.к. родной продукт) и версия Ros 6.45.1
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
В итоге получился маленький скрипт, проверяющий статус всех LTE-интерфейсов на Микротике (в том числе если их несколько):
Применять можно по Вашему вкусу и желанию. Например, можно добавить проверку активного шлюза на каждом LTE-интерфейсе, пропинговать адреса поисковиков и тем самым определить, что LTE-интерфейс "живой" или "не живой", сохранить статус для других скриптов, использующих эти данные, например, для falover, оповестить администратора, что возможно, пора пополнить баланс Сим-карты LTE, который не может зарегистрироваться в мобильной сети и т.д...
Применять можно по Вашему вкусу и желанию. Например, можно добавить проверку активного шлюза на каждом LTE-интерфейсе, пропинговать адреса поисковиков и тем самым определить, что LTE-интерфейс "живой" или "не живой", сохранить статус для других скриптов, использующих эти данные, например, для falover, оповестить администратора, что возможно, пора пополнить баланс Сим-карты LTE, который не может зарегистрироваться в мобильной сети и т.д...
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
Как выяснилось определить любой параметр из lte info, в том числе registration-status можно гораздо проще, чем я раньше городил огород поиска в строке:
:local info [/interface lte info lte1 once as-value];
:local rs ($info->"registration-status")
:log info $rs
Соответственно несложно заменить соответствующий текст в вышеприведенном скрипте ...
:local info [/interface lte info lte1 once as-value];
:local rs ($info->"registration-status")
:log info $rs
Соответственно несложно заменить соответствующий текст в вышеприведенном скрипте ...
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947