Бюджетное оснащение MikroTik RBM33G для удаленных операций

Микротик OEM RouterBoard RBM33G далеко не новинка и хорошо известна среди специалистов и пользователей Микротик. Она была создана производителем для того, чтобы дать каждому возможность самому «сконструировать» свой роутер. В настоящее время эта плата вовсе не устарела, активно используется и полна интересных «сюрпризов» для тех, кто не знает всех её возможностей.
Эта небольшая по размеру, весьма производительная плата (на борту двухядерный процессор MediaTek MT7621 880Мгц с 16Мб flash-памяти и 256Мб DDR3 RAM), имеет ещё целый ряд аппаратных возможностей к расширению – два слота mini PCI-e для установки модулей модемов и/или wifi-радиокарт), слот microSD для дополнительной карты памяти (расположен на оборотной стороне платы), M.2 слот для установки SSD, что позволяет с избытком восполнить недостаток flash-памяти на самой плате.

Бюджетное оснащение MikroTik RBM33G для удаленных операций
Рис. 1 RBM33G Внешний вид платы. Вверху слева направо разъемы: 2 miniPCI-e, M.2, USB.

Мне интересно было максимально использовать возможности расширения платы, в том числе установив на неё «не родные» модем и wifi-модуль.
Сама RBM33G мне досталась б/у за половину стоимости новой (5000р.). Также я приобрёл «родной» корпус Микротик CA433U за полную стоимость (3.900 р.), так как найти б/у такой корпус не получалось, а использовать иные не хотелось. «Погуглив» ещё немного Интернет я купил за копейки то, что мне было нужно на «Авито»: LTE-модем Huawey ME909s-120 (за 2000 р.) — не слишком по современным меркам скоростной (Cat4), но очень надежный и вполне достаточный для резервирования канала Интернет за городом (до сих пор не понимаю зачем в России современные модемы с агрегацией – чтобы за 3 минуты истратить весь трафик на СИМ-карте ?).
C wifi-модулем оказалось немного посложнее, так как я также не хотел ставить «родной» Микротиковский модуль, на который сейчас, в условиях санкций, сильно кусается цена, а о совместимых модулях конкретно известно мало (кроме того, что имеется совместимость с семействами Atheros AR93xx, AR94xx, AR95xx, и Qulcomm QCA95xx, QCA98xx, QCA6300). Пришлось подумать и поискать. Учтя приверженность разработчиков Микротик к чипам Atheros, в результате всего за 50 р. (да, да, пятьдесят !) я купил старенький, полуразмерный Qualcomm Atheros AR5B95 c wifi 2,4 Мгц b/g/n, который идеально подошёл и сразу заработал с RBM33G. Модули wifi 5 Мгц я не пробовал, также не пробовал двухдиапазонные модули, вероятно, для меня это дело будущего.
Понятно пришлось приобрести также необходимы антенны для lte-модемов и wifi и пигтейлы к ним (для теста LTE я брал обычные штыревые антенны с небольшим коэффициентом усиления, расчитанные на работу в «городских» условиях). Всё вместе составило около 2500р.
Также была куплена промышленного типа SD-карта Metorage объемом 32GB (1.600 р.) для установки сервера Микротик Dude. Для подобных задач всегда лучше брать промышленного («industrial») стандарта SD, рассчитанные на соответствующие условия эксплуатации.


Рис 2. Индустриальная SD-карта 32 Гб.

В качестве SSD был приобретён M.2 диск GUDGA GVX-2242 объемом 512 Гб с ключом М в размере 2242. В выборе SSD я руководствовался только физической длиной диска (42мм) и ценой (3000р). Как заявлено производителем RBM33G, система поддерживает только SSD в формфакторе M.2 с ключом М, при этом какой бы скоростной не был диск, поддерживается только «первая» скорость –PCI-x1.


Рис 3. SSD GUDGA M.2 512 ГБ M key.

SSD, выполненные именно в размере 2442, отлично подходят для монтирования на RBM33G, так как под него имеется отверстие для крепления, в которое нужно вставить заклепку из K-25 набора RBM33G. SSD планировался под хранение библиотек скриптов, различных нужных программ и файлов, доступных в расшаренных папках по SMB-протоколу и по FTP. Сколько времени проживёт диск сказать сложно. Для лучшего охлаждения лучше приклеить к нему алюминиевый радиатор.
Система без проблем сразу «увидела» оба диска, и SD и SDD, в /system disk. Их пришлось разумеется переразметить в формат ext3, настроить сетевые папки в /ip smb. Тем, кто пойдет по моим стопам, совет – не берите скоростные SSD, всё равно работа будет медленной, т.к. плата поддерживает только PCI1 x. Микротик вообще не расчитан быть NAS-ом, его SSD официальное руководство советуют использовать под базы данных IP, /user manager, кеша web proxy и резервного копирования данных или хранения лога. (https://wiki.mikrotik.com/wiki/Manual:System/Disks).
У RBM33G есть приятная особенность: большинство плат Микротик отключают USB-порт при использовании обоих mini PCI-e слотов. В RBM33G можно установить один mini PCI-e модем и wifi-радиокарту не отключая USB-порт (не снимая соответствующую перемычку). Если же нужно установить два модема перемычку нужно снять, но тогда отключается только USB2 интерфейс, а USB3 всё равно остаётся подключенным. Так что даже при «полной загрузке» можно использовать USB3-порт для подключения дополнительного диска или, например, суперскоростного модема с агрегацией частот (этого я делать пока не стал).
Отдельной, очень интересной с моей точке зрения возможностью расширения, является наличие у RBM33G GPIO (интерфейса ввода/вывода), разъем которого присутствует на плате в виде 26 «штырьков» (пинов). Часть PIN-контактов разъема доступны програмно из консоли или скриптового языка RouterOS и могут быть настроены как на ввод, так и на вывод. Распиновка GPIO RBM33G описана в официальной документации help.mikrotik.com/docs/display/UM/RBM33G


Рис 4. Распиновка GPIO RBM33G (26 контактов).

Интересно, что GPIO Микротик распиновкой точь в точь соответствует 26 контактному GPIN-разъему Raspberry Pi B. Не знаю это стандарт или намеренное заимствование для совместимости разработчиков Микротик.


Рис 5. Схема GPIO RBM33G точно соответствует GPIO-разъему Raspberry Pi B (она есть в Интернет и её красочный вариант удобно использовать).

RBM33G имеет только цифровые (digital) GPIO. Программно доступны Pin 3, 5, 12, 13, 15 и 16. По умолчанию под GPIO на RBM33G доступны только Pin3 и Pin5:

/iot gpio digital print  

# NAME DIRECTION OUTPUT INPUT SCRIPT
0 pin3 input 0 1
1 pin5 input 0 1

Также по умолчанию, Pin 12-16 используются под последовательный порт (тоже, кстати, отдельная тема, до которой ещё не дошли руки). Чтобы использовать их под GPIO нужно выполнить команду:

/system/routerboard/settings/set gpio-function=""

,

Отключающую GPIO от serial-порта. Для вступления изменений в силу необходима перезагрузка платы:

/system reboot

Теперь под GPIO будут доступны целых шесть цифровых линий ввода/вывода:

/iot gpio digital print  

# NAME DIRECTION OUTPUT INPUT SCRIPT
0 pin3 input 0 1
1 pin5 input 0 1
2 pin15 input 0 0
3 pin13 input 0 0
4 pin12 output 1
5 pin16 output 0

У RBM33G линии ввода/вывода только цифровые (digital), аналоговых линий нет. Все линии могут быть настроены програмно как на ввод, так и на вывод:

/iot gpio digital set pin15 direction=input
/iot gpio digital set pin16 direction=output

На линиях, настроенных на вывод (output), можно программно устанавливать значение логической единицы или нуля (при этом на линии появляется напряжение соответственно от 0 до +1,4В и от +1,41 до +3,63В).

/iot gpio digital set pin16 output=1
/iot gpio digital set pin16 output=0

К линиям можно «прицеплять» скрипты репозитория или непосредственно исполняемый код:

 /iot gpio digital set pin12 script=io_test
 /iot gpio digital set pin13 script=":log warning \"Reverse line\""
 /iot gpio digital set pin15 script=":global myFunc; [$myFunc]"

Тогда при смене состояния линии будет выполняться прикрепленный скрипт или инструкция. Глобальная функция, «прикрепленная к GPIO», у меня выполнялась, почему-то только если была создана непосредственно из CLI (возможно ошибка разработчиков Микротик).
Соответственно, используя GPIO, можно подключить к RBM33G какое-либо оборудование, способное принимать и передавать цифровые сигналы. То есть можно управлять работой этого оборудования или получать данные с него, либо с него управлять работой Микротик.
Я решил подключить к GPIO Микротик свой любимый модуль мониторинга среды и управления нагрузками Laurent-5G компании KernelChip (https://kernelchip.ru/Laurent-5G.php). У этого модуля есть аналогичные, удобные для подключения, программируемые линии ввода/вывода общего назначения (8 линий IO), с той же логикой и вольтажом управления, что и GPIO RBM33G, то есть как нельзя лучше подходящие для такой задачи.
Для экперимента, я соединил линии pin3 и pin5 RBM33G, настроенные на вывод с двунаправленными дискретными линиями общего назначения IO 1 и 2, настроенными на вход.


Рис. 6 Соединение GPIO RBM33G Pin3 и Pin5 и линий ввода/вывода IO1 и IO2 Laurent-5G

При подаче команды на Микротик РоутерОС:

/iot gpio digital set pin3 output=1 

на IO1 Laurent-5G подаётся напряжение +3V в допустимых пределах отклонения (логическая единица). При


/iot gpio digital set pin3 output=0

Напряжение на IO1 не будет превышать +1,41 (логический ноль)
Появление того или иного явления на линии ввода можно обнаружить на Laurent-5G с помощью специально «запрограммированного» задания системы СAT (см. Руководство Laurent-5G kernelchip.ru/download/Laurent-5_5G/Laurent-5_Manual_v.1.15.pdf) и по достижению этого факта выполнить то или иное действие.

Также я подключал к линиям GPIO RBM33G, настроенным на вывод блок на 4 реле 220В с низким управляющим напряжением (1,5-5В) KIT MP701 (https://masterkit.ru/shop/1327359) и непосредственно управлял работой его реле через скрипты РоутерОС.


Рис. 7 Модуль реле 220В 4 канала MP701 с управляющим напряжением 1,4-5В.

Схема такого подключения проста: +5В возьмем, например, с PIN 4, а GND с PIN 6 GPIO RBM33G. Управляющие сигналы будут поступать с PIN 12, 13, 15 и 16, настроенных на вывод и физически соединенными соответственно с PIN 2-4 (на схеме IN1-4) блока MP701.


Рис. 8 Пробное подключение MP701 к RBM33G «на коленке» «на столе». На фото видны также установленные модем Huawey и полуразмерный wifi Atheros.


Рис.9 Подключение модуля реле MP701 к GPIO RBM33G c размещением в оригинальном корпусе Микротик CA433U.

После установки компактной RBM33G в удлиненный корпус CA433U остаётся свободное место, как раз достаточное для внутренней установки модуля MP701. Обратите также внимание: на фото установлен другой SSD, более длинный (размер 2280), что не мешает установке MP701. Также установлены два модема mini-PCI-e Mikrotik R11e-LTE 4 Cat.
Настраиваем линии 12, 13, 15, 16 Микротик RBM33G на вывод:

/iot gpio digital set pin12 direction=output
/iot gpio digital set pin13 direction=output
/iot gpio digital set pin15 direction=output
/iot gpio digital set pin16 direction=output

Теперь можно переключать реле 220В блока MP701:

# включаем реле 2; /iot gpio digital set pin13 output=1
# выключаем реле 4; /iot gpio digital set pin16 output=1

Поскольку мы используем механические реле, а не оптроны, то они будут «щелкать» при переключении, для проверки работы можно не подключать нагрузку.
Как видим номерам реле 1, 2, 3, 4 соответствуют линии 12, 13, 15, 16 соответственно. Чтобы не путаться в этих цифрах, можно занести их в массив, где номер линии будет соответствовать порядковому номеру элемента массива. Тогда вызывать элементы массива можно выражением ($Array->X), где $Array – имя массива, X – номер элемента. Не забываем, что элементы массива номеруются с нуля.

:local arrayPin {12; 13; 15; 16}
:local on 1; local off 2

# работаем сразу со всеми реле массива

# - > включение
:local count 0
:foreach Xpin in=$arrayPin do={
          :set count ($count+1)
          :put «Включаем реле $count»
          /iot gpio digital set "pin$Xpin" output=$on
   }
}

# - > выключение
:set count 0
:foreach Xpin in=$arrayPin do={
          :set count ($count+1)
          :put «Выключаем реле $count»
          /iot gpio digital set "pin$Xpin" output=$off
   }
}

# или отдельно с выбранным реле
:set count 2
     /iot gpio digital set "pin$($arrayPin->2)" output=$on

А можно чуть потрудиться и написать более удобную, универсальную функцию:

# Функция работы с реле 4-х канального модуля MP701; by Sertik 03/10/2023

# $1 - действие (on/off/status/direction/info), при info всегда выдается информация по всем реле
# $2 - номер реле (если не указан действие выполняется над всеми)
# $3 - input/output, используется при $1 direction, если не задан, действие производится над всеми линиями


:global iotRele do={
:local arrayPin {12; 13; 15; 16}
:local act;

:if ($1="help") do={
         /terminal style varname
         :put ""
         :put "Function works with GPIO RBM33G"
         :put "version 1.0"
         :put "by Sertik 03/10/2023"
         :put ""
         :put "\$1-action: on/off/status/direction/info/help"
         :put "\$2-rele number, if not define - all"
         :put "\$3-input/output for direction"
         :put ""
         /terminal style none}

:do {
    :foreach Xpin in=$arrayPin do={
            /iot gpio digital set "pin$Xpin" direction=output}
             } on-error={:local gpioanswer "GPIO pin 12-16 is set on serial-port"
                              :put ("ERROR $0"."\r\n"."$gpioanswer")
                              :log error ("ERROR $0"."\r\n"."$gpioanswer")
                              :return $gpioanswer       
                   }

     if ($1="info") do={
:local gio [/iot gpio digital print as-value]
:local count 0; local name; :local dir; :local state;
:foreach i in=$gio do={
                            :set name ($gio->$count->"name")
                            :set dir ($gio->$count->"direction")
                            :set state ($gio->$count->"output")
                            :set count ($count+1)
         :put ("$count "."$name "."$dir "."$state")
         :log info ("$count "."$name "."$dir "."$state")
  }
:return $gio}

:if (($1="status") and ([:len $2]=1)) do={
do {
                  :return [/iot gpio digital get "pin$($arrayPin->([:tonum $2]-1))"]
} on-error={:return Error}
}

:if (($1="direction") and ([:len $3]=0)) do={
    :if (($2="input") or ($2="output")) do={
        do {
                  :foreach Xpin in=$arrayPin do={
                  /iot gpio digital set "pin$Xpin" direction=$2
                   }
        } on-error={:return Error}
  } else={:return Error}
:return Done}

:if (($1="direction") and ([:len $2]=1) and ([:len $3]>0)) do={
     :if (($3="input") or ($3="output")) do={
            :do {
                  /iot gpio digital set "pin$($arrayPin->[:tonum $2])" direction=$3
                } on-error={:return Error}
     } else={:return Error}
:return Done}

     :if ($1="on") do={:set act 1}
     :if ($1="off") do={:set act 0}

:if ([:len $act]>0) do={

   :if ([:len $2]>0) do={
           :do {
                  :if (([:tonum $2]<=0) or ([:tonum $2]>4)) do={:return Error}
                  /iot gpio digital set "pin$($arrayPin->([:tonum $2]-1))" output=$act
                  } on-error={:return Error}
     } else={
                  :foreach Xpin in=$arrayPin do={
                  /iot gpio digital set "pin$Xpin" output=$act
                   }
                } 

 :return "Done"} else={:return "Error"}
}


# Примеры вызова

# вывести состояние всех реле в терминал и лог
# [$iotRele info]

# запросить состояние реле 3
# :local R3 [$iotRele status 3]

# установить направление ввода/вывода линии 4
# [$iotRele direction 3 output]

# установить направление ввода/вывода всех 4-х линий на ввод:
# [$iotRele direction input]

# :log error ("Включаем реле 3 "."$[$iotRele off 3]")
# :delay 2s
# :log warning ("Выключаем реле 3 "."$[$iotRele off 3]")

# Включаем все реле
# [$iotRele on]

# Выключаем все реле
# [$iotRele off]

Можно, разумеется, вместо MP701 использовать другие совместимые по управляющему току, в том числе твердотельные, релейные модули.
Также можно установить на корпус с Микротик RBM33G небольшие симпатичные кнопки «без фиксации», соединив их с PIN +5В GPIO и одной из линий ввода/вывода, настроенной на input. Тогда, при нажатии на кнопку, на линии будет появляться «логическая 1», а при отпускании – «логический ноль». Этот факт можно зафиксировать быстро исполняемым скриптом Планировщика роутера (/system scheduler). Ну, правда придётся конпку подержать, хотя бы секунду и скрипт вызывать с той же частотой. Дальше зависит от фантазии и целей – перезагрузка роутера, переключение реле, переключение на другой wan-канал и т.д…
На этом комплектацию RBM33G можно считать завершённой.


Рис. 10 Фото «законченного изделия» в корпусе CA433U.

Для универсальности можно установить один LTE-модем и двухдиапазонный wifi-модуль в mini PCI-e слоты (тогда будем иметь wifi 2,4 и 5 МГц), или два модема (один mini PCI-e, другой USB), если нужно резервировать LTE-каналы в Интернет. Дополнительный скоростной M.2 модем с USB3 адаптером, кстати, можно установить прямо в корпус CA433U, места хватит. На SD-карту можно инсталлировать DUDE-server для мониторинга сети (я это уже делал несколько раз успешно ранее и могу сказать, что SD промышленного класса более пригодны для этой цели, чем SSD), SSD использовать как хранилище скриптовых библиотек и не часто используемых файлов. Кстати в РоутерОС v7 можно использовать контейнеры, открытые на SSD.
К силовым контактам MP701 осталось подключить разъем на корпус RBM33G, с которого можно снимать фазу 4-х контактного релейного модуля. Микротик RBM33G c MP701 или другим совместимым релейным модулем может использоваться для включения/выключения дополнительного сетевого оборудования, физического подключения NAS при входе VPN-пользователей, управления элементами охлаждения/подогрева сетевого шкафа и т. д…
В целом собранный нами комбайн вполне может справиться с нагрузками и «хотелками» сети среднего офиса или загородной резиденции.
Пишите в комментариях свои варианты расширенного использования RBM33G.

 

Источник

mikrotik, RBM33G, Бюджетное, для, операций, оснащение, удаленных

Читайте также