Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • 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
    tx-bytes rx-bytes содержат пробелы и поэтому непригодны для использования. Пожалуйста, помогите (отредактировано и добавлена дополнительная информация).

    tx-bytes rx-bytes содержат пробелы и поэтому непригодны для использования. Пожалуйста, помогите (отредактировано и добавлена дополнительная информация).

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    tx-bytes rx-bytes содержат пробелы и поэтому непригодны для использования. Пожалуйста, помогите (отредактировано и добавлена дополнительная информация)., RouterOS
     
    maikel
    Guest
    #1
    0
    11.06.2017 14:31:00
    Всем привет, я пытаюсь адаптировать скрипт одного из пользователей этого форума (http://forum.mikrotik.com/t/interface-data-quota/79514/1) под новую версию. У меня RouterOS v6.38.5 на Winbox v3.11 на роутере hEX. Поэтому я пытаюсь использовать tx-bytes и rx-bytes, но в ответ получаю значение с пробелами из RouterOS. Я не могу использовать это значение: когда хочу их сложить, получается 41 045 997;41 045 997. Вот код, который хочу использовать:

    :local counterrx [/interface ethernet get eth2-master rx-bytes]
    :put "counterrx:"
    :put $counterrx
    :local countertx [/interface ethernet get eth2-master tx-bytes]
    :put "countertx:"
    :put $countertx
    :tonum $counterrx
    :tonum $countertx
    set $counter ( $counterrx + $countertx )
    :put "counter:"
    :put $counter

    Мой вывод:

    counterrx: 41 278 785  
    countertx: 391 157 213  
    counter: 41 278 785;391 157 213

    Я ожидаю получить числа (целые) вроде 41278785 (без пробелов) и 391157213 для rx-bytes ($counterrx) и tx-bytes ($countertx).

    Я пытался отладить так:

    ‘tonum’ не меняет значение. Я написал скрипт для удаления пробелов, но скрипт не находит пробелов в числах $counterrx и $countertx. Также показывает, что длина числа равна 1???

    Вот мой скрипт:

    :local counterrx [/interface ethernet get eth2-master rx-bytes]
    :put "counterrx:"  
    :put $counterrx  
    :local Replacechar do={  
     :for i from=0 to=([:len $1] - 1) do={
       :local char [:pick $1 $i]
       :if ($char = $2) do={  
         :set $char $3  
       }  
       :set $output ($output . $char)  
     }  
     :return $output  
    }  
     
    :local counterrx2 [ $Replacechar $counterrx " " "" ]
    :put $counterrx2  
    :put "counterrx length:"  
    :put [ len $counterrx ]
    :local blub "blubblub"  
    :put "blubblub length:"  
    :put [ len $blub ]

    Вывод:

    counterrx: 41 946 248 41 946 248  
    counterrx length: 1  
    blubblub length: 8

    В конце я проверил, не является ли $counterrx массивом, и посчитал элементы:

    :local counterrx [/interface ethernet get eth2-master rx-bytes]
    :foreach nr,xxx in={$counterrx} do={  
    :put ("$nr=$xxx")  
    }

    Вывод:  
    0=42 147 960

    Только первое число учитывается?

    Я пробовал найти пробелы и удалить их вот так:

    :local posspace [ :find $counterrx " " -1]
    :put $posspace  
    :local counterrx2 [:pick $counterrx 0 $posspace]
    :put $counterrx2

    Но это тоже не сработало. posspace пустой, и counterrx2 не изменяется вообще. Я также пытался искать запятую, поведение то же.

    Выяснил, что значение на самом деле правильное (смотрел статистику в списке интерфейсов в Winbox).

    Кто-нибудь может помочь? Большое спасибо, Maikel

    P.S. Я почти полностью переписал пост, чтобы было понятнее, надеюсь, это поможет понять ситуацию и увидеть, что я старался. Также скажу, что уже четыре часа изучаю язык программирования RouterOS (C?).
     
     
     
    LaZyLion
    Guest
    #2
    0
    20.07.2017 17:02:00
    У меня тоже такая проблема. Я использую версию 6.39.2. В руководстве чётко указано, что эти значения должны возвращаться целыми числами: https://wiki.mikrotik.com/wiki/Manual:Interface, но :put [:typeof [/interface ethernet get ether1 rx-bytes]] показывает, что возвращается массив. Пробелы только усугубляют ситуацию. Можно преобразовать это в строку с помощью [:pick [/interface ethernet get ether1 rx-bytes] 0], а потом с помощью цикла for найти и убрать пробелы, но это слишком громоздкое решение, когда надо получить статистику по нескольким интерфейсам. Много лишней обработки без причины. Я отправил баг-репорт. Надеюсь, в новой версии это исправят.
     
     
     
    IntrusDave
    Guest
    #3
    0
    20.07.2017 19:13:00
    Я использую этот код, чтобы исправить это. Global создаёт переиспользуемую функцию, затем с помощью “$removeSpace t=” вызываю эту функцию:

    :global removeSpace do={
       :local temp;
       :for i from=0 to=([:len $t] - 1) do={
           :local char [:pick $t $i];
           :if ($char = " ") do={ :set $char ""; }
           :set temp ($temp . $char);
       }
       :return $temp;
    }

    :put [$removeSpace t=[:tostr [/interface ethernet get value-name=tx-bytes eth2-master]]]
     
     
     
    PortalNET
    Guest
    #4
    0
    02.10.2021 01:39:00
    Привет, ребята! Знаю, что отвечаю с небольшой задержкой, но лучше поздно, чем никогда, правда? Итак, вот моя рабочая версия кода для получения данных о новых версиях ROS 6.46, 6.47 — общий RX-BYTES и TX-BYTES. Рабочий код ниже:

    if ($API->connect($iphost, $userhost, $pass, $port)) {
       $stats = $API->comm('/interface/print', array('stats-detail' => '', 'from' => '0')); // здесь в 0 можно изменить, чтобы выбрать нужный интерфейс или vlan-интерфейс на вашем Mikrotik
       print_r($stats);
       $meme = $stats['0'];
       echo "[td]" . $meme['rx-byte'] . "[/td]<br />";
       echo "[td]" . $meme['tx-byte'] . "[/td]<br />";
       $API->disconnect();
    }

    Дальше нам нужно конвертировать байты в гигабайты, используя следующий код:

    <?php
    $bytes = $meme['rx-byte'];
    function isa_bytes_to_gb($bytes, $decimal_places = 1 )
    {
       return number_format($bytes / 1073741824, $decimal_places);
    }
    $gigabytes = isa_bytes_to_gb($bytes);
    echo "[td]" . $gigabytes . " GB[/td]<br />";
    ?>
     
     
     
    rextended
    Guest
    #5
    0
    02.10.2021 09:00:00
    И… почему API? Я не вижу в этом обсуждении ни одного поста про API… Просто вижу неправильный подход… Вот решение:  
    :put [/interface ethernet get ether1 rx-bytes]
    2778266326

    :put ([/interface get ether1]->"rx-byte")
    2739389845
     
     
     
    kirac
    Guest
    #6
    0
    31.05.2022 11:04:00
    Привет, я не могу использовать этот метод. Как мне следовать пути с помощью команды, которую я указал ниже? :put ([/interface ethernet get ether1]->“rx-fcs-error”) 5 297 Нужно убрать пробелы. Спасибо.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры