Raspberry Pi System Monitor — это приложение для Raspberry Pi, позволяющее в режиме реального времени следить за состоянием системы: загрузкой CPU, потреблением оперативной памяти, температурой процессора и другими показателями.
Главная цель проекта — визуализация ключевых метрик системы, хранение данных с возможностью экспорта и удобный графический интерфейс.
Это полезный инструмент как для учебных целей (изучение работы систем), так и для практического применения — например, при использовании Raspberry Pi в роли сервера, медиаплеера или домашнего хаба.
Технологии и компоненты
- PyQt5 — создание графического интерфейса (GUI)
- PyQtGraph — библиотека для отрисовки динамических графиков
- psutil — получение системной информации: загрузка CPU, память и т. д.
- vcgencmd — утилита Raspberry Pi для температуры процессора и статуса троттлинга
- deque (из collections) — хранение последних значений метрик с ограничением по длине
- csv + QFileDialog — экспорт собранных данных в файл CSV
Как работает приложение
- Инициализация — создаётся окно с элементами интерфейса: графики, прогресс-бары, подписи.
- Сбор данных — через
psutilиvcgencmdберутся показатели CPU, RAM и температуры. - Отображение — прогресс-бары и графики обновляются каждую секунду.
- Экспорт — кнопка «Save Data» сохраняет историю показателей в CSV.
- Автозапуск — приложение можно добавить в автозагрузку Raspberry Pi.
- Хранение истории — значения пишутся в ограниченные буферы (например, 3600 точек).
- Визуальные улучшения — тёмная тема, цветовая индикация нагрузки.
Подготовка и установка
Перед запуском нужно подготовить среду:
- Установка зависимостей (на самом Pi)
sudo apt update sudo apt install python3-pyqt5 python3-psutil python3-pyqtgraph libraspberrypi-binИли альтернативно черезpip3:pip3 install PyQt5 psutil pyqtgraphЭто обеспечивает наличие библиотек для GUI, сбора метрик и работы с Raspberry Pi утилитами. - Клонирование / копирование кода
Необходимо иметь Python-скрипт (например,pimon.py) с реализацией приложения и всеми методами. - Настройка автозапуска (если нужно)
Создать файл~/.config/autostart/pypimon.desktopтакого вида:[Desktop Entry] Type=Application Name=PyPiMon System Monitor Exec=python3 /path/to/pypimon.pyТогда при старте графической среды приложение будет запускаться автоматически. - Запуск и тестирование
Запуск через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
Обновление статистики:
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))
# и аналогично для других метрик…
Экспорт данных:
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]])
Итоги
Проект Raspberry Pi System Monitor — отличный пример того, как можно объединить мониторинг системы и визуализацию в компактное и полезное приложение. Он способен служить учебной базой для тех, кто хочет освоить темы:
- GUI-программирование на Python
- Работа с системными метриками
- Построение графиков в реальном времени
- Архитектура приложения (логика, обновление, интерфейс)
При наличии желания и времени его можно существенно расширить: добавить мониторинг дисков, сетевого трафика, систему оповещений и удалённый доступ.