Категории

Данные диска в системе мониторинга IOT - температура, smart и т.п.

10.08.2025 14:17 | коды из категории: IOT умный дом

в любом хомасистент важны данные, а данные должны хранится надежно. вот надо следить за состоянием хранилища

про Данные диска в системе мониторинга IOT  -  температура, smart и т.п.

В этой статье я расскажу, как реализовал мониторинг состояния диска (использование пространства, температуру и бэд-блоки) в своей самописной системе домашней автоматизации на базе PHP, MQTT, Zigbee и MySQL.

Зачем это нужно?

Сервер домашней автоматизации работает 24/7, и важно следить за состоянием его диска:

Реализация

1. Bash-скрипт для сбора данных

Создаем скрипт, который будет собирать информацию:

#!/bin/bash

# Конфигурация
MYSQL_USER="ваш_пользователь_mysql"
MYSQL_PASS="ваш_пароль_mysql"
MYSQL_DB="ваша_база_данных"
MQTT_TOPIC="homeassistant/disk_monitor"
MQTT_HOST="localhost"

# Получаем данные о дисках
DISK_DATA=$(df -h | grep -E '^/dev/[a-z]+[0-9]+' | awk '{print $1,$5,$6}')
SMART_DATA=$(sudo smartctl -a /dev/sda | grep -E 'Temperature_Celsius|Reallocated_Sector_Ct|Current_Pending_Sector|Offline_Uncorrectable' | awk '{print $2,$10}')
DISK_TEMP=$(echo "$SMART_DATA" | grep Temperature_Celsius | awk '{print $2}')
BAD_BLOCKS=$(echo "$SMART_DATA" | grep -E 'Reallocated_Sector_Ct|Current_Pending_Sector|Offline_Uncorrectable' | awk '{print $2}' | tr '\n' '/')

# Формируем JSON для MQTT
JSON_DATA=$(jq -n \
  --arg disk_data "$DISK_DATA" \
  --arg disk_temp "$DISK_TEMP" \
  --arg bad_blocks "$BAD_BLOCKS" \
  '{
    "disk_usage": $disk_data,
    "temperature": $disk_temp,
    "bad_blocks": $bad_blocks,
    "timestamp": now | todate
  }')

# Отправляем в MQTT
mosquitto_pub -h $MQTT_HOST -t $MQTT_TOPIC -m "$JSON_DATA"

# Записываем в MySQL
mysql -u $MYSQL_USER -p$MYSQL_PASS $MYSQL_DB <<EOF
INSERT INTO disk_monitor (disk_usage, temperature, bad_blocks, timestamp)
VALUES ('$DISK_DATA', '$DISK_TEMP', '$BAD_BLOCKS', NOW());
EOF

2. Делаем скрипт исполняемым:

chmod +x disk_monitor.sh
3. Добавляем в cron для регулярного выполнения (например, каждые 10 минут):
(crontab -l ; echo "*/10 * * * * /путь/к/disk_monitor.sh") | crontab -
Интеграция с PHP
Создадим PHP-скрипт для отображения данных:

<?php
// config.php
$db_host = 'localhost';
$db_user = 'ваш_пользователь_mysql';
$db_pass = 'ваш_пароль_mysql';
$db_name = 'ваша_база_данных';

// Подключение к БД
$conn = new mysqli($db_host, $db_user, $db_pass, $db_name);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Получаем последние данные
$sql = "SELECT * FROM disk_monitor ORDER BY timestamp DESC LIMIT 1";
$result = $conn->query($sql);
$disk_data = $result->fetch_assoc();

// Закрываем соединение
$conn->close();
?>

<!DOCTYPE html>
<html>
<head>
    <title>Disk Monitor</title>
    <style>
        .disk-info { margin: 20px; padding: 15px; border: 1px solid #ddd; border-radius: 5px; }
        .critical { color: red; font-weight: bold; }
    </style>
</head>
<body>
    <h1>Disk Monitoring System</h1>
    
    <div class="disk-info">
        <h2>Disk Usage</h2>
        <pre><?php echo htmlspecialchars($disk_data['disk_usage'] ?? 'No data'); ?></pre>
        
        <h2>Temperature</h2>
        <p <?php if (($disk_data['temperature'] ?? 0) > 50) echo 'class="critical"'; ?>>
            <?php echo htmlspecialchars($disk_data['temperature'] ?? 'N/A'); ?>°C
        </p>
        
        <h2>Bad Blocks</h2>
        <p <?php if (($disk_data['bad_blocks'] ?? '0/0/0') != '0/0/0') echo 'class="critical"'; ?>>
            <?php echo htmlspecialchars($disk_data['bad_blocks'] ?? 'N/A'); ?>
        </p>
        
        <p>Last update: <?php echo htmlspecialchars($disk_data['timestamp'] ?? 'Never'); ?></p>
    </div>
</body>
</html>

Теги: #IoT #SMART #система_мониторинга_IOT #температура_диска

Комментарии

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

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

← Назад к списку

Важно: Блог-эксперимент

Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


кто я | книга | контакты без контактов

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