Информация
Настройка
Новости
Контакты
Новинка
Распродажа
Оплата
Доставка
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    Использование команды "interface ppp-client info" в скрипте

    Использование команды "interface ppp-client info" в скрипте

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Использование команды "interface ppp-client info" в скрипте, RouterOS
     
    asesko
    Guest
    #1
    0
    17.12.2011 21:09:00
    Привет! Я просто хочу получить RSSI от модема Sierra mPCIE и использовать это для чего-то ещё. В своём скрипте я использую такую строку:  
    /interface ppp-client info ppp-out1 do= { /global rssi "$"signal-strengh""; <другая часть скрипта>;}  
    Проблема в том, что команда "interface ppp-client info" выполняется в цикле, и скрипт не завершается... Можно использовать опцию "once", но тогда я не получаю никаких данных, так как эта команда должна отработать минимум два цикла, чтобы вывести какую-то информацию. Есть идеи, как решить эту проблему или, может, есть другой способ получить RSSI с модема Sierra MC8780?
     
     
     
    alphil
    Guest
    #2
    0
    17.03.2012 22:34:00
    Отличная работа. Не знал, что можно получить это вот так ($“current-operator”). На самом деле я использовал часть твоего скрипта, и это то, что мне было нужно. :local i 0;
    /interface ppp-client info umts do={
    :set i ($i+1);
    :if ($i=5) do={
    :global modemstatus $"status";
    :global pinstatus $"pin-status";
    :global currentoperator $"current-operator";
    :global signalstrengh $"signal-strengh";
    /system script job remove [ find script=umts_info ];
    }
    }
     
     
     
    alphil
    Guest
    #3
    0
    12.03.2012 20:29:00
    Привет, у меня такая же проблема. Нашли решение? Спасибо.
     
     
     
    alphil
    Guest
    #4
    0
    15.03.2012 11:04:00
    В основном, я хочу иметь три заранее настроенных профиля (три разных оператора) ppp-client для UMTS-соединения. Хочу настроить автоматический выбор профиля в зависимости от вставленной SIM-карты. Единственное, что приходит в голову — считать значение “current-operator” и использовать тот или иной профиль в зависимости от полученного значения (например, Vodafone). Если я использую команду “/interface ppp-client info ppp-out1”, то не могу получить данные current-operator как переменную — могу только их посмотреть. Есть ли способ получить эти данные?
     
     
     
    Base122
    Guest
    #5
    0
    15.03.2012 11:37:00
    Похоже, если в скрипте использовать команду «/interface ppp-client info ppp-out1», она запускается в фоновом режиме и постоянно пишет информацию в системный лог. Это становится заметно, если для системного логирования включена асинхронная тема. Если один раз в скрипте вызвать эту команду info, повторно вызвать её уже нельзя — она уже запущена. После того, как команда info была запущена из скрипта, её нельзя использовать повторно и через Winbox. Пока что я не нашёл способа её остановить, кроме как просто отключить 3G-модем. Есть ли у кого-то команда, которую можно применить внутри скрипта, чтобы остановить PPP info после запуска? Если запускать PPP info из терминала, чтобы остановить — нужно нажать Q, но как это сделать внутри скрипта?
     
     
     
    alphil
    Guest
    #6
    0
    16.03.2012 16:50:00
    Это правда, можно создать скрипт “umts_info”, который содержит команду “/interface ppp-client info ppp-out1” и вызывать его из планировщика. Чтобы завершить выполнение скрипта, можно использовать “/system script job remove [find script=umts_info]”. В логах мы увидим информацию об операторе SIM-карты.

    /log print where topics~"async"

    01:51:16 async,debug modem:2\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0­0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0­0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0­0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0­0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0­0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0­0\00: sent AT+COPS?

    01:51:16 async,debug modem:2\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0­0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0­0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0­0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0­0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0­0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0­0\00: rcvd +COPS: 0,0,"movistar",2

    В моём случае оператор — “movistar”, но никак не получается получить эту информацию в виде переменной. Не понимаю, почему команда /log print where message~“movistar” не срабатывает, думаю, проблема в нулях.
     
     
     
    Base122
    Guest
    #7
    0
    17.03.2012 19:04:00
    Спасибо за совет, alphil. asesko, кажется, я нашёл способ успешно использовать команду ppp-client info внутри скрипта. Нужно использовать счётчик и дать циклу отработать минимум 3 раза, чтобы системные переменные корректно установились. После этого их можно использовать по необходимости. Главное — «убить» процесс скрипта после завершения. Я написал два скрипта. Первый называется pppUptime, он использует команду ppp-client monitor для получения времени работы интерфейса. Второй — pppInfoUptime, он использует ppp-client info, но при этом запускает скрипт pppUptime, чтобы получить время работы и добавить его в информационный файл и письмо. Надеюсь, эти скрипты будут полезны. Я потратил на это много часов и многому научился. Приятного пользования!

    pppUptimeOnly:  
    ## Этот скрипт просто устанавливает глобальную переменную pppUptime для "wan2" в примере. ##  
    ## Название скрипта в примере — pppUptime ##  
    ## Используется вместе с моим другим скриптом pppInfo ##  
    ## Делитесь, модифицируйте, улучшайте и используйте на здоровье ##  
    ## Проверено на RouterOS v5.12 с модемом Huawei E367 ##  
    ## Peter James 17.03.2012 ##

    ## Укажите имя PPP-интерфейса, для которого нужно получить время работы ##  
    :local pppName "wan2";

    # счетчик цикла #  
    :local k 0;

    # объявляем глобальной, чтобы другой скрипт мог использовать #  
    :global pppUptime;

    :local pppID [/interface ppp-client find name=$pppName];
    :log info "Запуск скрипта PPP Uptime для $pppName";

    # Начало команды monitor #  
    /interface ppp-client monitor $pppName do={

    :set k ($k+1);

    # запускаем цикл два раза, чтобы наверняка #  
    :if ($k=2) do={

    :set pppUptime $"uptime";

    ## Теперь нужно остановить скрипт, иначе Monitor будет работать вечно ##  
    :log info "Скрипт PPP Uptime для $pppName завершён";  
    /system script job remove [find script=pppUptime];

    }  
    }

    pppInfoUptime (запускает вышеописанный скрипт pppUptimeOnly):  
    ## Скрипт для записи информации PPP в файл и отправки на Email ##  
    ## В моём примере имя PPP — "wan2" ##  
    ## Имя скрипта — "wan2PPPinfoUptime" ##  
    ## Использует команду ppp-client info ##  
    ## с циклом для остановки команды после получения данных ##  
    ## Можно использовать вместе с моим другим скриптом pppUptime, если нужно время работы ##  
    ## Можно использовать файл info для других целей ##  
    ## Не забудьте настроить Tools-Email ##  
    ## Делитесь, меняйте, улучшайте и используйте как хотите ##  
    ## Проверено на RouterOS v5.12 с модемом Huawei E367 ##  
    ## Peter James 17.03.2012 ##

    # Установите имя PPP-интерфейса #  
    :local pppName "wan2";

    # Укажите email для получения отчёта PPP Info #  
    :local emailAddress "your_email_address"

    :local i 0;

    global pppUptime;

    :local pppID [/interface ppp-client find name=$pppName];

    # Переменные для хранения информации PPP #  
    :local String1;  
    :local String2;  
    :local pppInfoString;

    # Переменная для текущего IP PPP-интерфейса #  
    :local currentIP;

    # Получаем имя системы #  
    :local SystemID [/system identity get name];

    :local pppStatus;  
    :if ([/interface get [find name=$pppName] running]=true) do={

    :set pppStatus "Работает";

    ### Получаем адрес указанного wan-интерфейса ###  
    :set currentIP [/ip address get [find interface=$pppName] address];
    :set currentIP [:pick $currentIP 0 [:find $currentIP "/"]]

    } else={  
    :set pppStatus "Отключён";  
    }

    # Запускаем скрипт pppUptime #  
    # Закомментируйте, если он не нужен #  
    /system script run pppUptime;

    :log info "Запуск скрипта PPP Info для $pppName";

    # Создаём файл с информацией #  
    /file print file="$SystemID-$pppName-PPP-info";

    :global SysDate [/system clock get date];
    :global SysTime [/system clock get time];

    # Начало команды info #  
    /interface ppp-client info $pppID do={

    :set i ($i+1);

    # по какой-то причине цикл должен пройти минимум 3 раза для установки переменных #  
    # ставим 5 повторов для надёжности #  
    :if ($i=5) do={

    # прочие данные, не из info команды #  
    :set String1 "Дата: $SysDate\nВремя: $SysTime\nИмя системы: $SystemID\nPPP Интерфейс: $pppName\nСтатус интерфейса: $pppStatus\nIP адрес: $currentIP\nВремя работы: $pppUptime\n";

    :set String2 "Статус модема: $"status"\nPIN статус: $"pin-status"\nФункциональность: $"functionality"\nПроизводитель: $"manufacturer"\nМодель: $"model"\nВерсия: $"revision"\nСерийный номер: $"serial-number"\nТекущий оператор: $"current-operator"\nТехнология доступа: $"access-technology"\nУровень сигнала: $"signal-strengh"";

    :set pppInfoString "$String1$String2";

    :log info $pppInfoString;

    # Записываем необходимую информацию в файл #  
    /file set "$SystemID-$pppName-PPP-info" contents=$pppInfoString;

    # Здесь можно сделать всё, что потребуется (например, отправить почту) #

    # Пример отправки Email #  
    :log info "Отправка Email с PPP Info";  
    /tool e-mail send tls=yes subject="$SystemID $pppName PPP Info" to=$emailAddress body="$pppInfoString";

    :log info "Скрипт PPP Info для $pppName завершён";

    ## Теперь нужно остановить скрипт, иначе info будет работать вечно ##  
    /system script job remove [find script=wan2PPPinfoUptime];

    }  
    }
     
     
     
    Base122
    Guest
    #8
    0
    18.03.2012 21:14:00
    Если теперь попробовать скрипт так:  
    /interface ppp-client info umts do={  
    :global modemstatus $"status";  
    :global pinstatus $"pin-status";  
    :global currentoperator $"current-operator";  
    :global signalstrengh $"signal-strengh";  
    }  

    Он будет работать вечно, но ваши глобальные переменные будут постоянно обновляться, и вы сможете в любой момент получить их значения с помощью другого скрипта. Я проверял это на signalstrengh, используя такой второй скрипт:  
    :global signalstrengh;  
    :do {  
    :log info $signalstrengh;  
    delay 1;  
    } while=(true)  

    Если я отключаю внешнюю антенну 3G модема, то вижу, как через секунду в логе меняется уровень сигнала, когда запускаю второй скрипт. Не знаю, как это влияет на загрузку процессора роутера (работа постоянно идёт), но особых изменений не заметил. Единственная проблема в том, что из-за того, что первый скрипт команды “info” работает постоянно, нельзя использовать кнопку Info в WinBox — вываливается ошибка “Couldn’t start - Info command already running! (12)”.  

    Но это не проблема, если WinBox не нужен. Теперь можно следить за уровнем сигнала другим скриптом и, например, предпринимать какие-то действия, если сигнал слишком слабый.
     
     
     
    alphil
    Guest
    #9
    0
    18.03.2012 23:39:00
    В моём случае этот вариант не подходит, потому что я использую светодиоды для контроля силы сигнала.  
    /system leds  
    set 0 disabled=no leds=led1 modem-signal-treshold=-85 type=modem-signal  
     
    Если информационный канал занят командой «ppp-client info», то визуализация светодиодов становится недоступна. Мне удобнее запускать этот скрипт по требованию. И я делаю это из «The Dude», потому что разместил все роутеры на карте и хочу видеть оператора, уровень сигнала и другие данные прямо на метке устройства.
     
     
     
    greek
    Guest
    #10
    0
    12.01.2017 01:01:00
    Я использую такой вариант скрипта: /interface ppp-client info ppp-WAN do={ :if ([:len $"access-technology"] > 0 ) do={ :global lte $"access-technology"; :global signalstrengh $"signal-strengh"; :global itog ($lte." ".$signalstrengh); :log warn $itog; :quit; } }
     
     
     
    EIKA
    Guest
    #11
    0
    02.01.2018 00:07:00
    Ребята, помогите, пожалуйста. Столкнулся с той же проблемой. Запускаю основной скрипт, из него вызываю скрипт modemStatus (он же дочерний). Но всё зависает на этой команде и дальше не идёт: /interface ppp-client info $ifName. Как написано выше, это инструмент, который выдаёт асинхронные данные и работает всё время, пока не нажмёшь Q, D или ctrl+Z. Когда пытаюсь из дочернего скрипта выполнить /system script job remove [find script="modemStatus"], эта команда убивает и основной скрипт тоже. В логе вижу две красные строки: Script error: interrupted / Script error: interrupted. И основная (главная) программа дальше не выполняется. Команда /system script job remove [find name="modemStatus"] у меня не работает, хотя, судя по всему, такой синтаксис подходит для других случаев, например, при вызове скриптов. Пытался вставить Q, quit или что-то подобное в дочерний скрипт — без толку. Посоветуйте, что делать. P.S. Я работаю на ROS 6.41, и судя по всему, за последний год было много изменений, потому что раньше этот скрипт у меня работал.
     
     
     
    EIKA
    Guest
    #12
    0
    02.01.2018 00:21:00
    И еще два вопроса: нормально ли видеть в логах сообщения о прерывании скрипта, когда я использую команду job remove? Есть ли способ проверить статус скрипта: запущен он или нет (остановлен/убит/удален)? Причем с любого терминала на этом роутере. Спасибо заранее!
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры