Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • 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
    SMS LTE Info

    SMS LTE Info

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    SMS LTE Info, RouterOS
     
    hogg101
    Guest
    #1
    0
    03.08.2021 13:41:00
    У меня есть hAP AC3 LTE6. Хочу настроить так, чтобы я мог отправлять ему SMS, а он отвечал с полезной информацией о LTE-соединении, уровне сигнала, времени работы роутера и т.д. Уже есть скрипт, который я могу запускать по SMS для перезагрузки роутера. Он отвечает мне: «Okeydokey boss»:

    name="smsreboot" owner="admin"  
    policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon  
    dont-require-permissions=no run-count=0  
    source=  
    /tool sms send lte1 "mynumber" message="Okeydokey boss"  
    :delay 5s  
    /system reboot  

    А вот мой начальный вариант скрипта для статуса роутера:

    name="smsstatus" owner="admin"  
    policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon  
    dont-require-permissions=no last-started=aug/03/2021 13:51:25 run-count=14  
    source=  
    :local CurDate [/system clock get date]
    :local CurTime [/system clock get time]
    :local LTEInfo [/interface lte get value-name=operator lte1]

    /tool sms send lte1 "mynumber" message="$CurDate $CurTime $LTEInfo"  

    Я не понимаю, как получить нужную информацию с LTE-интерфейса и вставить её в SMS. Вышеприведённый код не выводит никакого текста. В идеале хочу видеть CQI, RSSI, Primary Band. Пробовал так:

    :local LTEInfo [/interface lte info lte1 once]

    но выводит слишком много символов, чтобы поместиться в SMS. Буду очень признателен за помощь!
     
     
     
    hogg101
    Guest
    #2
    0
    21.04.2022 16:54:00
    Привет, ребята! Открываю эту тему снова, потому что наконец-то решил заняться этим и провёл почти весь день, разбираясь. Похоже, команда «info» в ROS7 больше не поддерживается. Её заменили на «monitor». Вот рабочий скрипт, чтобы другим было на что ориентироваться. Для него нужны права на чтение и тестирование:

    :local registration [:put ([/interface lte monitor lte1 once as-value]->"registration-status")]
    :local functionality [:put ([/interface lte monitor lte1 once as-value]->"functionality")]
    :local operator [:put ([/interface lte monitor lte1 once as-value]->"current-operator")]
    :local rssi [:put ([/interface lte monitor lte1 once as-value]->"rssi")]
    :local rsrp [:put ([/interface lte monitor lte1 once as-value]->"rsrp")]
    :local rsrq [:put ([/interface lte monitor lte1 once as-value]->"rsrq")]
    :local cqi [:put ([/interface lte monitor lte1 once as-value]->"cqi")]
    :local curtime [/system clock get time]
    :local curdate [/system clock get date]
    :local uptime [:put ([/interface lte monitor lte1 once as-value]->"session-uptime")]

    /tool sms send lte1 "cellnumber_including_country_code" message="Registration: $registration\r\nFunctionality: $functionality\r\nOperator: $operator\r\nRSSI: $rssi\r\nRSRP: $rsrp\r\nRSRQ: $rsrq\r\nCQI: $cqi\r\nTime: $curtime\r\nDate: $curdate\r\nUptime: $uptime"
     
     
     
    rextended
    Guest
    #3
    0
    21.04.2022 23:31:00
    АААААААААААААААААААААААААААААААААААААААААА… а тут в скрипте “PUT”!!!..
     
     
     
    rextended
    Guest
    #4
    0
    21.04.2022 23:37:00
    {
    :local phone         "+1234567890"
    :local curdate       [/system clock get date]
    :local curtime       [/system clock get time]
    :local monitor       [/interface lte monitor lte1 once as-value]
    :local registration  ($monitor->"registration-status")
    :local functionality ($monitor->"functionality")
    :local operator      ($monitor->"current-operator")
    :local rssi          ($monitor->"rssi")
    :local rsrp          ($monitor->"rsrp")
    :local rsrq          ($monitor->"rsrq")
    :local cqi           ($monitor->"cqi")
    :local uptime        ($monitor->"session-uptime")
    /tool sms send lte1 phone-number=$phone \
       message="Регистрация: $registration\r\n\
                Функциональность: $functionality\r\n\
                Оператор: $operator\r\n\
                RSSI: $rssi\r\n\
                RSRP: $rsrp\r\n\
                RSRQ: $rsrq\r\n\
                CQI: $cqi\r\n\
                Время: $curtime\r\n\
                Дата: $curdate\r\n\
                Время работы: $uptime"
    }
     
     
     
    holvoetn
    Guest
    #5
    0
    22.04.2022 04:58:00
    Помимо явного кощунства, в чём тут собственно проблема? Просто интересно...
     
     
     
    rextended
    Guest
    #6
    0
    22.04.2022 07:01:00
    Сравни два скрипта и обрати внимание на разницу в читаемости с объяснениями: вместо того, чтобы присваивать переменной значение, ты кладёшь внутрь переменной результат вывода на терминал. Это всё равно что сделать изображение в Photoshop, а вместо того чтобы сохранить его сразу, сделать скриншот и сохранить его…
     
     
     
    holvoetn
    Guest
    #7
    0
    22.04.2022 08:31:00
    Хорошо, это очень наглядная аналогия.
     
     
     
    Amm0
    Guest
    #8
    0
    23.04.2022 01:16:00
    Не знаю, поможет ли это, но я считаю все команды, включая :put, особым случаем функций в скриптинге. Все функции возвращают какой-то тип (или тип :nothing). Так как задача :put — выводить текст в терминал, он это и делает, а как функция возвращает полученные данные вызывающему коду, в данном случае — присваиванию локальной переменной. Если скрипт выполняется в фоне, например через планировщик, терминала для вывода нет. Значит, это безвредно, просто излишне. Но в некоторых случаях такое свойство :put полезно. Например, для интерактивного скрипта в терминале, где хочется сразу и вывести текст, и залогировать его одной строкой: /log info [:put "my code is here"] # my code is here /log print where topics~"script" time>5m # apr/22 18:13:21 script,info my code is here В этом примере :put выводит в терминал, а затем передаёт строку, которую получил, команде “/log info” (то есть, как бы «встроенной функции»).
     
     
     
    MichaelDC
    Guest
    #9
    0
    12.03.2023 16:57:00
    Это очень изящное решение, спасибо. Как бы ты справился с прямыми AT-командами к модему, которые возвращают две или больше строк? Я пробовал в терминале:

    :put [/interface lte at-chat lte1 input="at+CPIN?" wait=no as-value]
    output=+CPIN: READY  
    OK

    В скрипте:

    :local lteCommand ( [/interface lte at-chat lte1 input="at+CPIN?" wait=no as-value] ->"output")
    :local simState ($lteCommand->"+CPIN");  
    :log info $lteCommand;  
    :log info $simState;

    возвращает:  
    +CPIN: READY  
    OK  
    <пустая строка>

    Есть ли элегантный способ получить такой результат или лучше написать свой парсер?

    Спасибо, что делишься знаниями.  
    M.
     
     
     
    Amm0
    Guest
    #10
    0
    12.03.2023 18:32:00
    Да, вот эта строчка «:local simState ($lteCommand->"+CPIN");» не сработает. Ответ от «at-chat» — это просто строка, её нужно разобрать, а это не так просто. Что ты пытаешься сделать? Если включить «lte» как тему в /system/log, то увидишь, что Mikrotik действительно отправляет кучу команд… В большинстве случаев одна из них — +CPIN. В целом, разбор отладочных логов LTE иногда бывает полезен, и при этом не обязательно самому вручную вызывать at-chat.
     
     
     
    MichaelDC
    Guest
    #11
    0
    12.03.2023 20:33:00
    Я тоже так думал, но надеялся, что какая-то часть парсинга уже где-то выполнена. Я пытаюсь решить проблему с «отказывающими» SIM-картами, которые нужно перезапускать подачей питания. Если я смогу проверить состояние SIM, то смогу запланировать или запустить проверку и автоматизировать разные сценарии (отключить/включить, перезагрузить питание USB, перезагрузить устройство, поменять слот SIM, проверить профили и т.д.) — в общем, сделать всё, чтобы связь не прерывалась. Мне ещё нужно контролировать модем (Telit LM series), поэтому AT-команды — это мой вариант. Если бы только был доступ к API (с возможностью выбора CORS — что бесит, но это уже другая история). Спасибо, M.
     
     
     
    Amm0
    Guest
    #12
    0
    12.03.2023 21:35:00
    Если тебе приходится использовать AT+CPIN, значит что-то не так — это должно корректно обрабатываться RouterOS. И если нет, то в логах, скорее всего, будет ошибка. Поэтому, возможно, лучше всего написать скрипт, который будет сканировать логи, не знаю. /tool/watchdog с пингом тоже может стать последней линией обороны: если пинг не прошёл за X минут — перезагрузка. Так ты покроешь не только LTE, но и другие проблемы, простой и надёжный способ.

    У меня есть общий код для парсинга AT-команд, который по сути оборачивает “at-chat” и ищет “OK” или выкидывает ошибку. $ATVAR — функция, которая вызывает “at-chat” и возвращает результат в виде строки. $AT делает то же самое, но выводит (:put) результат.

    :global ATVAR
    :set ATVAR do={
       :local checkok 1;
       :local atchatwait "yes";
       :local cmd [:tostr $1]
       :put $cmd
       :local r [/interface/lte/at-chat [find running] input="$cmd" wait=$atchatwait as-value];
       :set r ($r->"output");
       if (checkok>0) do={
           :local s [:find $r "OK"];
           :if (s>0) do={
               :local z [:pick $r 0 $s];
               :return [:tostr $z];
           } else={:error "ATVAR получил ошибку: $r"}
       } else={:return $r}
    };

    :global AT
    :set AT do={
       :global ATVAR;
       :local z [$ATVAR $1];
       :put $z;
       :return $z;
    };

    Ещё у меня есть функция для парсинга AT#RFSTS у Telit LM960s, чтобы получить актуальную информацию о вышке, нужную eNB для cellmapper. Но, как видишь, парсинг сложный и специфичный под каждую команду. Например, AT#RFSTS может возвращать 15, 16 или 17 элементов в зависимости от диапазона, подключения и т.п. Может, это поможет.

    :global toarrayFromTelitResponse
    :set toarrayFromTelitResponse do={
       :local z [ [:tostr [:pick $1 ([:find $1 ":"]+2) [:len $1] ]]]
       :return [:toarray $z];
    };

    :global toarrayApplyTemplate
    :set toarrayApplyTemplate do={
       :local s [toarray "$2"];
       :local z [:toarray ""];
       :foreach i,k in=$s do={:set ($z->$k) ($1->$i)};
       :log debug message="toarrayApplyTemplate $s -> $z";
       :return $z;
    };

    :global ATrfsts
    :set ATrfsts do={
       :global toarrayApplyTemplate;
       :global toarrayFromTelitResponse;
       :global ATVAR;
       :local TErfsts1 "PLMN,EARFCN,RSRP,RSSI,RSRQ,TAC,RAC,TXPWR,DRX,MM,RRC,CID,IMSI,NETNAME,SD,ABND"
       :local TErfsts2 "PLMN,EARFCN,RSRP,RSSI,RSRQ,TAC,RAC,DRX,MM,RRC,CID,IMSI,NETNAME,SD,ABND"
       :local TErfsts3 "PLMN,EARFCN,RSRP,RSSI,RSRQ,TAC,RAC,DRX,MM,RRC,CID,IMSI,SD,ABND"
       :local TErfmmstate {0= "NULL";3="LOCATION_UPDATE_INITIATED";5="WAIT_FOR_OUTGOING_MM_CONNECTION";6="CONNECTION_ACTIVE";7="IMSI_DETACH_INITIATED";8="PROCESS_CM_SERVICE_PROMPT";9="WAIT_FOR_NETWORK_COMMAND";10="LOCATION_UPDATE_REJECTED";13="WAIT_FOR_RR_CONNECTION_LU";14="WAIT_FOR_RR_CONNECTION_MM";15="WAIT_FOR_RR_CONNECTION_IMSI_DETACH";17="REESTABLISHMENT_INITIATED";18="WAIT_FOR_RR_ACTIVE";19="IDLE";20="WAIT_FOR_ADDITIONAL_OUTGOING_MM_CONNECTION";21="WAIT_FOR_RR_CONNECTION_REESTABLISHMENT";22="WAIT_FOR_REESTABLISH_DECISION";23="LOCATION_UPDATING_PENDING";24="IMSI DETACH PENDING";25="CONNECTION_RELEASE_NOT_ALLOWED"};
       :local TErfrrcstate1 {0="IDLE";2="CELL DCH"};
       :local TErfrrcstate2 {0="IDLE";2="CELL FACH";3="CELL DCH";4="CELL PCH";5="URA PCH";};
       :local TErfsdstate {0="NONE";1="CS_ONLY";2="PS_ONLY";3="CS_PS"};
       :local a [$ATVAR "AT#RFSTS"]
       :local r [$toarrayFromTelitResponse $a];
       :local z [:toarray ""];
       :local l [:len $r];
       :if ($l=16) do={ :set z [$toarrayApplyTemplate $r $TErfsts1]; };
       :if ($l=15) do={ :set z [$toarrayApplyTemplate $r $TErfsts2]; };
       :if ($l=14) do={ :set z [$toarrayApplyTemplate $r $TErfsts3]; };
       #:if ($l>16 || $l<14) do={ :error "Frfsts получил неожиданный размер ($l) из: $r"};
       :set ($z->"MM") ($TErfmmstate->($z->"MM"));
       :set ($z->"RRC") ($TErfrrcstate1->($z->"RRC"));
       :set ($z->"SD") ($TErfsdstate->($z->"SD"));
       #очистка
       :set ($z->"ABND") [:pick ($z->"ABND") 0 [find ($z->"ABND") "\n"]]
       :return $z;
    }

    Но вот исправлять скриптами основные функции модема — не уверен, что это лучший выход. Зато $ATVAR выше хотя бы убирает "OK" из ответа, если хочешь попробовать.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры