В качестве введения

Коммуникационное оборудование достаточно быстро устаревает.  Еще совсем недавно Mikrotik hAP RB951Ui-2nD был вполне приличным роутером,  но по сегодняшним меркам 100м порты, однодиапозонный Wi-Fi, и заслуженный процессор Qualcomm Atheros QCA9531 - слабовато даже для дачи.

Но устройство собрано добротно (спасибо ребятам из Риги за хорошее качество), отлично работает с Router OS 7, имеет USB порт и PoE - жалко от него избавляться.

Пришла в голову идея – с  минимальными доработками использовать его в качестве основного блока сигнализации на удаленном объекте.

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

1.Любой роутер Mikrotik с блоком питания. У меня - hAP RB951Ui-2nD

2.Доступ в интернет. Если на объекте нет интернета, используем USB модем, у меня оказался не нужный  – Huawei E3372h-153 с симкой МТС.

3.Какой-нибудь извещатель – так эти устройства называются у охранников. Это может быть ИК датчик присутствия, разбития стекла, или просто геркон на дверь. Извещатели должны быть с «сухими контактами». Для тех, кто не в курсе это просто нормально разомкнутые контакты реле не связанные по питанию с датчиком.

Дополнительные компоненты – по желанию.

4.IP камера. У меня HiWatch IPC-T020(C) – самая простая. Можно прицепить несколько по проводу и(или) Wi-Fi по необходимости.

5.Резервное питание. Я использовал батарею из четырех литий-железо-фосфатных (LiFePO4) аккумуляторов (контроллер заряда Lisolec 4S BMS LiFePO4 12V) + дополнительный БП на 14 вольт для зарядки батареи и питания камеры.

Как это работает

Как известно стандартный 10/100м Ethernet порт использует четыре сигнальные линии: Tx+(б/оранж), Tx-(оранж), Rx+(б/зел), Rx-(зел). MDI(TIA/EIA-568B). При стандартном подключении к порту сетевой платы (например) линии TX соединяются с линиями RX и линк поднимается.

Уберем сетевую плату. Соединим напрямую в патче Rx с Tx. Порт поднимется, но при этом получим так называемую петлю (loop). Ситуация очень не приятная в Ethernet,  ее обычно отлавливают с помощью технологии защиты от петель (loop protect у Mikrotik). Но у нас роутер! Не включаем нужный порт в любые бриджи, отключаем loop protect на  нем, и ура, порт горит, а широковещательный шторм – отсутствует. Разъединяем одну линию, линк падает – счетчик “Link Downs” на порту прибавляется. Восстанавливаем линию,  порт поднимается.

Но не все так просто… При соединении проводников порт не всегда переходит в состояние “Up”. Видимо, это особенность RouterOS.  Чтобы гарантированно установить статус порта нужно ненадолго включить “Cable Test” на этом порту, остальные манипуляции не помогают. Но у чипсета есть особенность,  что при включении “Cable Test” на одном порту, иногда, все остальные порты switch chip кратковременно уходят в “Down”, что очень неприятно,  когда у вас на них что-то подключено, например камера или интернет.

Хорошо, что в роутере много Ethernet портов! Используем два порта. Исключаем их из всех бриджей, отключаем loop protect, соединяем между собой Tx и Rx. Контактами извещателя прерываем одну из линий линка и … все, получили блок сигнализации. Эта схема работает отлично, и не требует дергать “Cable Test”.

Осталось в Scheduler запустить скрипт, который регулярно проверяет “Link Downs” на нужном  порту,  и шлет оповещение хозяину.

Реализация

Настраиваем  микрот для доступа в интернет.

Кратко прокомментирую конфиг, он достаточно стандартен для выхода в интернет через USB модем.

  • Настраиваем Ethernet интерфейсы: E1 – приходит резервное питание; E2 – подключена Ip камера; E3 – в бридже для настройки роутера; E4 и E5 используются для сигнализации.

  • Wi-Fi интерфейс на ваш вкус

  • LTE стандартно для USB модема в режиме PPP (Stik)

  • В бридж добавляем все порты,  кроме E4-E5

  • Делаем локальную сеть 192.168.5.0/24, создаем DHCP сервер, камере даем фиксированный ip.

  • ip firewall filter и ip firewall nat все стандартно

# 2026-06-24 10:11:15 by RouterOS 7.23.1#
# model = RB951Ui-2nD

/interface ethernet
set [ find default-name=ether1 ] name=E1-Power12
set [ find default-name=ether2 ] name=E2-Camera
set [ find default-name=ether3 ] name=E3
set [ find default-name=ether4 ] advertise=10M-baseT-half,10M-baseT-full arp=disabled loop-protect=off name=E4-Alarm
set [ find default-name=ether5 ] advertise=10M-baseT-half,10M-baseT-full arp=disabled loop-protect=off name=E5-AlarmP poe-out=off

/interface wireless
set [ find default-name=wlan1 ] band=2ghz-onlyn country=russia3 frequency=\
    auto max-station-count=10 mode=ap-bridge multicast-buffering=disabled \
    multicast-helper=disabled name=WiFi2.4 ssid=<SSID> wireless-protocol=\
    802.11 wps-mode=disabled
/interface wireless security-profiles
set [ find default=yes ] authentication-types=wpa2-psk group-key-update=1h \
    mode=dynamic-keys supplicant-identity=MikroTik

/interface lte
set [ find default-name=lte1 ] allow-roaming=yes disabled=yes name=MTS-LTE 
/ppp profile
set *0 use-ipv6=no use-mpls=no use-upnp=no
add name=MTS-LTE use-compression=no use-encryption=no use-ipv6=default \
    use-mpls=no use-upnp=no

/interface bridge
add name=Bridge protocol-mode=none
/interface bridge port
add bridge=Bridge interface=E1-Power12
add bridge=Bridge interface=E3
add bridge=Bridge interface=E2-Camera
add bridge=Bridge interface=WiFi2.4
/ip address
add address=192.168.5.1/24 interface=Bridge network=192.168.5.0

/ip pool
add name=Pool ranges=192.168.5.10-192.168.5.200
/ip dhcp-server
add address-pool=Pool interface=Bridge lease-time=1d name=DHCP
/ip dhcp-server network
add address=192.168.5.0/24 dns-server=192.168.5.1 gateway=192.168.5.1 netmask=24
/ip dhcp-server lease
add address=192.168.5.2 client-id=1:XX:XX:XX:XX:XX:XX comment=Camera \
    mac-address=XX:XX:XX:XX:XX:XX server=DHCP

/ip dns
set allow-remote-requests=yes cache-max-ttl=1d servers=1.1.1.1,77.88.8.8

/ip firewall filter
add action=drop chain=input dst-port=22,23,53,80,443,8291 in-interface=MTS protocol=tcp
add action=drop chain=input dst-port=53 in-interface=MTS protocol=udp
/ip firewall nat
add action=masquerade chain=srcnat out-interface=MTS src-address=192.168.5.0/24

/system clock
set time-zone-autodetect=no time-zone-name=Europe/Moscow
/system ntp client
set enabled=yes
/system ntp client servers
add address=217.91.44.17

При включении питания, бывают случаи, что USB модем сразу не работает,  поэтому с задержкой 40с после включения проверяем интерфейс MTC, если не готов перегружаем USB по питанию. Заодно инициализируем глобальную переменную E4linkDown – число срабатываний;

/system scheduler
add name=RebootUSB1\
on-event=":global E4linkDown -1;\
    \r\ndelay 40; \r\n :if ( [/interface get [find name=\"MTS\"] run] = false ) \
    do={/system routerboard usb power-reset duration=10s};"\
  policy=read,write,policy,test start-time=startup

И основная процедура проверки срабатывания сигнализации,  отправки уведомлений и проверки кто присутствует на объекте.

:local MacA { 
  "Admin1"="XX:XX:XX:XX:XX:XX"; 
  "Admin2"="XX:XX:XX:XX:XX:XX"
 };
:local Text "";
:local DT ("-=".[/system clock get date]."=".[/system clock get time]."=-");
:local linkD [/interface get [find name="E4-Alarm"] link-downs]

:if ($linkD != $E4linkDown) do={
    :foreach ind,mac in=$MacA do={
        :if ([:len [/interface/wireless registration-table find mac-address=$mac]]>0) do={set $Text "$Text $ind,"};
     };
    :local LenText ([:len $Text]-1);
    :set $Text ([:pick $Text 0 $LenText]);
    :if ([:len $Text] = 0) do={ 
        :do {
              /tool fetch url="https://api.telegram.org\
               /botXXXXXXXX:XXXXXXXXXXXX/sendMessage\?chat_id=XXXXXXXXXX\
              &text=--Mikrot-->%0A$DT%0AAlarm$linkD!" keep-result=no;
                 } \
              on-error={
                        /log info "Error Telegram, send SMS, eMail";
                       do { /tool sms send port=usb1 phone-number="+7XXXXXXX" message="Mikrot->\n$DT\n\
                                 Alarm:$linkD!";
                               /tool e-mail send to="XXXXX@XXXX.ru" sub="Mikrot" body="Mikrot-
                               >\n$DT\nAlarm:$linkD!";
                              }\
                             on-error={/log info "Error send SMS or eMail";}
                               }; # on-error
   }; # if ([ len...
    :global E4linkDown $linkD;
  }; # if ($linkD...

/log info "TestAlarm: $DT; $Text; $E4linkDown; $linkD";

Описание по тексту скрипта:

:local MacA – массив с именами пользователей и их mac адресами Wi-Fi. Используется для идентификации пользователей. Человек приходит на объект, его телефон присоединяется к Wi-Fi роутера и сигнализация выключает режим охраны. Естественно, на телефоне должно быть настроено автоматическое подключение к этому ssid и включена опция “использовать МАС адрес устройства”. Кстати, на телефон будет раздаваться интернет с роутера J.

:local DT Текущие дата и время устройства

:local linkD читаем сколько выключений интерфейса на момент запуска скрипта.

:global E4linkDown сколько выключений интерфейса было до момента запуска скрипта.

Логика работы: Проверяем, были ли срабатывания сигнализации с момента последнего запуска скрипта? Если нет, пишем в лог, обновляем E4linkDown и выходим – сработок не было. Если были, проверяем есть ли маки из таблицы MacA в регистрации Wi-Fi? Если есть пишем в лог, обновляем E4linkDown и выходим – сигналка выключена – хозяева на объекте. Если никого нет,  тревога – срабатывание без хозяев – шлем оповещение в телеграмм, если не получилось, дублируем на sms и email.

Скрипт нужно запускать регулярно (у меня 1 раз в минуту) с помощью scheduler

/system scheduler
add interval=1m name=TestAlarm on-event="/system script run TestAlarm\r\
    \n" policy=read,write,policy,test start-time=startup

Использование камеры

Изображения с камер можно использовать по разному. Самый простой вариант сохранить в нужный момент в память микрота и переслать по email.

:local DT ("-=".[/system clock get date]."=".[/system clock get time]."=-");
/tool fetch url="http://192.168.5.2/ISAPI/Streaming/channels/101/picture" user="admin" password="XXXX" http-auth-scheme=digest dst-path="Obj.jpg"
:delay 3s
/tool e-mail send to="xxxx@xxx.ru" subject="Foto obj" body="$DT" file="Obj.jpg"
:delay 5s
/file remove "Obj.jpg" 

Но памяти на этой модели не много, да и при интенсивном использовании появляются битые сектора, поэтому вариант не очень хороший. Можно подключить по USB кардридер с внешним питанием, и писать картинки на флешку.

Я делаю по-другому. У меня есть сервер умного дома, и сигнализация подключена к его внутренней сети. Сигнал тревоги вместе с оповещением поступает на сервер, а уже сервер обращается к камере и забирает картинку. Для упрощения конфига эта часть в нем не показана.

Что можно доделать

  1. В один шлейф можно подключить много датчиков (извещателей) последовательно, или параллельно, если контакты нормально разомкнуты.

  2. Так как у нас есть еще три свободных  порта, то можно организовать еще один независимый  шлейф сигнализации и оповещать, какой контур сработал.

  3. У нас есть PoEout порт, на него можно включить звуковое/световое оповещение.

  4. На свободные порты можно повесить секретную кнопку вкл/выкл сигнализации,  или не секретную – вызов охраны.

Скрытый текст
Mikrotik + HiWatch
Mikrotik + HiWatch
Блок резервного питания
Блок резервного питания

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


  1. Gansterito
    04.07.2026 17:49

    Я вот не помню почему, но rx/tx в аналогичной конфигурации я замыкал через резистор.


    1. Small69 Автор
      04.07.2026 17:49

      Резистор обычно используется в шлейфе систем ОПС, для того, чтобы различать состояние КЗ и охраны на линии. Как правило 4к7. В ethernet используется стандартный патч без резисторов для соединения порт-порт. По-этому здесь в цепи rx/tx резисторов не использую.


  1. ru_vlad
    04.07.2026 17:49

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


    1. balamutang
      04.07.2026 17:49

      Если netinstall не помогает то тогда флешку надо на плате, сдуть и новую припаять


  1. aladkoi
    04.07.2026 17:49

    У меня на подобный микротик на usb порт подключен внешний модем L850. Все работает стабильно после любой перезагрузки. Все настройки сделал AI агент вместе со скриптами запуска.


  1. balamutang
    04.07.2026 17:49

    Чего только не придумают лишь бы Ардуино не использовать :)

    Кстати на камерах обычно есть служебные контакты которые можно использовать для инициации отправки картинки на почту или на FTP сервер


    1. digrobot
      04.07.2026 17:49

      Да, фича называется "Alarm input", есть в веб-интерфейсе большинства камер, но реально на корпус не выведено, видимо надо на плате искать.


  1. chelaxe
    04.07.2026 17:49

    Можно использовать порт с питанием, вот в моей статье был пример https://habr.com/ru/articles/364593/