↩️ На главную

Добавил мониторинг температуры NVMe USB на Raspberry Pi

24.01.2026 | Статья из категории: IOT умный дом

Переделал скрипт мониторинга температуры NVMe на Raspberry Pi для главной страницы IOT

Недавно я столкнулся с задачей: хочу видеть температуру своего NVMe-накопителя (WD Blue SN520), который подключён к Raspberry Pi через внешний USB-адаптер JEYI M.2 NVMe USB 3.2. Казалось бы — просто, но есть нюансы: большинство USB-боксов эмулируют обычный SATA-диск и не передают SMART-данные. Однако оказалось, что мой адаптер на чипе Realtek RTL9210B отлично поддерживает передачу SMART через USB — даже на Raspberry Pi!

🔧 Что потребовалось сделать

  1. Убедиться, что SMART доступен:
    Установил smartmontools и проверил:
    sudo apt install smartmontools
    sudo smartctl -a /dev/sda
    В выводе увидел заветную строку:
    Temperature: 48 Celsius
  2. Обновить скрипт сбора метрик (rpi_monitor.sh):
    Добавил получение температуры NVMe через smartctl:
    # Температура NVMe через smartctl
    NVME_TEMP="N/A"
    if command -v smartctl &> /dev/null; then
      TEMP_VAL=$(sudo smartctl -a /dev/sda 2>/dev/null | grep "^Temperature:" | awk '{print $2}')
      if [[ -n "$TEMP_VAL" && "$TEMP_VAL" =~ ^[0-9]+$ ]]; then
        NVME_TEMP="$TEMP_VAL"
      fi
    fi
    И не забыл добавить переменную в SQL-запрос:
    INSERT INTO rpi_monitor (... , nvme_temp, ...)
    VALUES (... , '$NVME_TEMP', ...);
  3. Добавить поле в базу данных:
    Выполнил один раз в MySQL:
    ALTER TABLE rpi_monitor ADD COLUMN nvme_temp VARCHAR(10) DEFAULT 'N/A';
  4. Обновить веб-интерфейс (index.php):
    Добавил строку в блок «Статус железа»:
    <div class="value">💾 Температура NVMe: <strong><?= htmlspecialchars($rpi_data['nvme_temp'] ?? 'N/A') ?></strong>°C</div>

✅ Результат

Теперь в моей IoT-панели отображается актуальная температура NVMe-диска — даже несмотря на то, что он подключён через USB! Это особенно полезно, когда Pi работает под нагрузкой (например, как Home Assistant + Zigbee-координатор + MQTT-брокер).

💡 Важно: Не все USB-NVMe адаптеры поддерживают SMART. Проверяйте именно через smartctl -a /dev/sdX, а не надейтесь на бренд. JEYI, Acasis и некоторые модели с RTL9210B — хороший выбор.

Такой подход позволяет контролировать состояние SSD и вовремя реагировать на перегрев — особенно если вы используете Raspberry Pi без активного охлаждения корпуса.

Настройка прав sudo для smartctl без пароля

При автоматическом сборе данных (например, через cron) часто требуется выполнять команды, требующие прав root — например, smartctl для чтения температуры NVMe-диска. Чтобы избежать запроса пароля, можно настроить исключение в системе sudo.

Важно: Всегда используйте visudo для редактирования конфигурации sudo — это предотвращает синтаксические ошибки, которые могут заблокировать доступ к sudo.

Шаг 1: Узнайте точный путь к smartctl

$ which smartctl
/usr/sbin/smartctl

Обычно на Raspberry Pi OS команда находится в /usr/sbin/smartctl, а не в /usr/bin/.

Шаг 2: Добавьте правило в sudoers

Создайте файл в /etc/sudoers.d/ (например, mazzick-smartctl):

sudo visudo -f /etc/sudoers.d/mazzick-smartctl

Добавьте строку (замените mazzick на ваше имя пользователя):

mazzick ALL=(ALL) NOPASSWD: /usr/sbin/smartctl

Сохраните и закройте файл.

Шаг 3: Используйте полный путь в скриптах

В bash-скриптах, особенно запускаемых через cron, всегда указывайте полный путь:

TEMP_VAL=$(sudo /usr/sbin/smartctl -a /dev/nvme0n1 2>/dev/null | grep "^Temperature:" | awk '{print $2}')

Это гарантирует, что команда найдётся даже при ограниченном PATH в cron.

Шаг 4: Проверьте работу

# Запустите от имени пользователя (без пароля!)
sudo -u mazzick sudo /usr/sbin/smartctl -a /dev/nvme0n1 | grep Temperature

Если температура выводится — всё настроено верно.

Сбор системных метрик для главной страницы iot системы - rpi_monitor.sh
Главная страница iot системы с мониторингом температуры - index.php



Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA