Я давно интересовался управлением реле непосредственно из Роутер ОС Микротик таких устройств как Laurent и Rodos по локальной сети http GET запросами, а также «напрямую», при использовании возможностей встроенных GPIO RB Mikrotik 33G. Затем, с помощью модуля USB GPIO EXTENDER отечественной компании Open Development, я смог распространить возможность управления реле практически на все роутеры Микротик, у которых есть USB-порт (как известно, таких большинство). Об этом можно прочитать здесь.
Я также уже писал, что модуль-переходник USB GPIO Extender в базовом исполнении имеет жестко запрограммированные GPIO: 5 входных (IN) и 5 выходных (OUT) линий. Команды, которые понимает Extender в базовой версии приведены здесь. Также существует USB GPIO Extender в версии TOIC, для которого возможно перепрограммирование функции PIN-ов и ответов на команды, что позволяет не только отправлять команды для исполнения из роутеров Микротик, но и получать ответ путем обмена данными в /ppp-client at-chat.

В данной работе при создании USB Power Box, я решил ограничиться возможностями базовой верcии USB GPIO Extender, так как кроме управления реле установкой соответствующих выходов, больше мне ничего не было нужно.
Для своего устройства я приобрел довольно стильный алюминиевый корпус, размерами 110 Х 110 Х40 мм. (стоимость около 500 р).

Рис. 1 Алюминиевый разборный корпус для РЕА

Затем, с помощью шуруповерта, тисков и набора напильников в вышепредставленном корпусе были проделаны технологические отверстия для установки разъема входного питания 220В и двух выходных разъемов питания (300р) переменного напряжения 220В (при необходимости устройство может управлять питанием постоянного тока, скажем 12В). Также было проделано отверстие для установки USB A m – USB A f шнура-переходника (для увеличения места в корпусе этот шнур был уставновлен разъемом наружу, а изнутри корпуса в него подключен USB GPIO Extender (стоимость соответственно около 100р и 440 р.).

Рис. 2 Шнур-переходник USB A m – USB A f

Рис. 3 USB GPIO Extender

На дно корпуса была помещена текстолитовая пластина для электроизоляции с корпусом (100р) и установлен модуль управления 220В на 4 реле (350 рублей).

Рис. 4 Модуль реле 4 канала

Почему использован модуль 4-х канального реле, когда в USB Power Box сделано всего два выхода 220В ? спросите Вы. Так было решено сделать для простоты и надежности. Всё дело в том, что когда мы, например, вставляем вилку электроприбора 220В в розетку мы никогда не задумываемся на каком контакте у этой вилки оказывается фаза, а на каком ноль и не определяем этого заранее. Для большинства электроприборов и безопасности для человека это не критично, особенно если в такой цепи питания есть «земля». Но, все выключатели и переключатели 220В все же желательно делать так, чтобы они разрывали фазу, а не ноль.
Я решил не мудрствовать и в своем приборе для надежности отдал по два реле на каждый выход 220В: одно на фазу, второе на ноль При этом при переключении выхода у меня одновременно отрабатывают два реле: "рвутся" и провод фазы и провод нуля и мне абсолютно все равно на каком контакте у меня кто. Возможно многие скажут, что это «избыточность», для меня же это «надежность». Питание 5В блок реле у меня получает по USB, как и USB GPIO Extender, то есть мы имеем так называемое подключение «без гальванической развязки». Хотя за это меня уже обвиняли в «грязном хаке» (см. комментарии к статье) силы тока USB-шины Микротик хватает для питания переходника и модуля реле и все работает четко и стабильно. Дальше соединяем силовые провода от входа 220В с реле и выходными разъемами, а управляющие провода OUT линий 1-4 USB GPIO с соответствующими штекерными контактами модуля реле (IN1-IN4), см. схему ниже:

Рис. 5 Схема подключения управляющей логики и силовых выходов

В итоге, после монтажа модулей реле и GPIO, получилось весьма симпатичное устройство в алюминиевом корпусе, готовое для подключения к «Микротику»:

Рис. 6 (A - USB Power Box без верхней крышки (слева) и в сборе (справа).

Для взаимодействия с USB GPIO Extender из Микротик Роутер ОС у меня уже была готовая, ранее написанная мной, функция fOpenDevExt. Её код был опубликован здесь.
Для управления конкретно USB Power Box я написал «поверх» ещё одну функцию, названную мной fUPB, максимально приближенную к пользователю. fUPB в процессе своей работы вызывает fOpenDevExt, но включает/выключает реле каналов, соответствующих одному выходу питания попарно.

Функция USB Power Box ($fUPB) имеет следующие параметры:

$fUPB ON – включить оба выходных канала питания
$fUPB OFF – выключить оба выходных канала
$fUPB ON 1 – включить первый канал
$fUPB OFF 1 – выключить первый канал
$fUPB ON 2 - включить второй канал
$fUPB OFF 2 - выключить второй канал
$fUPB list – выдать список опций функции в Терминал
$fUPB ready – проверка готовности, возвращает ОК или ERROR
$fUPB resetUSB – сброс питания на всей шине USB (/system routerboard usb power reset)
$fUPB resetGPIO – сброс (перезагрузка) модуля USB GPIO Extender

Код функции $fUPB:

# Функция включения/выключения релейных выходов USB POWER BOX,
# объединенных в каналы питания 1 и 2,
# собранного на базе модуля 4 реле и USB GPIO Externder через функцию $fOpenDevExt
# $AllReleModule 2
# каждый выход управляется парой реле для одновременного вкл/откл фазы и нуля 220В
# всего соответственно имеется 2 пары реле: 1,2 - первый справа выход 
#                                           3,4 - второй справа выход UPB
# by Sertik 25/11/2025
#------------------------------------------------------------------------

# версия без озвучивания действия - "тихое реле"

:global fUPB do={
 :global fOpenDevExt
 :local OpenDEflag true
 :local AllReleModule 2; # число "каналов питания" в USB POWER BOX, не изменять !

  :do {
     :if (!any $fOpenDevExt) do={:global fOpenDevExt; /system script run fOpenDevExt}; 
         } on-error={:set OpenDEflag false}

# команда "help"
 :if (([:len $1]=0) or ($1="help")) do={
     :put ""; 
     :put ("+++++++++++++++++++++++++++++++");
     :put ("function fUPB for USB Power Box")
     :put ("version 25/11/2025; by Sertik");
     :put ("+++++++++++++++++++++++++++++++")
     :put ""; :return []}

# команда "list"
 :if ($1="list") do={
     :put ""; 
     :put ("$0 ON/OFF 1..."."2/both");
     :put ("$0 ready")
     :put ("$0 resetUSB");
     :put ("$0 resetGPIO")
     :put ""; :return []}

# команда "ready", проверка готовности и сообщение
 :if (($1="ready") and ($OpenDEflag)) do={:put ""; :put "$0 is ready !"; :put ""; :log info ""; :log warning "$0 is ready !"; :log info ""; :return OK}

# команда "resetGPIO" (сброс модуля USB GPIO Extender)
 :if ($1="resetGPIO") do={:put ""; :put "reset USB Power Box from USB GPIO Extender"; :put ""; :log info ""; :log error "reset USB Power Box from USB GPIO Extender"; :log info "";
 :return [$fOpenDevExt reset]}

# команда "resetUSB" (сброс питания на всех USB портах)
 :if ($1="resetUSB") do={:put ""; :put "reset USB Power Box from USB power reset"; :put ""; :log info ""; :log error "reset USB Power Box from USB power reset"; :log info "";
 :local durat 2s; # по умолчанию сброс на 2 сек
 :do {
    :if ([:len $2]!=0) do={:set durat [:totime $2]}
 } on-error={}
 :if ($durat>60s) do={:return "Error: bad parametr $2 (The reset delay cannot exceed 60s.)"}
 /system routerboard usb power-reset duration=$durat;
 :put ("$0 power-reset for $durat"); :return ("OK:$durat")}

                   
   :if (!$OpenDEflag) do={:put ""; :put "$0 is not ready"; :put ""; :log info ""; :log error "$0 is not ready"; :log info ""; :return "Error: no OpenDevExt function"}

# работа с обоими каналами сразу
 :if (($2="both") or ([:len $2]=0)) do={
      :local action false
       :if ($1="ON") do={:set $1 "11111"; :set action true
             :log error ("$0 reports: <Both power channel is ON>"); :put ("$0 reports: <Both power channel is ON>"); 
          } 
       :if ($1="OFF") do={:set $1 "00000"; :set action true
    :log error ("$0 reports: <Both power channel is OFF>"); :put ("$0 reports: <Both power channel is OFF>"); 
 }
 :if (!$action) do={:return "Error: bad parametr action $1"}
   :return [$fOpenDevExt "SetOut" $1]}

 :if (([:tonum $2]<1) or ([:tonum $2]>$AllReleModule)) do={:return "Error: bad parametr $2 (power channel number)"}

:local nrelay;

:if ($2="1") do={:set nrelay 1}
:if ($2="2") do={:set nrelay 3}

 :if (($1="ON") or ($1="OFF")) do={
     :if ($1="ON") do={:set $1 "OutOn"}
     :if ($1="OFF") do={:set $1 "OutOff"}

# действие с реле: включение/выключение пары реле (одного канала питания)
  [$fOpenDevExt $1 $nrelay]
  :delay 1s
# сообщение в лог
  :log error ("$0 reports: <Power Channel $2 is $1>"); :put ("$0 reports: <Power Channel $2 is $1>"); 
  :return [$fOpenDevExt $1 ($nrelay+1)]
 } else={:return "Error: bad parametr $1 (action)"}
}

Рис. 7 функции для работы с UPB в репозитории роутера Микротик

Также $fUPB имеет возможность делать сброс как всей USB-шины с портами USB на заданное время, так и программный сброс USB GPIO Extender. При обоих типах рестарта релейный модуль переключает все свои реле выключая их и заново включая. Это следует иметь ввиду при подключении оборудования к USB Power Box. То же происходит при перезагрузке роутера, а при /system shutdown все реле будут переключены. Функция fOpenDevExt может быть настроена на работу реле с различной логикой срабатывания реле (Low level triger или High level triger); подробнее см. комментарии в тексте скрипта функции).
Следует упомянуть, что существуют модули реле, в которых джамперами можно указать как работает каждое реле такого модуля (Hit или Lit). Такая раздельная работа функцией fOpenDevExt не поддерживается. Режим работы может быть настроен только один для всех реле модуля сразу.

В плане практического применения USB Power Box видится следущее:

• включение/выключение отопительного оборудования, вентиляторов, освещения, в том числе по расписанию
• включение/отключение NAS, PC в том числе по событиям в ROS (например, при установке VPN-соединения c конкретным пользователем/админом)
• переключение роутеров/шлюзов (резервирование)
• включение/выключение звукового оборудования на объекте, в том числе речевого оповещения о событиях, авариях и т.д.
• сброс/перезагрузка зависшего оборудования

** При совместном использовании c MikroJuxBox проекта MikroVoice® для Микротик возможно озвучить работу USB Power Box, для которого уже «заготовлен» специальный набор джинглов (может поставляться по отдельному запросу).

Отрицательным моментом использования USB GPIO Extender в базовой версии является то (как уже упоминалось в соответствующих статьях), что мы можем подать команду модулю, но не можем получить от него ответ и, таким образом, реально не знаем исполнена команда или нет. По этой причине, для управления критически важными устройствами я бы свой блок в данной версии исполнения не рекомендовал. Для более корректной работы нужно использовать в качестве переходника USB GPIO Extender в версии TOIC, позволяющий перепрограммировать ответы модуля в формат AT-команд, досупных для возврата в среду Микротик Router OS.
К настоящему времени компания разработчик, кажется, приостановила производство USB GPIO Extender TOIC, а вместо этого предлагает USB GPIO Extender Fort (программируемый на языке Fort, такая экзотика точно не для меня), а также представляет USB GPIO Extender 2, для которого имеется программа конфигуратор пинов, написанная на Pyton 3. В этой программе якобы можно заранее настроить значения программируемых пинов (и вероятно ответов модуля в формате AT) без всякого заморочного программирования и сохранить настройки во Flash-памяти модуля. Тут небольшая ложка дегтя производителю: не могли тоже мне сделать готовый к инсталляции программный пакет (зачем мне ставить эту Анаконду). При создании новой версии USB Power Box я обязательно попробую эту версию модуля USB GPIO Extender (так что продолжение, надеюсь, следует …).

Что касается затрат на собранное в настоящее время устройство USB Power Box, то суммировав все указанные «запчасти» и накинув на мелочи (крепеж, провода и т.п.) у меня получилось около 2000 р. Думаю, это не дорого за практически заводского исполнения модуль управляемого реле в корпусе. Подчеркну, что делал всё исключительно для себя (в том числе само устройство в законченном виде, описание, эту статью и наглядную презентацию), но в итоге получился проект, практически подготовленный к ручной сборке (малосерийному производству) и я решил «поделиться» им с читателями.

Подчеркну, что основной фишкой здесь является управление этим устройством именно из Микротик Роутер ОС, а не как-то ещё. Однако, USB Power Box можно (если нужно) подключить к чему угодно, например, прямо к ПК и управлять им через терминальную программу. Но самое ценное в нем для меня то, для чего и создавалось устройство - это возможность управления из ROS MT.

Планирую пока потестировать UPB на даче для управления уличным освещением и подсветкой дома по расписанию из /system scheduler ROS Mikrotik. Например, можно настроить действие, когда хозяин только подъезжает к дому в вечерние часы, а его телефон, имеющий жесткий MAC автоматически подключается к домашней wifi-сети - то включается освещение площадки для парковки на определенное время. Разумеется, для других «подъезжающих» (кроме, разрешенных) такой сервис «не предусмотрен» и им придется парковаться «во мраке». На управлении двумя каналами питания можно сделать, например, наполнение цистерны из скважины (утром) и автоматический полив огорода (вечером, после нагрева воды солнцем). Да мало ли чего можно придумать, лишь бы было оборудование и фантазия …

Комментарии (0)