mikrotik-wiki.ru
Главная
Загрузка...

MikroTik для умного дома — presence detection

RouterOS 7.xIoT13 мин330 мар. 2026 г.
TelegramVK

MikroTik для умного дома — presence detection и автоматизация

MikroTik-маршрутизатор — не только сетевое оборудование, но и мощный инструмент автоматизации умного дома. Он видит все устройства в сети, знает, когда смартфон подключается к Wi-Fi (значит, владелец дома), умеет отправлять HTTP-запросы и MQTT-сообщения. В этом руководстве разберём, как превратить MikroTik в центр автоматизации: определение присутствия по Wi-Fi, управление устройствами через MQTT и webhooks, изоляция IoT-устройств в VLAN, интеграция с Home Assistant и полный пример настройки умного дома.

Описание

MikroTik как центр умного дома

Традиционный подход к умному дому предполагает отдельные хабы для каждого протокола: Zigbee-координатор, Z-Wave-контроллер, Wi-Fi-роутер, платформу автоматизации (Home Assistant). MikroTik позволяет объединить несколько ролей в одном устройстве:

ФункцияТрадиционный подходMikroTik
Wi-FiРоутерВстроенный
Presence detectionОтдельная системаСкрипты на RouterOS
IoT-шлюз (BLE/Thread)Отдельный хабВстроенный (hAP be³)
MQTT-клиентОтдельный сервисВстроенный /iot/mqtt
Сетевая изоляция IoTРучная настройка VLANПолный контроль VLAN/firewall
Мониторинг устройствThe Dude / ZabbixВстроенный + интеграция

Конечно, MikroTik не заменяет полноценную платформу (Home Assistant, openHAB), но дополняет её, предоставляя сетевой уровень автоматизации.

Архитектура умного дома на MikroTik

code
┌─────────────────────────────────────────────┐
│              Интернет                        │
└──────────────┬──────────────────────────────┘
               │
┌──────────────┴──────────────────────────────┐
│         MikroTik (hAP ax³ / hAP be³)        │
│  ┌─────────────────────────────────────────┐ │
│  │ Wi-Fi: presence detection               │ │
│  │ VLAN 10: основная сеть (ПК, телефоны)  │ │
│  │ VLAN 20: IoT-устройства                │ │
│  │ VLAN 30: гостевая сеть                 │ │
│  │ MQTT: уведомления и управление         │ │
│  │ Scripts: автоматизация                 │ │
│  └─────────────────────────────────────────┘ │
└───┬──────────────┬───────────────┬──────────┘
    │ VLAN 10      │ VLAN 20       │ VLAN 30
┌───┴───┐    ┌─────┴─────┐   ┌────┴────┐
│ ПК,   │    │ Умные     │   │ Гости   │
│ Тел.  │    │ устройства│   │         │
└───────┘    └───────────┘   └─────────┘
                  │ MQTT
           ┌──────┴──────┐
           │Home Assistant│
           └─────────────┘

Настройка

Presence detection через Wi-Fi

Presence detection — определение присутствия человека дома по факту подключения его смартфона к Wi-Fi. Это базовый сценарий умного дома: включить свет при приходе, выключить при уходе, поставить на охрану и т.д.

Метод 1: Мониторинг DHCP Lease

Когда смартфон подключается к Wi-Fi, он получает IP-адрес через DHCP. MikroTik может отслеживать DHCP lease и реагировать на появление/исчезновение устройства:

[admin@MikroTik] >
# Просмотр текущих DHCP-аренд
/ip/dhcp-server/lease print where status=bound
# Ищем MAC-адрес смартфона

# Фиксируем MAC-адрес нужного устройства
# iPhone: AA:BB:CC:11:22:33
# Android: DD:EE:FF:44:55:66

Метод 2: Мониторинг Wireless Registration Table

Более точный метод — мониторинг таблицы подключённых Wi-Fi-клиентов. Устройство появляется в таблице при подключении и исчезает при отключении:

[admin@MikroTik] >
# Для Wi-Fi (wifiwave2 / wifi в RouterOS 7.20+)
/interface/wifi/registration-table print
# Показывает все подключённые Wi-Fi-клиенты с MAC-адресами

# Для устаревшего wireless
/interface/wireless/registration-table print

Скрипт presence detection

Создадим скрипт, который проверяет наличие смартфона в Wi-Fi-сети и выполняет действия:

[admin@MikroTik] >
# Глобальные переменные для хранения состояния
:global presenceState "unknown"

/system/script add name=presence-detection source={
  :global presenceState

  # MAC-адреса смартфонов жильцов
  :local phones {"AA:BB:CC:11:22:33";"DD:EE:FF:44:55:66"}

  :local anyoneHome false

  :foreach phone in=$phones do={
    # Проверяем в Wi-Fi registration table
    :local found [/interface/wifi/registration-table find where mac-address=$phone]
    :if ([:len $found] > 0) do={
      :set anyoneHome true
    }
  }

  # Логика смены состояния
  :if ($anyoneHome && $presenceState != "home") do={
    :set presenceState "home"
    :log info "PRESENCE: Someone arrived home"

    # Действие: включить свет (MQTT)
    :do {
      /iot/mqtt/publish broker=mqtt1 \
        topic="home/arrival" message="{\"status\":\"home\"}"
    } on-error={:log warning "MQTT publish failed"}

    # Действие: отправить webhook в Home Assistant
    :do {
      /tool/fetch url="http://192.168.88.50:8123/api/webhook/person-arrived" \
        http-method=post output=none
    } on-error={:log warning "Webhook failed"}
  }

  :if (!$anyoneHome && $presenceState != "away") do={
    :set presenceState "away"
    :log info "PRESENCE: Everyone left"

    # Действие: выключить свет
    :do {
      /iot/mqtt/publish broker=mqtt1 \
        topic="home/departure" message="{\"status\":\"away\"}"
    } on-error={:log warning "MQTT publish failed"}

    # Действие: webhook — режим «ушёл»
    :do {
      /tool/fetch url="http://192.168.88.50:8123/api/webhook/person-left" \
        http-method=post output=none
    } on-error={:log warning "Webhook failed"}
  }
}

# Запуск скрипта каждые 30 секунд
/system/scheduler add name=presence-check interval=30s \
  on-event="/system/script/run presence-detection"

Важно о рандомизации MAC: iOS 14+ и Android 10+ по умолчанию используют случайный MAC для каждой Wi-Fi-сети. Чтобы presence detection работал надёжно:

  • На iPhone: Настройки → Wi-Fi → (i) рядом с сетью → выключить «Частный адрес Wi-Fi»
  • На Android: Настройки → Wi-Fi → выбрать сеть → Privacy → Use device MAC
[admin@MikroTik] >
# Альтернатива: привязываем статический DHCP lease по реальному MAC
/ip/dhcp-server/lease add address=192.168.88.10 \
  mac-address=AA:BB:CC:11:22:33 comment="iPhone - Иван" \
  server=dhcp-home

Улучшенный presence detection с задержкой

Смартфон может кратковременно отключаться от Wi-Fi (экономия энергии, переключение между 2.4/5 ГГц). Добавим задержку перед сменой статуса на "away":

routeros
:global presenceState "unknown"
:global lastSeenTime 0

/system/script add name=presence-detection-v2 source={
  :global presenceState
  :global lastSeenTime

  :local phones {"AA:BB:CC:11:22:33";"DD:EE:FF:44:55:66"}
  :local anyoneHome false
  :local awayDelay 300
  # Задержка 300 секунд (5 минут) перед статусом "away"

  :foreach phone in=$phones do={
    :local found [/interface/wifi/registration-table find where mac-address=$phone]
    :if ([:len $found] > 0) do={
      :set anyoneHome true
    }
  }

  :local currentTime [:tonum [/system/clock get time]]

  :if ($anyoneHome) do={
    :set lastSeenTime $currentTime
    :if ($presenceState != "home") do={
      :set presenceState "home"
      :log info "PRESENCE: Arrived home"
      /iot/mqtt/publish broker=mqtt1 topic="home/presence" \
        message="{\"status\":\"home\"}"
    }
  } else={
    :local elapsed ($currentTime - $lastSeenTime)
    :if ($elapsed > $awayDelay && $presenceState != "away") do={
      :set presenceState "away"
      :log info "PRESENCE: Left home (after 5 min delay)"
      /iot/mqtt/publish broker=mqtt1 topic="home/presence" \
        message="{\"status\":\"away\"}"
    }
  }
}

VLAN для IoT-устройств

IoT-устройства (умные лампы, розетки, камеры) часто имеют уязвимости и не обновляются. Размещение их в отдельном VLAN защищает основную сеть:

[admin@MikroTik] >
# Создаём VLAN для IoT
/interface/vlan add interface=bridge name=vlan20-iot vlan-id=20

# IP-адрес для IoT-сети
/ip/address add address=192.168.20.1/24 interface=vlan20-iot

# DHCP-сервер для IoT
/ip/pool add name=pool-iot ranges=192.168.20.10-192.168.20.254
/ip/dhcp-server add name=dhcp-iot interface=vlan20-iot \
  address-pool=pool-iot disabled=no
/ip/dhcp-server/network add address=192.168.20.0/24 \
  gateway=192.168.20.1 dns-server=192.168.20.1

# Отдельный SSID для IoT-устройств
/interface/wifi/security add name=sec-iot \
  authentication-types=wpa2-psk,wpa3-psk \
  passphrase="IoTSecurePassword123"

/interface/wifi add name=wifi-iot master-interface=wifi1 \
  configuration.ssid="Home-IoT" \
  security=sec-iot

# VLAN-tagging для IoT SSID
/interface/bridge/vlan add bridge=bridge tagged=bridge,wifi-iot vlan-ids=20
/interface/bridge/port set [find interface=wifi-iot] pvid=20

Firewall для IoT-устройств

Ключевой принцип: IoT-устройства могут выходить в интернет (для обновлений и облака), но не могут обращаться к устройствам в основной сети:

[admin@MikroTik] >
# Разрешаем IoT → Интернет
/ip/firewall/filter add chain=forward src-address=192.168.20.0/24 \
  out-interface=ether1 action=accept \
  comment="IoT to Internet"

# Разрешаем IoT → MQTT-брокер (Home Assistant)
/ip/firewall/filter add chain=forward src-address=192.168.20.0/24 \
  dst-address=192.168.88.50 dst-port=1883,8883 protocol=tcp \
  action=accept comment="IoT to MQTT broker"

# Разрешаем established/related от основной сети к IoT
# (чтобы можно было управлять IoT-устройствами из приложений)
/ip/firewall/filter add chain=forward src-address=192.168.88.0/24 \
  dst-address=192.168.20.0/24 action=accept \
  comment="LAN to IoT (management)"

# Блокируем IoT → основная сеть
/ip/firewall/filter add chain=forward src-address=192.168.20.0/24 \
  dst-address=192.168.88.0/24 action=drop \
  comment="Block IoT to LAN"

# Блокируем IoT → маршрутизатор (кроме DNS и DHCP)
/ip/firewall/filter add chain=input src-address=192.168.20.0/24 \
  protocol=udp dst-port=53,67 action=accept \
  comment="IoT DNS and DHCP"
/ip/firewall/filter add chain=input src-address=192.168.20.0/24 \
  action=drop comment="Block IoT to router"

# NAT для IoT
/ip/firewall/nat add chain=srcnat src-address=192.168.20.0/24 \
  out-interface=ether1 action=masquerade \
  comment="NAT for IoT VLAN"

QoS для IoT-устройств

IoT-трафик обычно невелик по объёму, но критичен по времени (команды управления). Настроим приоритеты:

[admin@MikroTik] >
# Маркировка IoT-трафика
/ip/firewall/mangle add chain=forward src-address=192.168.20.0/24 \
  action=mark-packet new-packet-mark=iot-traffic passthrough=yes \
  comment="Mark IoT traffic"

# Очередь для IoT (гарантированная полоса, низкий приоритет для bulk)
/queue/simple add name=iot-queue target=192.168.20.0/24 \
  max-limit=10M/10M limit-at=2M/2M priority=6/6 \
  comment="IoT bandwidth limit"

IoT-устройства не должны потреблять много трафика. Если устройство генерирует аномальный трафик — это может быть признаком компрометации.

Интеграция с Home Assistant

Home Assistant — самая популярная open-source платформа для умного дома. MikroTik интегрируется несколькими способами:

Способ 1: MQTT

Самый гибкий способ. MikroTik публикует данные в MQTT, Home Assistant подписывается:

[admin@MikroTik] >
# Настройка MQTT-брокера на MikroTik
/iot/mqtt/brokers add name=ha-mqtt address=192.168.88.50 port=1883 \
  client-id="mikrotik-home" username=mqtt password=MqttSecure123

# Скрипт: отправка данных о подключённых устройствах
/system/script add name=ha-device-count source={
  :local wifiCount [/interface/wifi/registration-table print count-only]
  :local dhcpCount [/ip/dhcp-server/lease print count-only where status=bound]

  /iot/mqtt/publish broker=ha-mqtt \
    topic="mikrotik/network/stats" \
    message="{\"wifi_clients\":$wifiCount,\"dhcp_leases\":$dhcpCount}"
}

/system/scheduler add name=ha-stats interval=1m \
  on-event="/system/script/run ha-device-count"

В Home Assistant configuration.yaml:

yaml
mqtt:
  sensor:
    - name: "MikroTik Wi-Fi Clients"
      state_topic: "mikrotik/network/stats"
      value_template: "{{ value_json.wifi_clients }}"
      icon: mdi:wifi
    - name: "MikroTik DHCP Leases"
      state_topic: "mikrotik/network/stats"
      value_template: "{{ value_json.dhcp_leases }}"
      icon: mdi:lan

  binary_sensor:
    - name: "Someone Home"
      state_topic: "home/presence"
      value_template: "{{ value_json.status }}"
      payload_on: "home"
      payload_off: "away"
      device_class: presence

Способ 2: REST API MikroTik

Home Assistant может напрямую запрашивать данные с MikroTik через REST API:

[admin@MikroTik] >
# Убедитесь, что REST API включён
/ip/service set api-ssl disabled=no port=8729

# Создайте пользователя для Home Assistant
/user add name=homeassistant password=HASecure123 group=read

В Home Assistant configuration.yaml:

yaml
rest:
  - resource: "https://192.168.88.1/rest/interface/wifi/registration-table"
    verify_ssl: false
    authentication: basic
    username: homeassistant
    password: HASecure123
    scan_interval: 30
    sensor:
      - name: "MikroTik WiFi Clients"
        value_template: "{{ value_json | length }}"

Способ 3: Webhook из MikroTik в Home Assistant

MikroTik отправляет webhook при событиях, Home Assistant реагирует автоматизацией:

[admin@MikroTik] >
# Webhook при подключении нового устройства к Wi-Fi
/system/script add name=new-device-alert source={
  :local wifiClients [/interface/wifi/registration-table find]
  :foreach client in=$wifiClients do={
    :local mac [/interface/wifi/registration-table get $client mac-address]
    :local known [/ip/dhcp-server/lease find where mac-address=$mac comment~"known"]
    :if ([:len $known] = 0) do={
      # Неизвестное устройство — отправляем alert
      /tool/fetch url="http://192.168.88.50:8123/api/webhook/unknown-device" \
        http-method=post \
        http-data="{\"mac\":\"$mac\"}" \
        http-header-field="Content-Type: application/json" \
        output=none
    }
  }
}

Мониторинг IoT-устройств

Netwatch для мониторинга доступности

[admin@MikroTik] >
# Мониторим ключевые IoT-устройства
/tool/netwatch add host=192.168.20.10 interval=60s \
  comment="Smart Hub" \
  up-script="" \
  down-script={
    /log warning "Smart Hub is DOWN"
    /tool/fetch url="https://api.telegram.org/bot123:ABC/sendMessage" \
      http-method=post \
      http-data="chat_id=-100123&text=Smart Hub offline!" \
      output=none
  }

/tool/netwatch add host=192.168.20.20 interval=60s \
  comment="IP Camera" \
  down-script={
    /log warning "IP Camera is DOWN"
  }

Скрипт мониторинга аномального трафика IoT

[admin@MikroTik] >
/system/script add name=iot-traffic-monitor source={
  :local threshold 50000000
  # 50 МБ — аномальный порог для IoT за 5 минут

  :foreach i in=[/interface/bridge/host find where on-interface~"wifi-iot"] do={
    :local mac [/interface/bridge/host get $i mac-address]
    # Проверяем трафик через queue или torch
  }

  # Упрощённый вариант: проверка общего трафика IoT VLAN
  :local rxBytes [/interface get vlan20-iot rx-byte]
  :if ($rxBytes > $threshold) do={
    :log warning "IoT VLAN: anomalous traffic detected ($rxBytes bytes)"
    /iot/mqtt/publish broker=ha-mqtt topic="mikrotik/security/alert" \
      message="{\"type\":\"iot_anomaly\",\"bytes\":$rxBytes}"
  }
}

/system/scheduler add name=iot-monitor interval=5m \
  on-event="/system/script/run iot-traffic-monitor"

Безопасность IoT

WPA3 для IoT-сети

[admin@MikroTik] >
# Используем WPA3 для IoT SSID (если устройства поддерживают)
/interface/wifi/security set sec-iot \
  authentication-types=wpa3-psk \
  passphrase="IoTSecurePassword123"

# Если часть устройств не поддерживает WPA3 — используем transitional mode
/interface/wifi/security set sec-iot \
  authentication-types=wpa2-psk,wpa3-psk \
  passphrase="IoTSecurePassword123"

Ограничение доступа по MAC

[admin@MikroTik] >
# Access List для IoT SSID — только известные устройства
/interface/wifi/access-list add mac-address=11:22:33:44:55:66 \
  interface=wifi-iot action=accept comment="Smart Light"
/interface/wifi/access-list add mac-address=77:88:99:AA:BB:CC \
  interface=wifi-iot action=accept comment="Smart Plug"

# Запрет всех остальных
/interface/wifi/access-list add interface=wifi-iot action=reject \
  comment="Block unknown IoT devices"

Автоматическое обновление DNS-блокировок

Многие IoT-устройства отправляют телеметрию производителю. Блокируем нежелательные домены:

[admin@MikroTik] >
# Блокировка телеметрии IoT через DNS
/ip/dns/static add name="data.miio.com" type=A address=0.0.0.0 \
  comment="Block Xiaomi telemetry"
/ip/dns/static add name="ot.io.mi.com" type=A address=0.0.0.0 \
  comment="Block Xiaomi OTA telemetry"
/ip/dns/static add name="tracking.miui.com" type=A address=0.0.0.0 \
  comment="Block MIUI tracking"

Пример: полная настройка умного дома на MikroTik

Итоговая конфигурация для дома с hAP ax³, Home Assistant и IoT-устройствами:

[admin@MikroTik] >
# === 1. VLAN для IoT ===
/interface/vlan add interface=bridge name=vlan20-iot vlan-id=20
/ip/address add address=192.168.20.1/24 interface=vlan20-iot
/ip/pool add name=pool-iot ranges=192.168.20.10-192.168.20.254
/ip/dhcp-server add name=dhcp-iot interface=vlan20-iot \
  address-pool=pool-iot disabled=no
/ip/dhcp-server/network add address=192.168.20.0/24 \
  gateway=192.168.20.1 dns-server=192.168.20.1

# === 2. Wi-Fi для IoT ===
/interface/wifi/security add name=sec-iot \
  authentication-types=wpa2-psk,wpa3-psk \
  passphrase="IoTSecurePassword123"
/interface/wifi add name=wifi-iot master-interface=wifi1 \
  configuration.ssid="Home-IoT" security=sec-iot
/interface/bridge/vlan add bridge=bridge tagged=bridge,wifi-iot vlan-ids=20

# === 3. Firewall для IoT ===
/ip/firewall/filter add chain=forward src-address=192.168.20.0/24 \
  out-interface=ether1 action=accept comment="IoT to Internet"
/ip/firewall/filter add chain=forward src-address=192.168.20.0/24 \
  dst-address=192.168.88.50 dst-port=1883 protocol=tcp \
  action=accept comment="IoT to MQTT"
/ip/firewall/filter add chain=forward src-address=192.168.88.0/24 \
  dst-address=192.168.20.0/24 action=accept comment="LAN to IoT"
/ip/firewall/filter add chain=forward src-address=192.168.20.0/24 \
  dst-address=192.168.88.0/24 action=drop comment="Block IoT to LAN"

# === 4. NAT для IoT ===
/ip/firewall/nat add chain=srcnat src-address=192.168.20.0/24 \
  out-interface=ether1 action=masquerade

# === 5. MQTT ===
/iot/mqtt/brokers add name=ha-mqtt address=192.168.88.50 port=1883 \
  client-id="mikrotik" username=mqtt password=MqttSecure123

# === 6. Presence detection ===
:global presenceState "unknown"
:global lastSeenTime 0

# (скрипт presence-detection-v2 — см. выше)

/system/scheduler add name=presence-check interval=30s \
  on-event="/system/script/run presence-detection-v2"

# === 7. Мониторинг ===
/tool/netwatch add host=192.168.88.50 interval=60s \
  comment="Home Assistant" \
  down-script={/log error "Home Assistant is DOWN"}

/tool/netwatch add host=192.168.20.10 interval=60s \
  comment="Smart Hub" \
  down-script={/log warning "Smart Hub is DOWN"}

Проверка

Проверка presence detection

[admin@MikroTik] >
# Проверяем, что смартфон виден в Wi-Fi
/interface/wifi/registration-table print
# Ищем MAC-адрес смартфона

# Проверяем глобальную переменную состояния
:put $presenceState
# home или away

# Проверяем логи
/log print where message~"PRESENCE"
# PRESENCE: Someone arrived home
# PRESENCE: Everyone left

Проверка VLAN изоляции

[admin@MikroTik] >
# С IoT-устройства (192.168.20.x) пытаемся достучаться до LAN
# Должно быть заблокировано:
/ping 192.168.88.1 src-address=192.168.20.1
# timeout (если firewall настроен правильно — ICMP от IoT к роутеру заблокирован)

# Проверяем, что IoT имеет доступ в интернет
/ping 8.8.8.8 src-address=192.168.20.1
# Должен пинговаться

# Проверяем firewall counters
/ip/firewall/filter print stats where comment~"IoT"
# Смотрим счётчики пакетов — правила срабатывают

Проверка MQTT-интеграции

[admin@MikroTik] >
# Статус подключения к брокеру
/iot/mqtt/brokers print
# connected: yes

# Тестовая публикация
/iot/mqtt/publish broker=ha-mqtt topic="mikrotik/test" \
  message="{\"test\":\"hello\"}"

# В Home Assistant → Developer Tools → MQTT → Listen:
# Подписаться на mikrotik/# — сообщение должно появиться

Проверка мониторинга

[admin@MikroTik] >
# Статус netwatch
/tool/netwatch print
# Проверяем status: up для всех устройств

# Если устройство недоступно
# status: down, since: <время>

Типичные ошибки

1. Presence detection срабатывает ложно — статус "away" при нахождении дома

Причина: смартфон отключается от Wi-Fi для экономии энергии (sleep mode), или рандомизация MAC.

Решение:

[admin@MikroTik] >
# Увеличьте задержку перед статусом "away"
# В скрипте presence-detection-v2 измените awayDelay:
:local awayDelay 600
# 10 минут вместо 5

# Отключите рандомизацию MAC на смартфоне:
# iPhone: Настройки → Wi-Fi → (i) → Частный адрес Wi-Fi: выкл
# Android: Настройки → Wi-Fi → сеть → Privacy → Use device MAC

# Или используйте статический DHCP lease для привязки
/ip/dhcp-server/lease add address=192.168.88.10 \
  mac-address=AA:BB:CC:11:22:33 comment="iPhone"

2. IoT-устройства не подключаются к отдельному SSID

Причина: многие дешёвые IoT-устройства поддерживают только 2.4 ГГц и не работают с WPA3.

Решение:

[admin@MikroTik] >
# IoT SSID только на 2.4 ГГц
/interface/wifi set wifi-iot \
  configuration.ssid="Home-IoT" \
  channel.band=2ghz-ax

# Используем WPA2-PSK (без WPA3)
/interface/wifi/security set sec-iot \
  authentication-types=wpa2-psk \
  passphrase="IoTSecurePassword123"

3. Home Assistant не получает MQTT-сообщения от MikroTik

Причина: разные MQTT-брокеры, firewall блокирует, неверный topic.

Решение:

[admin@MikroTik] >
# Проверяем, что MikroTik подключён к тому же брокеру
/iot/mqtt/brokers print
# address: 192.168.88.50, port: 1883, connected: yes

# Проверяем firewall — не блокируется ли порт 1883
/ip/firewall/filter print where dst-port=1883

# Тестируем через MQTT Explorer или mosquitto_sub:
# mosquitto_sub -h 192.168.88.50 -t "mikrotik/#" -v
# Должны видеть сообщения от MikroTik

4. IoT-устройства из VLAN не обнаруживаются в приложении

Причина: приложение управления и IoT-устройство находятся в разных VLAN (подсетях). Многие IoT-приложения используют mDNS/SSDP для обнаружения, которые не проходят между VLAN.

Решение:

[admin@MikroTik] >
# Вариант 1: Разрешить multicast между VLAN (mDNS relay)
# RouterOS не имеет встроенного mDNS relay
# Используйте контейнер с avahi-daemon или mdns-reflector

# Вариант 2: Для первоначальной настройки подключите телефон к IoT SSID
# После настройки устройства управление обычно идёт через облако

# Вариант 3: На время настройки временно разрешите трафик между VLAN
/ip/firewall/filter add chain=forward src-address=192.168.88.0/24 \
  dst-address=192.168.20.0/24 action=accept \
  comment="TEMP: setup IoT devices"
# После настройки удалите это правило или отключите

5. Скрипт presence detection нагружает CPU

Причина: слишком частый запуск скрипта или сложная логика.

Решение:

[admin@MikroTik] >
# Увеличьте интервал с 30 секунд до 1 минуты
/system/scheduler set presence-check interval=1m

# Проверяем нагрузку CPU
/system/resource print
# Если cpu-load постоянно > 50% — упрощайте скрипты

# Оптимизация: проверяйте только один MAC (основной смартфон)
# вместо перебора массива

6. Webhook из MikroTik в Home Assistant — ошибка "connection refused"

Причина: Home Assistant недоступен, неверный IP/порт, или firewall блокирует.

Решение:

[admin@MikroTik] >
# Проверяем доступность Home Assistant
/ping 192.168.88.50 count=3
/tool/fetch url="http://192.168.88.50:8123" mode=http

# Проверяем, что webhook настроен в Home Assistant
# В automations.yaml должен быть trigger: webhook с соответствующим ID

# Проверяем, что MikroTik может делать HTTP-запросы
/tool/fetch url="http://httpbin.org/get" mode=http

Рекомендации по безопасности умного дома

  1. Регулярно обновляйте прошивки всех IoT-устройств
  2. Сильные пароли для Wi-Fi IoT-сети (минимум 16 символов)
  3. VLAN-изоляция обязательна — IoT-устройства не должны иметь доступа к основной сети
  4. Мониторинг трафика — аномальный трафик от IoT может указывать на компрометацию
  5. Минимум облачных зависимостей — предпочитайте локальное управление (Home Assistant + MQTT)
  6. Бэкап конфигурации MikroTik — все скрипты, firewall-правила, VLAN-настройки
[admin@MikroTik] >
┌─────────────────────────────────────────────┐
│              Интернет                        │
└──────────────┬──────────────────────────────┘
               │
┌──────────────┴──────────────────────────────┐
│         MikroTik (hAP ax³ / hAP be³)        │
│  ┌─────────────────────────────────────────┐ │
│  │ Wi-Fi: presence detection               │ │
│  │ VLAN 10: основная сеть (ПК, телефоны)  │ │
│  │ VLAN 20: IoT-устройства                │ │
│  │ VLAN 30: гостевая сеть                 │ │
│  │ MQTT: уведомления и управление         │ │
│  │ Scripts: автоматизация                 │ │
│  └─────────────────────────────────────────┘ │
└───┬──────────────┬───────────────┬──────────┘
    │ VLAN 10      │ VLAN 20       │ VLAN 30
┌───┴───┐    ┌─────┴─────┐   ┌────┴────┐
│ ПК,   │    │ Умные     │   │ Гости   │
│ Тел.  │    │ устройства│   │         │
└───────┘    └───────────┘   └─────────┘
                  │ MQTT
           ┌──────┴──────┐
           │Home Assistant│
           └─────────────┘
# Просмотр текущих DHCP-аренд
/ip/dhcp-server/lease print where status=bound
# Ищем MAC-адрес смартфона

# Фиксируем MAC-адрес нужного устройства
# iPhone: AA:BB:CC:11:22:33
# Android: DD:EE:FF:44:55:66
# Для Wi-Fi (wifiwave2 / wifi в RouterOS 7.20+)
/interface/wifi/registration-table print
# Показывает все подключённые Wi-Fi-клиенты с MAC-адресами

# Для устаревшего wireless
/interface/wireless/registration-table print
# Глобальные переменные для хранения состояния
:global presenceState "unknown"

/system/script add name=presence-detection source={
  :global presenceState

  # MAC-адреса смартфонов жильцов
  :local phones {"AA:BB:CC:11:22:33";"DD:EE:FF:44:55:66"}

  :local anyoneHome false

  :foreach phone in=$phones do={
    # Проверяем в Wi-Fi registration table
    :local found [/interface/wifi/registration-table find where mac-address=$phone]
    :if ([:len $found] > 0) do={
      :set anyoneHome true
    }
  }

  # Логика смены состояния
  :if ($anyoneHome && $presenceState != "home") do={
    :set presenceState "home"
    :log info "PRESENCE: Someone arrived home"

    # Действие: включить свет (MQTT)
    :do {
      /iot/mqtt/publish broker=mqtt1 \
        topic="home/arrival" message="{\"status\":\"home\"}"
    } on-error={:log warning "MQTT publish failed"}

    # Действие: отправить webhook в Home Assistant
    :do {
      /tool/fetch url="http://192.168.88.50:8123/api/webhook/person-arrived" \
        http-method=post output=none
    } on-error={:log warning "Webhook failed"}
  }

  :if (!$anyoneHome && $presenceState != "away") do={
    :set presenceState "away"
    :log info "PRESENCE: Everyone left"

    # Действие: выключить свет
    :do {
      /iot/mqtt/publish broker=mqtt1 \
        topic="home/departure" message="{\"status\":\"away\"}"
    } on-error={:log warning "MQTT publish failed"}

    # Действие: webhook — режим «ушёл»
    :do {
      /tool/fetch url="http://192.168.88.50:8123/api/webhook/person-left" \
        http-method=post output=none
    } on-error={:log warning "Webhook failed"}
  }
}

# Запуск скрипта каждые 30 секунд
/system/scheduler add name=presence-check interval=30s \
  on-event="/system/script/run presence-detection"
# Альтернатива: привязываем статический DHCP lease по реальному MAC
/ip/dhcp-server/lease add address=192.168.88.10 \
  mac-address=AA:BB:CC:11:22:33 comment="iPhone - Иван" \
  server=dhcp-home
:global presenceState "unknown"
:global lastSeenTime 0

/system/script add name=presence-detection-v2 source={
  :global presenceState
  :global lastSeenTime

  :local phones {"AA:BB:CC:11:22:33";"DD:EE:FF:44:55:66"}
  :local anyoneHome false
  :local awayDelay 300
  # Задержка 300 секунд (5 минут) перед статусом "away"

  :foreach phone in=$phones do={
    :local found [/interface/wifi/registration-table find where mac-address=$phone]
    :if ([:len $found] > 0) do={
      :set anyoneHome true
    }
  }

  :local currentTime [:tonum [/system/clock get time]]

  :if ($anyoneHome) do={
    :set lastSeenTime $currentTime
    :if ($presenceState != "home") do={
      :set presenceState "home"
      :log info "PRESENCE: Arrived home"
      /iot/mqtt/publish broker=mqtt1 topic="home/presence" \
        message="{\"status\":\"home\"}"
    }
  } else={
    :local elapsed ($currentTime - $lastSeenTime)
    :if ($elapsed > $awayDelay && $presenceState != "away") do={
      :set presenceState "away"
      :log info "PRESENCE: Left home (after 5 min delay)"
      /iot/mqtt/publish broker=mqtt1 topic="home/presence" \
        message="{\"status\":\"away\"}"
    }
  }
}
# Создаём VLAN для IoT
/interface/vlan add interface=bridge name=vlan20-iot vlan-id=20

# IP-адрес для IoT-сети
/ip/address add address=192.168.20.1/24 interface=vlan20-iot

# DHCP-сервер для IoT
/ip/pool add name=pool-iot ranges=192.168.20.10-192.168.20.254
/ip/dhcp-server add name=dhcp-iot interface=vlan20-iot \
  address-pool=pool-iot disabled=no
/ip/dhcp-server/network add address=192.168.20.0/24 \
  gateway=192.168.20.1 dns-server=192.168.20.1

# Отдельный SSID для IoT-устройств
/interface/wifi/security add name=sec-iot \
  authentication-types=wpa2-psk,wpa3-psk \
  passphrase="IoTSecurePassword123"

/interface/wifi add name=wifi-iot master-interface=wifi1 \
  configuration.ssid="Home-IoT" \
  security=sec-iot

# VLAN-tagging для IoT SSID
/interface/bridge/vlan add bridge=bridge tagged=bridge,wifi-iot vlan-ids=20
/interface/bridge/port set [find interface=wifi-iot] pvid=20
# Разрешаем IoT → Интернет
/ip/firewall/filter add chain=forward src-address=192.168.20.0/24 \
  out-interface=ether1 action=accept \
  comment="IoT to Internet"

# Разрешаем IoT → MQTT-брокер (Home Assistant)
/ip/firewall/filter add chain=forward src-address=192.168.20.0/24 \
  dst-address=192.168.88.50 dst-port=1883,8883 protocol=tcp \
  action=accept comment="IoT to MQTT broker"

# Разрешаем established/related от основной сети к IoT
# (чтобы можно было управлять IoT-устройствами из приложений)
/ip/firewall/filter add chain=forward src-address=192.168.88.0/24 \
  dst-address=192.168.20.0/24 action=accept \
  comment="LAN to IoT (management)"

# Блокируем IoT → основная сеть
/ip/firewall/filter add chain=forward src-address=192.168.20.0/24 \
  dst-address=192.168.88.0/24 action=drop \
  comment="Block IoT to LAN"

# Блокируем IoT → маршрутизатор (кроме DNS и DHCP)
/ip/firewall/filter add chain=input src-address=192.168.20.0/24 \
  protocol=udp dst-port=53,67 action=accept \
  comment="IoT DNS and DHCP"
/ip/firewall/filter add chain=input src-address=192.168.20.0/24 \
  action=drop comment="Block IoT to router"

# NAT для IoT
/ip/firewall/nat add chain=srcnat src-address=192.168.20.0/24 \
  out-interface=ether1 action=masquerade \
  comment="NAT for IoT VLAN"
# Маркировка IoT-трафика
/ip/firewall/mangle add chain=forward src-address=192.168.20.0/24 \
  action=mark-packet new-packet-mark=iot-traffic passthrough=yes \
  comment="Mark IoT traffic"

# Очередь для IoT (гарантированная полоса, низкий приоритет для bulk)
/queue/simple add name=iot-queue target=192.168.20.0/24 \
  max-limit=10M/10M limit-at=2M/2M priority=6/6 \
  comment="IoT bandwidth limit"
# Настройка MQTT-брокера на MikroTik
/iot/mqtt/brokers add name=ha-mqtt address=192.168.88.50 port=1883 \
  client-id="mikrotik-home" username=mqtt password=MqttSecure123

# Скрипт: отправка данных о подключённых устройствах
/system/script add name=ha-device-count source={
  :local wifiCount [/interface/wifi/registration-table print count-only]
  :local dhcpCount [/ip/dhcp-server/lease print count-only where status=bound]

  /iot/mqtt/publish broker=ha-mqtt \
    topic="mikrotik/network/stats" \
    message="{\"wifi_clients\":$wifiCount,\"dhcp_leases\":$dhcpCount}"
}

/system/scheduler add name=ha-stats interval=1m \
  on-event="/system/script/run ha-device-count"
##### Способ 2: REST API MikroTik

Home Assistant может напрямую запрашивать данные с MikroTik через REST API:
В Home Assistant `configuration.yaml`:
##### Способ 3: Webhook из MikroTik в Home Assistant

MikroTik отправляет webhook при событиях, Home Assistant реагирует автоматизацией:
#### Мониторинг IoT-устройств

##### Netwatch для мониторинга доступности
##### Скрипт мониторинга аномального трафика IoT
#### Безопасность IoT

##### WPA3 для IoT-сети
##### Ограничение доступа по MAC
##### Автоматическое обновление DNS-блокировок

Многие IoT-устройства отправляют телеметрию производителю. Блокируем нежелательные домены:
#### Пример: полная настройка умного дома на MikroTik

Итоговая конфигурация для дома с hAP ax³, Home Assistant и IoT-устройствами:
### Проверка

#### Проверка presence detection
#### Проверка VLAN изоляции
#### Проверка MQTT-интеграции
#### Проверка мониторинга
### Типичные ошибки

#### 1. Presence detection срабатывает ложно — статус "away" при нахождении дома

**Причина**: смартфон отключается от Wi-Fi для экономии энергии (sleep mode), или рандомизация MAC.

**Решение**:
#### 2. IoT-устройства не подключаются к отдельному SSID

**Причина**: многие дешёвые IoT-устройства поддерживают только 2.4 ГГц и не работают с WPA3.

**Решение**:
#### 3. Home Assistant не получает MQTT-сообщения от MikroTik

**Причина**: разные MQTT-брокеры, firewall блокирует, неверный topic.

**Решение**:
#### 4. IoT-устройства из VLAN не обнаруживаются в приложении

**Причина**: приложение управления и IoT-устройство находятся в разных VLAN (подсетях). Многие IoT-приложения используют mDNS/SSDP для обнаружения, которые не проходят между VLAN.

**Решение**:
#### 5. Скрипт presence detection нагружает CPU

**Причина**: слишком частый запуск скрипта или сложная логика.

**Решение**:
#### 6. Webhook из MikroTik в Home Assistant — ошибка "connection refused"

**Причина**: Home Assistant недоступен, неверный IP/порт, или firewall блокирует.

**Решение**:
IoT / MikroTik для умного дома — presence detection