Skip to content

linuxxp/Mikrotik_RPI

Repository files navigation

Network Monitor

Приложение за мониторинг на мрежови устройства за Raspberry Pi. Проверява свързаността до критични устройства в мрежата (рутер, IPTV, LoRa gateway) и логва проблемите.

Описание на мрежата

Mikrotik Hex S Router (192.168.10.1)
├── Port 3: Raspberry Pi 4 (Network Monitor)
└── Port 2: Switch 1
    ├── Устройства
    └── Switch 2
        ├── IPTV 1 (192.168.10.131)
        └── IPTV 2 (192.168.10.132)

Допълнителни устройства:
- LoRa Gateway 1: 192.168.10.110
- LoRa Gateway 2: 192.168.10.111

Функционалности

Основни

  • ✅ ICMP Ping проверка на всички устройства
  • ✅ TCP проверка на критични портове (за IPTV)
  • ✅ Измерване на latency и packet loss
  • ✅ Детайлно логване с timestamps
  • ✅ Статистика за uptime на устройствата
  • ✅ Автоматично стартиране при ребут (systemd service)
  • ✅ Конфигуриране чрез JSON файл

Нови функции

  • 📱 Telegram нотификации - Instant алерти при проблеми
  • 🌐 Web Dashboard - Real-time визуализация на статуса
  • 📊 Дневни reports - Автоматични обобщения всяка сутрин
  • ⚠️ Smart алерти - Високо latency, packet loss, TCP портове
  • ⚙️ Per-device настройки - Индивидуални интервали и прагове за всяко устройство
  • 💻 Pi System Monitoring - CPU, RAM, Disk и Network мониторинг на Raspberry Pi
  • 🔍 Network Discovery - ARP scan за откриване на устройства в мрежата
  • 📈 Latency графики - Real-time Chart.js визуализация
  • 🎨 Font Awesome икони - Модерен UI без emoji проблеми
  • ✏️ Web Config Editor - Редактиране на конфигурацията през браузъра

Технологии

  • Език: Python 3.6+
  • Зависимости: Flask, requests (за Telegram и Dashboard)
  • Платформа: Raspberry Pi (Raspbian/Raspberry Pi OS)
  • Web Framework: Flask (за dashboard)
  • Нотификации: Telegram Bot API

Инсталация

Метод 1: Автоматична инсталация (препоръчителен)

# 1. Клониране на repo
cd ~
git clone <repo-url> network-monitor
cd network-monitor

# 2. Даване на права за изпълнение
chmod +x install.sh

# 3. Инсталация
sudo ./install.sh

Забележка: Скриптът автоматично инсталира всички зависимости като системни Debian пакети (python3-flask, python3-requests, python3-psutil). Няма нужда от virtual environment или pip install.

Метод 2: Ръчна инсталация

# 1. Инсталиране на системни Python пакети
sudo apt-get update
sudo apt-get install -y python3-flask python3-requests

# 2. Създаване на директория
mkdir -p ~/network-monitor
cd ~/network-monitor

# 3. Копиране на файлове
cp /path/to/network_monitor.py .
cp /path/to/telegram_notifier.py .
cp /path/to/web_dashboard.py .
cp /path/to/config.json .
cp -r /path/to/templates .

# 4. Създаване на директория за логове
mkdir -p logs

# 5. Даване на права за изпълнение
chmod +x network_monitor.py

# 6. Тестване
python3 network_monitor.py --test

Конфигурация

Редактирайте config.json за настройка на параметрите:

{
  "check_interval": 60,        // Интервал между проверките (секунди)
  "stats_interval": 3600,      // Интервал за показване на статистика (секунди)
  "logging": {
    "directory": "logs",
    "filename": "network_monitor.log"
  },
  "devices": [
    {
      "name": "IPTV 1",
      "ip": "192.168.10.131",
      "type": "iptv",
      "tcp_ports": [80, 554, 8080]  // Портове за TCP проверка
    }
    // ... други устройства
  ]
}

Типове устройства

  • router - Мрежови рутер
  • iptv - IPTV устройство (с TCP проверка на портове)
  • gateway - LoRa gateway или други gateway устройства
  • generic - Обикновено устройство

Използване

Тестова проверка (еднократна)

cd ~/network-monitor
python3 network_monitor.py --test

Ръчно стартиране

cd ~/network-monitor
python3 network_monitor.py

Спиране: Ctrl+C

Стартиране като service (автоматично при ребут)

# Активиране на service
sudo systemctl enable network-monitor

# Стартиране на service
sudo systemctl start network-monitor

# Проверка на статуса
sudo systemctl status network-monitor

# Спиране на service
sudo systemctl stop network-monitor

# Деактивиране на service
sudo systemctl disable network-monitor

Преглед на логове

Логове от приложението

# В реално време
tail -f ~/network-monitor/logs/network_monitor.log

# Последните 50 реда
tail -n 50 ~/network-monitor/logs/network_monitor.log

# Търсене на грешки
grep "ERROR" ~/network-monitor/logs/network_monitor.log

Системни логове (journalctl)

# В реално време
sudo journalctl -u network-monitor -f

# Последните 100 реда
sudo journalctl -u network-monitor -n 100

# Логове от днес
sudo journalctl -u network-monitor --since today

# Логове от последния час
sudo journalctl -u network-monitor --since "1 hour ago"

Примерен изход

2025-11-16 14:30:01,234 - INFO - === Network Monitor стартиран ===
2025-11-16 14:30:01,235 - INFO - Мониторингът работи с интервал 60 секунди
2025-11-16 14:30:01,236 - INFO - Започвам проверка на 5 устройства...
2025-11-16 14:30:01,456 - INFO - ✓ Mikrotik Router (192.168.10.1) - ONLINE [latency: 1.2ms, loss: 0%]
2025-11-16 14:30:02,123 - INFO - ✓ IPTV 1 (192.168.10.131) - ONLINE [latency: 3.4ms, loss: 0%]
2025-11-16 14:30:02,789 - INFO - ✓ IPTV 2 (192.168.10.132) - ONLINE [latency: 3.1ms, loss: 0%]
2025-11-16 14:30:03,234 - ERROR - ✗ LoRa Gateway 1 (192.168.10.110) - OFFLINE
2025-11-16 14:30:03,890 - INFO - ✓ LoRa Gateway 2 (192.168.10.111) - ONLINE [latency: 2.8ms, loss: 0%]

Web Dashboard

Достъп до Dashboard

След стартиране на монитора, отворете браузър и отидете на:

http://<raspberry-pi-ip>:5000

Например:

  • От Raspberry Pi: http://localhost:5000
  • От друг компютър: http://192.168.10.X:5000

Функции на Dashboard

  • 📊 Real-time статус - Автоматично опресняване на всеки 30 секунди
  • 🟢/🔴 Визуален индикатор - Моментален статус на всички устройства
  • 📈 Uptime графики - Визуализация на надеждността
  • Latency мониторинг - Следене на времето за отговор
  • 📱 Responsive дизайн - Работи на телефон, таблет, компютър

Конфигурация на Dashboard

В config.json:

{
  "dashboard": {
    "enabled": true,
    "host": "0.0.0.0",    // 0.0.0.0 = достъпен от цялата мрежа
    "port": 5000
  }
}

Забележка: Ако искате достъп само от Raspberry Pi, сменете host на 127.0.0.1

Деактивиране на Dashboard

{
  "dashboard": {
    "enabled": false
  }
}

Telegram Нотификации

Първоначална настройка

Детайлни инструкции: Вижте TELEGRAM_SETUP.md

Бързи стъпки:

  1. Създайте Telegram Bot:

    • Отворете @BotFather в Telegram
    • Изпратете /newbot
    • Следвайте инструкциите
    • Запазете Bot Token
  2. Вземете Chat ID:

    • Отворете @userinfobot
    • Натиснете /start
    • Запазете вашия Chat ID
  3. Конфигурирайте config.json:

    {
      "telegram": {
        "enabled": true,
        "bot_token": "1234567890:ABCdefGHIjklMNOpqrsTUVwxyz",
        "chat_id": "123456789",
        "daily_report_time": "08:00"
      }
    }
  4. Рестартирайте монитора:

    sudo systemctl restart network-monitor

Какви нотификации получавате

🚀 Startup съобщение

При стартиране на монитора получавате потвърждение.

⚠️ Устройство Offline

Веднага при падане на устройство:

⚠️ УСТРОЙСТВО OFFLINE
📛 IPTV 1
🌐 IP: 192.168.10.131

✅ Устройство Възстановено

При възстановяване:

✅ УСТРОЙСТВО ВЪЗСТАНОВЕНО
📛 IPTV 1
⏱ Downtime: 5 минути

📺 IPTV Специален Алерт

При проблем с IPTV:

📺 IPTV ПРОБЛЕМ!
⚠️ IPTV устройството е offline!
🔧 Проверете устройството

🐌 Високо Latency

При забавяне на мрежата:

🐌 ВИСОКО LATENCY
📊 Latency: 125ms (праг: 100ms)

📉 Packet Loss

При загуба на пакети:

📉 PACKET LOSS
📊 Packet Loss: 15%

📊 Дневен Report

Всяка сутрин в 8:00 (конфигурируемо):

📊 ДНЕВЕН REPORT

🟢 Mikrotik Router
   └ Uptime: 100.0%
🟢 IPTV 1
   └ Uptime: 99.8%

Конфигурация на Алертите

В config.json:

{
  "alerts": {
    "latency_threshold": 100,        // Праг за latency в ms
    "packet_loss_threshold": 10      // Праг за packet loss в %
  }
}

Деактивиране на Telegram

{
  "telegram": {
    "enabled": false
  }
}

Per-Device Настройки

Възможности

Всяко устройство може да има свои собствени настройки:

  • check_interval: Интервал между проверките (в секунди)
  • latency_threshold: Праг за latency алерти (в ms)
  • packet_loss_threshold: Праг за packet loss алерти (в %)
  • priority: Приоритет на устройството (critical, high, normal, low)

Примерна конфигурация

{
  "devices": [
    {
      "name": "Mikrotik Router",
      "ip": "192.168.10.1",
      "type": "router",
      "priority": "critical",
      "check_interval": 30,
      "latency_threshold": 50,
      "packet_loss_threshold": 5
    },
    {
      "name": "IPTV 1",
      "ip": "192.168.10.131",
      "type": "iptv",
      "priority": "high"
    },
    {
      "name": "LoRa Gateway 1",
      "ip": "192.168.10.110",
      "type": "gateway",
      "priority": "normal",
      "check_interval": 120
    }
  ]
}

Поведение

  • Устройства с по-малък check_interval се проверяват по-често
  • Критични устройства (priority: critical) получават специални алерти
  • Глобалните настройки от alerts се използват ако няма per-device настройка
  • Dashboard показва приоритета и интервала на всяко устройство

Raspberry Pi System Monitoring

Функции

Network Monitor автоматично следи състоянието на Raspberry Pi:

  • CPU Usage: Процентно използване на процесора
  • CPU Temperature: Температура на процесора (°C)
  • RAM Usage: Използвана памет (MB и %)
  • Disk Usage: Използвано дисково пространство (GB и %)
  • Network Traffic: Upload/Download статистика

Алерти

При критични проблеми получавате Telegram алерти:

  • ⚠️ CPU използване > 90%
  • 🔥 CPU температура > 80°C (critical > 85°C)
  • 💾 RAM използване > 90%
  • 📀 Disk пространство > 90%

Визуализация

Dashboard показва Pi статистика в реално време:

  • Цветни индикатори (зелено/жълто/червено)
  • Auto-refresh на всеки 60 секунди
  • Предупреждения при проблеми

Network Discovery

Функции

Откриване на устройства в локалната мрежа чрез ARP scan:

  • Автоматично определяне на локална мрежа
  • Сканиране с множество методи (arp-scan, fping, ping)
  • Reverse DNS за hostname lookup
  • Сравнение с конфигурирани устройства

Използване

От Web Dashboard

  1. Отворете Dashboard: http://<raspberry-pi-ip>:5000
  2. Натиснете бутон "Device Discovery"
  3. Натиснете "Сканиране на мрежата"
  4. Изчакайте 30-60 секунди за резултатите

Резултати

Discovery показва:

  • Конфигурирани устройства (зелено) - Открити и в config.json
  • Нови устройства (синьо) - Открити но не конфигурирани
  • ⚠️ Липсващи устройства (червено) - В config.json но не открити

За всяко устройство виждате:

  • IP адрес
  • MAC адрес
  • Hostname (ако е достъпен)
  • Статус

Необходими пакети

За оптимална производителност:

sudo apt-get install fping arp-scan

Забележка: Без тези пакети discovery работи, но по-бавно.

Web Config Editor

Функции

Редактиране на config.json директно през браузъра без да се свързвате по SSH.

Възможности:

  • Редактиране на цялата конфигурация в textarea
  • Real-time JSON валидация
  • Автоматично създаване на backup преди запазване
  • Бутон за форматиране на JSON
  • Проверка на задължителни полета
  • Бутон за рестарт на service без SSH - едно натискане за apply промените!

Използване

  1. Отворете Dashboard: http://<raspberry-pi-ip>:5000
  2. Натиснете бутон "Конфигурация"
  3. Редактирайте JSON конфигурацията
  4. Натиснете "Запази промените"
  5. Натиснете "Рестартирай Service" (или ръчно: sudo systemctl restart network-monitor)

Бутонът за рестарт:

  • Рестартира service автоматично без SSH
  • Confirmation dialog преди рестартиране
  • Auto-reload на страницата след 3 секунди
  • Не изисква парола (конфигурирано автоматично от install.sh)

Валидация

Config Editor автоматично проверява:

  • ✅ Валиден JSON синтаксис
  • ✅ Задължителни полета (check_interval, devices)
  • ✅ Всяко устройство има name и ip
  • ✅ Създава config.json.backup преди запазване

Безопасност

ВАЖНО: Config Editor позволява редактиране на Telegram credentials (bot_token, chat_id). Уверете се, че Dashboard-ът не е публично достъпен.

Препоръки:

  • Не излагайте порт 5000 към интернет
  • Използвайте само в локална мрежа
  • Разгледайте добавяне на authentication ако е необходимо

Отстраняване на проблеми

Грешка "externally-managed-environment" при инсталация

Този проблем е решен!

Приложението вече използва системни Debian пакети вместо pip:

  • python3-flask
  • python3-requests

Това е официалният и препоръчителен начин за инсталация на Raspberry Pi OS Bookworm (и по-нови версии).

Инсталирани зависимости:

  • python3-flask - Web dashboard
  • python3-requests - Telegram нотификации
  • python3-psutil - Pi system monitoring
  • fping, arp-scan (опционални) - Network discovery

Предимства:

  • ✅ Няма нужда от virtual environment
  • ✅ Няма нужда от pip или --break-system-packages
  • ✅ Автоматични обновления през apt
  • ✅ По-бърза инсталация
  • ✅ Стабилни, тествани версии

Ако вече имате инсталирано със стар метод:

cd ~/network-monitor
git pull
sudo ./install.sh  # Ще инсталира системните пакети автоматично

Приложението не стартира

# Проверка на Python версията
python3 --version  # Трябва да е >= 3.6

# Проверка на правата
ls -l ~/network-monitor/network_monitor.py

# Тестово стартиране с verbose изход
cd ~/network-monitor
python3 network_monitor.py --test

Service не стартира

# Проверка на статуса
sudo systemctl status network-monitor

# Проверка на грешките
sudo journalctl -u network-monitor -n 50

# Презареждане на service файла
sudo systemctl daemon-reload
sudo systemctl restart network-monitor

Ping не работи

Ако получавате грешка "Operation not permitted":

# Даване на права за ping без root
sudo setcap cap_net_raw+ep /usr/bin/python3.x
# или просто стартирайте service-а, който вече работи с правилни права

Разширяване

Добавяне на ново устройство

Редактирайте config.json:

{
  "name": "Ново устройство",
  "ip": "192.168.10.XXX",
  "type": "generic"
}

Добавяне на Email нотификации

В бъдеща версия може да се добави изпращане на email при проблеми. Мястото за добавяне е в метода monitor_all_devices().

Добавяне на Telegram нотификации

Може да се интегрира Telegram Bot API за изпращане на съобщения при проблеми.

Уеб интерфейс

Може да се добави Flask уеб интерфейс за визуализация на статуса в реално време.

Допълнителни команди

Промяна на интервала на проверка

Редактирайте config.json:

{
  "check_interval": 30  // Проверка на всеки 30 секунди
}

Рестартиране на service след промени

sudo systemctl restart network-monitor

Лиценз

MIT

Автор

Създадено за мониторинг на домашна мрежа с Mikrotik Hex S и Raspberry Pi 4.

Поддръжка

При проблеми или въпроси, моля отворете issue в GitHub repo-то.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published