Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • 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
    Скрипт питания POE

    Скрипт питания POE

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Скрипт питания POE, RouterOS
     
    excession
    Guest
    #1
    0
    03.05.2022 21:06:00
    Немного надоело работать со стандартной функцией мониторинга POE, поэтому написал этот небольшой скрипт, который показывает значения POE только для интерфейсов с POE-нагрузкой и рассчитывает общее энергопотребление. #poe-status  
    :local poeOutStatus ""  
    :local interfaceName ""  
    :local poeOutPower 0  
    :local poeOutPowerRemainder 0  
    :local poeOutCurrent 0  
    :local poeOutVoltage 0  
    :local poeTotalPower 0  
    :local poeResult [interface ethernet poe monitor [find] as-value once]

    :put ("Статус POE:")  
    :foreach line in=$poeResult do={  
       :set poeOutStatus ($line->"poe-out-status")  
       :if ($poeOutStatus="powered-on") do={  
           :set interfaceName ($line->"name")  
           :set poeOutPower (($line->"poe-out-power")/10)  
           :set poeOutPowerRemainder (($line->"poe-out-power")-($poeOutPower*10))  
           :set poeOutCurrent ($line->"poe-out-current")  
           :set poeOutVoltage (($line->"poe-out-voltage")/10)  
           :set poeTotalPower ($poeTotalPower+($line->"poe-out-power"))  

           :put ("Интерфейс: ".$interfaceName."\t | Мощность: ".$poeOutPower.".".$poeOutPowerRemainder."W\t | Ток: ".$poeOutCurrent."mA\t | Напряжение: ".$poeOutVoltage."V")  
       }  
    }  
    :put ("Общая мощность: ".($poeTotalPower/10).".".(($poeTotalPower)-((($poeTotalPower/10))*10))."W")  

    sys script run poe-status  

    Статус POE:  
    Интерфейс: ether4      | Мощность: 2.0W   | Ток: 79mA         | Напряжение: 26V  
    Интерфейс: ether6      | Мощность: 2.6W   | Ток: 100mA        | Напряжение: 26V  
    Интерфейс: ether8      | Мощность: 3.7W   | Ток: 72mA         | Напряжение: 52V  
    Интерфейс: ether10     | Мощность: 2.8W   | Ток: 55mA         | Напряжение: 52V  
    Интерфейс: ether14     | Мощность: 5.1W   | Ток: 99mA         | Напряжение: 52V  
    Интерфейс: ether16     | Мощность: 4.4W   | Ток: 85mA         | Напряжение: 52V  
    Общая мощность: 20.6W
     
     
     
    tangent
    Guest
    #2
    0
    21.07.2022 09:50:00
    Я обновил скрипт для версии 7.4, особенно часть с /system/health в конце, чтобы отслеживать целенаправленные изменения в способе работы отчёта о состоянии в ROS 7. Тестировал на CRS328-24P и hEX PoE, чтобы учесть случай с двойным питанием и с одним источником:

    {
       :local ifWanted   "auto-on|forced-on|off"; # может быть одно или несколько, разделённых |, из auto-on, forced-on и off
       :local ifAlsoIdle  true; # может быть true или false. Если true — показывает PoE-интерфейсы даже в режиме ожидания
       :local ifMode      true; # может быть true или false. Если true — показывает, как установлен режим интерфейса
       :local pTotalCurr 0
       :local pTotalPowr 0
       :local div do={
           :local in  [:tostr $1]
           :local sym [:tostr $2]
           :local int [:pick $in 0 ([:len $in] - 1)]
           :local dec [:pick $in ([:len $in] - 1) [:len $in]]
           :local ret "$int.$dec$sym"
           :if ($ret = ".0$sym") do={:set ret "0.0$sym"}
           :return    $ret
       }
       :local form do={
           :local in   [:tostr $1]
           :local sym  [:tostr $2]
           :local temp "    $in"
           :return     "$[:pick $temp ([:len $temp] - 4) [:len $temp]]$sym"
       }
       :put ("Статус PoE:")
       /interface ethernet poe
       :foreach line in=[monitor [find where poe-out~$ifWanted] once as-value] do={
           :local ifName   ($line->"name")
           :local ifPOut   ($line->"poe-out")
           :local ifPVol   ($line->"poe-voltage")
           :local ifStatus ($line->"poe-out-status")
           :local pOutTens [$div ($line->"poe-out-voltage") "V"]
           :local pOutCurr [$form ($line->"poe-out-current") "mA"]
           :local pOutPowr [$div ($line->"poe-out-power") "W"]
           :set pTotalCurr ($pTotalCurr + ($line->"poe-out-current"))
           :set pTotalPowr ($pTotalPowr + ($line->"poe-out-power"))
           :local ifStrMod ""
           :if ($ifStatus = "powered-on") do={
               :if ($ifMode) do={:set ifStrMod " Режим: $ifPVol\t $ifPOut\t $ifStatus\t|"}
               :put ("Интерфейс: $ifName\t|$ifStrMod $pOutTens | $pOutCurr | $pOutPowr")
           } else={
               :if ($ifAlsoIdle) do={
                   :set ifStrMod $ifStatus
                   :if ($ifMode) do={:set ifStrMod "| Режим: $ifPVol\t $ifPOut\t $ifStatus"}
                   :put ("Интерфейс: $ifName\t$ifStrMod")
               }
           }
       }
       :local sysPSU ""
       /system health
       :do {
           :local p1v [get [find name="psu1-voltage"] value]
           :set sysPSU "Блок питания низкий $p1v В"
           :do {
               :local p2v [get [find name="psu2-voltage"] value]
               :set sysPSU "$sysPSU | Блок питания высокий $p2v В"
           } on-error={}
       } on-error={
           :set sysPSU ([get [find name="voltage"] value] . "В")
       }
       :put ("Итого: $[$form $pTotalCurr "mA"] | $[$div $pTotalPowr "W"]")
       :put ("Routerboard: $sysPSU")
    }

    Обратите внимание на использование on-error вместо проверки typeof на nil. Как новичок в скриптах RouterOS, не уверен насчёт правильности, но такой способ кажется чище, чем проверка типа.
     
     
     
    rextended
    Guest
    #3
    0
    21.07.2022 21:12:00
    Спасибо за изменение. Честно говоря, мне кажется гораздо понятнее указывать, какую именно «ошибку» ты ждёшь, вместо того чтобы просто пропускать часть кода, потому что «она даёт» или «может дать» ошибку… Я всегда ненавидел стиль программирования с «On Error Resume Next». Но, конечно, иногда приходится использовать обработку ошибок, потому что язык сценариев просто не даёт другого выбора…
     
     
     
    sadjoe
    Guest
    #4
    0
    16.01.2024 20:48:00
    Привет, у меня вот такое сообщение. Это нормально? Я использую Mikrotik hex S > system/routerboard/export  
    # 2024-01-16 22:49:56 by RouterOS 7.13.1  
    # software id = 6H10-A1GS  
    #  
    # model = RB760iGS  

    /system health print  
    Columns: NAME, VALUE, TYPE  
    #  NAME         VALUE  TYPE  
    0  voltage      48.6   V  
    1  temperature  69     C  

    > sys script run poe-status  
    POE Статус:  
    Интерфейс:      | Режим:                  
    Интерфейс:      | Режим:                  
    Интерфейс:      | Режим:                  
    Интерфейс:      | Режим:                  
    Интерфейс:      | Режим:                  
    Итого:    0мА | 0.0Вт  
    Routerboard: 48.6В
     
     
     
    rextended
    Guest
    #5
    0
    16.01.2024 21:43:00
    У этой модели нет стандартного блока «4 PoE порта», но есть «i» PoE выход на ether5, который работает иначе.
     
     
     
    guipoletto
    Guest
    #6
    0
    16.01.2024 23:59:00
    Небольшой костыль, чтобы вывод был правильно отформатирован, когда длина имён интерфейсов отличается больше чем на один таб (8 символов). «11», добавляемое в расчёт, — это длина первого префикса, "Interface: " {

    #poe-status  
    :local poeOutStatus ""  
    :local interfaceName ""  
    :local poeOutPower 0  
    :local poeOutPowerRemainder 0  
    :local poeOutCurrent 0  
    :local poeOutVoltage 0  
    :local poeTotalPower 0  
    :local poeResult [interface ethernet poe monitor [find] as-value once]
    :local nameLen 0  
    :local maxLen 0  
    :local tabTo 0  
    :local numTabs 0  
    :local tab ""  

    :foreach line in=$poeResult do={  
    :set interfaceName ($line->"name")  
    :if ([:len $interfaceName] > $maxLen) do={:set maxLen [:len $interfaceName]}
    }  
    :set tabTo ((((($maxLen+11)/8)+1)*8)-1)  

    :put ("POE Status:")  
    :foreach line in=$poeResult do={  
       :set poeOutStatus ($line->"poe-out-status")  
       :if ($poeOutStatus="powered-on") do={  
           :set interfaceName ($line->"name")  
           :set poeOutPower (($line->"poe-out-power")/10)  
           :set poeOutPowerRemainder (($line->"poe-out-power")-($poeOutPower*10))  
           :set poeOutCurrent ($line->"poe-out-current")  
           :set poeOutVoltage (($line->"poe-out-voltage")/10)  
           :set poeTotalPower ($poeTotalPower+($line->"poe-out-power"))  
    :set nameLen ([:len $interfaceName] + 11)
           :set numTabs ((($tabTo-$nameLen)/8))  
    :for i from=0 to=($numTabs) do={:set tab ($tab."\t")}  

           :put ("Interface: ".$interfaceName.$tab." | Power: ".$poeOutPower.".".$poeOutPowerRemainder."W\t | Current: ".$poeOutCurrent."mA\t | Voltage: ".$poeOutVoltage."V")  
           
    :set tab ""  
           }  
       }  
    :put ("Total Power: ".($poeTotalPower/10).".".(($poeTotalPower)-((($poeTotalPower/10))*10))."W")  
    }
     
     
     
    sadjoe
    Guest
    #7
    0
    17.01.2024 09:00:00
    Это вывод для меня. > sys script run poe-status1  
    Статус POE:  
    Общая мощность: 0.0 Вт
     
     
     
    rextended
    Guest
    #8
    0
    17.01.2024 16:23:00
    Так сложно понять, что это не работает на вашей модели? Что я написал не так или грубо в своем предыдущем ответе?
     
     
     
    guipoletto
    Guest
    #9
    0
    17.01.2024 18:47:00
    Привет, я протестировал на двух CRS318 (NetPower), работающих на версии 7.13:
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры