Для электронщиков и радиолюбителей

Raspberry Pi System Monitor: мониторинг системы в реальном времени

Raspberry Pi System Monitor: мониторинг системы в реальном времени

Raspberry Pi System Monitor — это приложение для Raspberry Pi, позволяющее в режиме реального времени следить за состоянием системы: загрузкой CPU, потреблением оперативной памяти, температурой процессора и другими показателями.

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

Это полезный инструмент как для учебных целей (изучение работы систем), так и для практического применения — например, при использовании Raspberry Pi в роли сервера, медиаплеера или домашнего хаба.


Технологии и компоненты

  • PyQt5 — создание графического интерфейса (GUI)
  • PyQtGraph — библиотека для отрисовки динамических графиков
  • psutil — получение системной информации: загрузка CPU, память и т. д.
  • vcgencmd — утилита Raspberry Pi для температуры процессора и статуса троттлинга
  • deque (из collections) — хранение последних значений метрик с ограничением по длине
  • csv + QFileDialog — экспорт собранных данных в файл CSV

Как работает приложение

  1. Инициализация — создаётся окно с элементами интерфейса: графики, прогресс-бары, подписи.
  2. Сбор данных — через psutil и vcgencmd берутся показатели CPU, RAM и температуры.
  3. Отображение — прогресс-бары и графики обновляются каждую секунду.
  4. Экспорт — кнопка «Save Data» сохраняет историю показателей в CSV.
  5. Автозапуск — приложение можно добавить в автозагрузку Raspberry Pi.
  6. Хранение истории — значения пишутся в ограниченные буферы (например, 3600 точек).
  7. Визуальные улучшения — тёмная тема, цветовая индикация нагрузки.

Подготовка и установка

Перед запуском нужно подготовить среду:

  1. Установка зависимостей (на самом Pi) sudo apt update sudo apt install python3-pyqt5 python3-psutil python3-pyqtgraph libraspberrypi-bin Или альтернативно через pip3: pip3 install PyQt5 psutil pyqtgraph Это обеспечивает наличие библиотек для GUI, сбора метрик и работы с Raspberry Pi утилитами.
  2. Клонирование / копирование кода
    Необходимо иметь Python-скрипт (например, pimon.py) с реализацией приложения и всеми методами.
  3. Настройка автозапуска (если нужно)
    Создать файл ~/.config/autostart/pypimon.desktop такого вида: [Desktop Entry] Type=Application Name=PyPiMon System Monitor Exec=python3 /path/to/pypimon.py Тогда при старте графической среды приложение будет запускаться автоматически.
  4. Запуск и тестирование
    Запуск через python3 pimon.py, проверка, что графики обновляются, данные сохраняются корректно.

Возможные улучшения и расширения

Проект, как отмечается в исходной статье, может быть расширен следующими способами:

  • Добавление мониторинга каждого ядра CPU (не только общего)
  • Поддержка мониторинга дисковой активности (I/O, свободное место, скорость чтения/записи)
  • Включение сетевой статистики (пропускная способность, пакеты и пр.)
  • Система оповещений: уведомления, звуковые сигналы или удалённые сообщения при достижении критических значений
  • Добавление вращающихся файлов логов (лог-роллинг) или автоматическая архивация данных
  • Встроенный просмотр сохранённых данных прямо внутри интерфейса
  • Переключение тем (светлая / тёмная)
  • Поддержка нескольких языков / локализации
  • Версия без GUI (headless), доступ через веб-интерфейс или API
  • Возможность удалённого мониторинга (например, чтобы просматривать показатели Pi с другого устройства)

Эти расширения превратят базовый монитор в мощный инструмент для администрирования Raspberry Pi.


Преимущества и ограничения

Преимущества:

  • Интерактивность и визуализация — графики и прогресс-бары дают быстрый визуальный отклик
  • Удобство экспорта данных для последующего анализа
  • Возможность автозапуска и нативное приложение
  • Использование стандартных библиотек Python — лёгкая читаемость и расширяемость кода
  • Образовательная ценность: проект объединяет GUI, системные вызовы, визуализацию и архитектуру приложения

Ограничения:

  • Приложение запускается в графической среде — не подходит для headless-режима (без интерфейса)
  • Зависит от библиотек (PyQt5, PyQtGraph) и системных утилит (vcgencmd)
  • Для долгосрочного мониторинга может потребоваться более сложное управление логами
  • Возможны трудности при высоких нагрузках — частые обновления и отрисовка графиков могут сами по себе нагружать систему

Примеры кода (отрывки)

Ниже приведены некоторые ключевые фрагменты из реализации:

Получение температуры CPU:

def get_cpu_temp(self):
    try:
        res = os.popen("vcgencmd measure_temp").readline()
        temp_str = res.replace("temp=", "").replace("'C\n", "")
        return float(temp_str)
    except:
        return None

hackster.io

Обновление статистики:

def update_stats(self):
    if self.paused:
        return

    cpu = psutil.cpu_percent()
    ram = psutil.virtual_memory().percent
    temp = self.get_cpu_temp()
    timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

    self.cpu_label.setText(f"CPU Usage: {cpu}%")
    self.cpu_bar.setValue(int(cpu))
    self.style_bar(self.cpu_bar, cpu, 50, 80)

    self.timestamps.append(timestamp)
    self.cpu_data.append(cpu)

    self.cpu_curve.setData(list(self.cpu_data))
    # и аналогично для других метрик…

hackster.io

Экспорт данных:

def save_data(self):
    path, _ = QFileDialog.getSaveFileName(self, "Save CSV", "", "CSV Files (*.csv)")
    if not path:
        return
    with open(path, "w", newline="") as f:
        writer = csv.writer(f)
        writer.writerow(["Timestamp", "CPU (%)", "RAM (%)", "Temperature (°C)"])
        for i in range(len(self.timestamps)):
            writer.writerow([self.timestamps[i], self.cpu_data[i], self.ram_data[i], self.temp_data[i]])

hackster.io


Итоги

Проект Raspberry Pi System Monitor — отличный пример того, как можно объединить мониторинг системы и визуализацию в компактное и полезное приложение. Он способен служить учебной базой для тех, кто хочет освоить темы:

  • GUI-программирование на Python
  • Работа с системными метриками
  • Построение графиков в реальном времени
  • Архитектура приложения (логика, обновление, интерфейс)

При наличии желания и времени его можно существенно расширить: добавить мониторинг дисков, сетевого трафика, систему оповещений и удалённый доступ.