Приложение за мониторинг на мрежови устройства за 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. Клониране на 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.
# 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 --testcd ~/network-monitor
python3 network_monitor.pyСпиране: Ctrl+C
# Активиране на 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# В реално време
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%]
След стартиране на монитора, отворете браузър и отидете на:
http://<raspberry-pi-ip>:5000
Например:
- От Raspberry Pi:
http://localhost:5000 - От друг компютър:
http://192.168.10.X:5000
- 📊 Real-time статус - Автоматично опресняване на всеки 30 секунди
- 🟢/🔴 Визуален индикатор - Моментален статус на всички устройства
- 📈 Uptime графики - Визуализация на надеждността
- ⚡ Latency мониторинг - Следене на времето за отговор
- 📱 Responsive дизайн - Работи на телефон, таблет, компютър
В config.json:
{
"dashboard": {
"enabled": true,
"host": "0.0.0.0", // 0.0.0.0 = достъпен от цялата мрежа
"port": 5000
}
}Забележка: Ако искате достъп само от Raspberry Pi, сменете host на 127.0.0.1
{
"dashboard": {
"enabled": false
}
}Детайлни инструкции: Вижте TELEGRAM_SETUP.md
Бързи стъпки:
-
Създайте Telegram Bot:
- Отворете
@BotFatherв Telegram - Изпратете
/newbot - Следвайте инструкциите
- Запазете Bot Token
- Отворете
-
Вземете Chat ID:
- Отворете
@userinfobot - Натиснете
/start - Запазете вашия Chat ID
- Отворете
-
Конфигурирайте
config.json:{ "telegram": { "enabled": true, "bot_token": "1234567890:ABCdefGHIjklMNOpqrsTUVwxyz", "chat_id": "123456789", "daily_report_time": "08:00" } } -
Рестартирайте монитора:
sudo systemctl restart network-monitor
При стартиране на монитора получавате потвърждение.
Веднага при падане на устройство:
⚠️ УСТРОЙСТВО OFFLINE
📛 IPTV 1
🌐 IP: 192.168.10.131
При възстановяване:
✅ УСТРОЙСТВО ВЪЗСТАНОВЕНО
📛 IPTV 1
⏱ Downtime: 5 минути
При проблем с IPTV:
📺 IPTV ПРОБЛЕМ!
⚠️ IPTV устройството е offline!
🔧 Проверете устройството
При забавяне на мрежата:
🐌 ВИСОКО LATENCY
📊 Latency: 125ms (праг: 100ms)
При загуба на пакети:
📉 PACKET LOSS
📊 Packet Loss: 15%
Всяка сутрин в 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": {
"enabled": false
}
}Всяко устройство може да има свои собствени настройки:
- 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 показва приоритета и интервала на всяко устройство
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 секунди
- Предупреждения при проблеми
Откриване на устройства в локалната мрежа чрез ARP scan:
- Автоматично определяне на локална мрежа
- Сканиране с множество методи (arp-scan, fping, ping)
- Reverse DNS за hostname lookup
- Сравнение с конфигурирани устройства
- Отворете Dashboard:
http://<raspberry-pi-ip>:5000 - Натиснете бутон "Device Discovery"
- Натиснете "Сканиране на мрежата"
- Изчакайте 30-60 секунди за резултатите
Discovery показва:
- ✅ Конфигурирани устройства (зелено) - Открити и в config.json
- ⭐ Нови устройства (синьо) - Открити но не конфигурирани
⚠️ Липсващи устройства (червено) - В config.json но не открити
За всяко устройство виждате:
- IP адрес
- MAC адрес
- Hostname (ако е достъпен)
- Статус
За оптимална производителност:
sudo apt-get install fping arp-scanЗабележка: Без тези пакети discovery работи, но по-бавно.
Редактиране на config.json директно през браузъра без да се свързвате по SSH.
Възможности:
- Редактиране на цялата конфигурация в textarea
- Real-time JSON валидация
- Автоматично създаване на backup преди запазване
- Бутон за форматиране на JSON
- Проверка на задължителни полета
- Бутон за рестарт на service без SSH - едно натискане за apply промените!
- Отворете Dashboard:
http://<raspberry-pi-ip>:5000 - Натиснете бутон "Конфигурация"
- Редактирайте JSON конфигурацията
- Натиснете "Запази промените"
- Натиснете "Рестартирай 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 ако е необходимо
Този проблем е решен!
Приложението вече използва системни Debian пакети вместо pip:
python3-flaskpython3-requests
Това е официалният и препоръчителен начин за инсталация на Raspberry Pi OS Bookworm (и по-нови версии).
Инсталирани зависимости:
python3-flask- Web dashboardpython3-requests- Telegram нотификацииpython3-psutil- Pi system monitoringfping,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# Проверка на статуса
sudo systemctl status network-monitor
# Проверка на грешките
sudo journalctl -u network-monitor -n 50
# Презареждане на service файла
sudo systemctl daemon-reload
sudo systemctl restart network-monitorАко получавате грешка "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 при проблеми. Мястото за добавяне е в метода monitor_all_devices().
Може да се интегрира Telegram Bot API за изпращане на съобщения при проблеми.
Може да се добави Flask уеб интерфейс за визуализация на статуса в реално време.
Редактирайте config.json:
{
"check_interval": 30 // Проверка на всеки 30 секунди
}sudo systemctl restart network-monitorMIT
Създадено за мониторинг на домашна мрежа с Mikrotik Hex S и Raspberry Pi 4.
При проблеми или въпроси, моля отворете issue в GitHub repo-то.