Анализ системы RealIoT на Raspberry Pi CM4

Дата анализа: 9 января 2026
Система: Raspberry Pi CM4, 4GB RAM, eMMC 32GB
ОС: Ubuntu 20.04 LTS (Linux 5.4.0-1122-raspi)
Hostname: realiot / realiot-1 (mDNS)


📊 Сводная информация

Аппаратное обеспечение

Сетевая конфигурация


🚀 Активные процессы (топ по памяти)

Процесс Пользователь %MEM Память Описание
tsserver ubuntu 16.1% 627 MB TypeScript Language Server (Cursor IDE)
cursor-server ubuntu 10.8% 420 MB Cursor IDE Extension Host
node server.js ubuntu 5.7% 223 MB RealIoT Web Server (основной)
mongod systemd+ 2.6% 103 MB MongoDB 4.0 (в Docker)
zigbee2mqtt zigbee2mqtt 2.6% 103 MB Zigbee2MQTT мост
dockerd root 1.8% 71 MB Docker daemon
realiot-ble.py root 0.4% 18 MB RealIoT BLE Server
chirpstack chirpstack 0.3% 12 MB ChirpStack LoRaWAN сервер
chirpstack-gateway-bridge root 0.3% 14 MB ChirpStack Gateway Bridge
postgres postgres 0.4% 27 MB PostgreSQL 12 (для ChirpStack)

🔧 Системные сервисы

Активные сервисы проекта RealIoT

Сервис Статус Описание
realiot-web.service ✅ running RealIoT Web Server (Node.js на порту 5000)
zigbee2mqtt.service ✅ running Zigbee2MQTT (веб-интерфейс на порту 8080)
realiot-ble.service ✅ running RealIoT BLE Server (Python)
mosquitto.service ✅ running Mosquitto MQTT Broker (порт 1883)
avahi-daemon.service ✅ running Avahi mDNS/DNS-SD
chirpstack.service ✅ running ChirpStack LoRaWAN Network Server (порт 8082)
chirpstack-gateway-bridge.service ✅ running ChirpStack Gateway Bridge
chirpstack-concentratord.service ✅ running ChirpStack Concentratord
redis-server.service ✅ running Redis (порт 6379, localhost)
postgresql@12-main.service ✅ running PostgreSQL 12 (порт 5432, localhost)
docker.service ✅ running Docker (MongoDB в контейнере)
wifi-autoconnect.service ✅ loaded WiFi Auto-connect

Неактивные/отключенные сервисы

Сервис Статус Описание
realiot-support-tunnel.service ⚪ inactive SSH туннель для техподдержки (autossh)
realiot-reboot-log.service ⚪ inactive Логирование причин перезагрузки
ble-cputemp.service ❌ failed BLE CPU Temperature Server
ble-server.service ❌ failed BLE GATT Server

📦 Установленное ПО

Runtime окружение

Компонент Версия
Node.js v18.20.8
npm 10.8.2
Python 3 3.8.10 (основной), 3.9.22 (дополнительный)
Git 2.25.1

Базы данных

БД Версия Порт Расположение
MongoDB 4.0 27017 Docker контейнер
PostgreSQL 12.22 5432 Системная установка
Redis 5.0.7 6379 Системная установка

MQTT и IoT

Компонент Версия Порт Описание
Mosquitto 1.6.9 1883 MQTT Broker
Zigbee2MQTT (установлен из git) 8080 Zigbee мост
ChirpStack (установлен) 8082 LoRaWAN Network Server
chip-tool v1.5.0.1 - Matter commissioning tool (snap)

Node.js зависимости проекта (основные)

Пакет Версия Назначение
express 4.21.1 Web фреймворк
socket.io 4.8.1 WebSocket коммуникация
mongoose 8.8.1 MongoDB ORM
mqtt 5.10.2 MQTT клиент
@matter/main 0.15.6 Matter протокол
@matter/nodejs 0.15.6 Matter для Node.js
node-red 4.1.1 Визуальное программирование
node-red-contrib-modbus 5.45.2 Modbus для Node-RED
axios 1.8.4 HTTP клиент
jsonwebtoken 9.0.2 JWT аутентификация
bcryptjs 2.4.3 Хеширование паролей
nodemailer 6.9.16 Отправка email
node-cron 4.2.0 Планировщик задач

Системные пакеты (ключевые)

Всего установлено системных пакетов: 779


🌐 Открытые порты и сервисы

Порт Протокол Процесс Описание
5000 TCP node (server.js) RealIoT Web Server (HTTP)
8080 TCP node (zigbee2mqtt) Zigbee2MQTT веб-интерфейс
8082 TCP chirpstack ChirpStack API
1883 TCP mosquitto MQTT Broker
27017 TCP docker-proxy MongoDB
5432 TCP postgres PostgreSQL
6379 TCP redis-server Redis (localhost)
22 TCP sshd SSH Server
53 UDP systemd-resolved DNS resolver
34639 TCP node (cursor) Cursor IDE server
38225 TCP node (cursor) Cursor multiplex server

📂 Структура директорий проекта

Основные директории в /opt

Директория Размер Описание
/opt/realiot-web 1.9 GB Основной проект (Node.js + Frontend)
/opt/zigbee2mqtt 787 MB Zigbee2MQTT установка
/opt/realiot-ble 57 MB BLE сервер (Python)
/opt/chirpstack 41 MB ChirpStack сервер
/opt/chirpstack-gateway-bridge 13 MB ChirpStack Gateway Bridge
/opt/chirpstack-concentratord 5.2 MB ChirpStack Concentratord

Конфигурационные файлы проекта

/opt/realiot-web/
├── .env                              # Переменные окружения
├── server.js                         # Основной сервер
├── package.json                      # Node.js зависимости
├── certificate.crt + private.key     # SSL сертификаты
├── config/
│   ├── cameras.json                  # Конфигурация камер
│   ├── db.js                         # Конфигурация MongoDB
│   └── virtualActuators.js           # Виртуальные актуаторы
├── zigbee2mqtt-config.yaml           # Конфиг Zigbee2MQTT
├── avahi-daemon.conf.updated         # Конфиг mDNS
├── 99-wifi-config.yaml               # Конфиг WiFi
├── wifi-autoconnect.service          # systemd сервис WiFi
├── wifi-autoconnect.sh               # Скрипт автоподключения WiFi
├── deploy.sh                         # Скрипт деплоя
├── matter_commission.sh              # Matter commissioning
├── setup-zigbee.sh                   # Установка Zigbee2MQTT
├── setup-wifi-mdns.sh                # Настройка WiFi и mDNS
├── scripts/
│   ├── update_service.sh             # OTA обновление
│   ├── rollback_service.sh           # Откат обновления
│   └── reboot_reason_logger.sh       # Логирование перезагрузок
├── frontend/                         # React приложение
├── build/                            # Собранный frontend
├── node-red-data/                    # Данные Node-RED
├── public/                           # 19 JSON файлов
├── routes/                           # 10 JS файлов маршрутов
├── controllers/                      # Контроллеры
├── models/                           # 5 Mongoose моделей
├── middleware/                       # authMiddleware, roleMiddleware
├── utils/                            # 20 утилит
└── node_modules/                     # 8662 файла зависимостей

Системные конфигурационные файлы

/etc/systemd/system/
├── realiot-web.service               # Основной веб-сервис
├── zigbee2mqtt.service               # Zigbee2MQTT
├── realiot-ble.service               # BLE сервер
├── realiot-support-tunnel.service    # SSH туннель
├── realiot-reboot-log.service        # Лог перезагрузок
├── chirpstack.service                # ChirpStack
├── chirpstack-gateway-bridge.service
└── chirpstack-concentratord.service

/etc/
├── avahi/avahi-daemon.conf           # mDNS конфигурация
├── netplan/99-wifi-config.yaml       # WiFi конфигурация
├── mosquitto/mosquitto.conf          # MQTT брокер
├── chirpstack/chirpstack.toml        # ChirpStack конфиг
└── postgresql/12/main/postgresql.conf

/opt/zigbee2mqtt/data/
└── configuration.yaml                # Zigbee2MQTT конфигурация

/opt/realiot-ble/
├── server_name.txt                   # Имя сервера (realiot-1)
├── realiot-ble/realiot-ble.py        # Основной BLE сервер
├── handle_commission.py              # Matter commissioning handler
├── matter_file_watcher.py            # Matter file watcher
├── requirements.txt                  # Python зависимости
└── venv/                             # Python virtual environment

🔌 Протоколы IoT

Протокол Реализация Порт/Интерфейс Топики MQTT
WiFi MQTT 1883 realiot/data, realiot/command
Zigbee zigbee2mqtt /dev/ttyUSB0 zigbee2mqtt/#
Matter @matter/nodejs BLE + Thread matter/+
LoRaWAN ChirpStack 8082 application/+/#
Modbus Node-RED - через Node-RED
BLE realiot-ble.py Bluetooth -

🐳 Docker контейнеры

Контейнер Образ Статус Порты Создан
mongodb mongo:4.0 Up 19 months 27017:27017 8 months ago

Примечание: MongoDB работает в Docker контейнере, но был создан 8 месяцев назад и работает уже 19 месяцев (судя по статусу).


🔐 Переменные окружения (.env)

# MongoDB
MONGO_URI_DATA=mongodb://localhost:27017/devicedata
MONGO_URI_CONFIG=mongodb://localhost:27017/realiotdata

# Server
PORT=5000
MQTT_BROKER_URL=mqtt://localhost:1883

# Global Server
GLOBAL_CLIENT_URL=https://realiot.ru:8443
GLOBAL_SERVER_SOCKET=https://realiot.ru:8443

# Email
EMAIL_USER=data@realiot.ru
SMTP_HOST=mail.nic.ru
SMTP_PORT=465

# SMS & Telegram
SMSRU_API_ID=B64A9564-88C6-87E5-7882-09E78D50FDA8
TELEGRAM_BOT_TOKEN=8445024061:AAGtfMI8P9XiqUore8QW8xx09YlsUt3d2Bw
TELEGRAM_DEFAULT_CHAT_ID=199806414

🔧 Конфигурация сервиса realiot-web

[Unit]
Description=RealIoT Web Server (Optimized)
After=network-online.target docker.service chirpstack.service
Requires=network-online.target docker.service chirpstack.service

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/opt/realiot-web
ExecStartPre=/bin/sleep 30
ExecStart=/usr/bin/node --max-old-space-size=1536 /opt/realiot-web/server.js
Restart=always
RestartSec=10
Environment=NODE_ENV=production
EnvironmentFile=/opt/realiot-web/.env

# Логи
StandardOutput=append:/var/log/realiot-web.log
StandardError=append:/var/log/realiot-web.err

# Ограничения для Raspberry Pi CM4 4GB
MemoryMax=2G
MemoryHigh=1800M
CPUQuota=150%

[Install]
WantedBy=multi-user.target

🔌 SSH Туннель для техподдержки

Сервис: realiot-support-tunnel.service (inactive)
Команда: autossh к серверу 109.70.24.215
Порт: Reverse tunnel 22300 → localhost:22
Назначение: Удаленный доступ для техподдержки

autossh -M 0 -N \
  -o "ServerAliveInterval 30" \
  -o "ServerAliveCountMax 3" \
  -R 22300:localhost:22 \
  vic@109.70.24.215

📡 mDNS сервисы (Avahi)

Обнаруженные сервисы в локальной сети:

+ IoT MQTT (realiot-1)        _mqtt._tcp      local  (eth0, wlan0)
+ IoT MQTT (realiot-1)        _mqtts._tcp     local  (eth0, wlan0)

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


📝 Сценарии использования

Обмен данными

  1. Локальные устройства → MQTT → my_mqtt.js → MongoDB (devicedata)
  2. Zigbee устройства → zigbee2mqtt → MQTT → my_mqtt.js
  3. Matter устройства → @matter/nodejs → MQTT
  4. LoRaWAN устройства → ChirpStack → MQTT
  5. Frontend ↔ Socket.io ↔ server.js

Глобальная синхронизация

OTA обновления

  1. Загрузка tar.gz архива
  2. update_service.sh → остановка сервиса → backup → распаковка → запуск
  3. При ошибке: автоматический rollback_service.sh

🎯 Что работает и что нет

✅ Работает

⚠️ Не активно

❌ Не работает


💾 Использование ресурсов

Память

Диск

CPU


🔍 Логи сервисов

# RealIoT Web
sudo journalctl -u realiot-web -f
tail -f /var/log/realiot-web.log
tail -f /var/log/realiot-web.err

# Zigbee2MQTT
sudo journalctl -u zigbee2mqtt -f

# ChirpStack
sudo journalctl -u chirpstack -f

# Mosquitto
sudo journalctl -u mosquitto -f

# RealIoT BLE
sudo journalctl -u realiot-ble -f

🛠️ Команды для управления

Управление сервисами

# Основной сервис
sudo systemctl restart realiot-web
sudo systemctl status realiot-web

# Zigbee
sudo systemctl restart zigbee2mqtt
sudo systemctl status zigbee2mqtt

# ChirpStack
sudo systemctl restart chirpstack
sudo systemctl status chirpstack

# MongoDB (Docker)
sudo docker restart mongodb
sudo docker logs -f mongodb

Деплой

# Автоматический деплой (сборка frontend + перезапуск)
/opt/realiot-web/deploy.sh

# Ручная сборка frontend
cd /opt/realiot-web/frontend
npm run build

Мониторинг

# Процессы
htop
ps aux --sort=-%mem

# Сеть
sudo ss -tulpn | grep LISTEN
ip addr show

# Диск
df -h
du -sh /opt/*

# Логи
sudo journalctl -f

📋 Дополнительные находки

Python окружения

Snap пакеты

USB устройства

Сетевые особенности


🎯 Рекомендации

Для улучшения

  1. Активировать realiot-support-tunnel если нужна удаленная поддержка
  2. Настроить PM2 или оставить systemd (сейчас systemd работает хорошо)
  3. Исправить failed сервисы: ble-cputemp, ble-server (или удалить)
  4. Настроить swap для дополнительной стабильности
  5. Очистить старые snap пакеты (занимают место)

Резервное копирование

# Важные данные
/opt/realiot-web/              # Код и конфигурация
/opt/realiot-ble/              # BLE сервер
/etc/systemd/system/*.service  # Сервисы
/etc/avahi/                    # mDNS конфигурация
/etc/netplan/                  # Сетевая конфигурация
MongoDB: devicedata, realiotdata  # Базы данных

Документ создан автоматически: 9 января 2026
Версия системы: Ubuntu 20.04.6 LTS
Kernel: Linux 5.4.0-1122-raspi aarch64