rpi_monitor.shВ моей IoT-инфраструктуре важно не только следить за датчиками, но и контролировать состояние самой Raspberry Pi. Для этого я написал простой bash-скрипт rpi_monitor.sh, который раз в несколько минут собирает ключевые системные метрики и отправляет их одновременно в MQTT и в локальную базу данных MySQL.
Это позволяет:
Скрипт работает автономно через cron и не зависит от веб-сервера — даже если PHP-интерфейс ляжет, сбор данных продолжится.
vcgencmd или /sys/class/thermal),rpi_monitor базы iot_db,homeassistant/rpi_monitor (в формате JSON).#!/bin/bash
# Конфигурация
MYSQL_USER="iot_user"
MYSQL_PASS="123456"
MYSQL_DB="iot_db"
MQTT_TOPIC="homeassistant/rpi_monitor"
MQTT_HOST="localhost"
# Получаем данные о системе
# Температура CPU
CPU_TEMP=$(vcgencmd measure_temp | cut -d= -f2 | cut -d\' -f1)
[ -z "$CPU_TEMP" ] && CPU_TEMP=$(cat /sys/class/thermal/thermal_zone0/temp | awk '{print $1/1000}')
# Напряжение ядра
VOLT_CORE=$(vcgencmd measure_volts core 2>/dev/null | cut -d= -f2 | tr -d 'V')
[ -z "$VOLT_CORE" ] && VOLT_CORE="N/A"
# Загрузка CPU
CPU_LOAD=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
# Использование памяти
MEM_TOTAL=$(free -m | awk '/Mem:/ {print $2}')
MEM_USED=$(free -m | awk '/Mem:/ {print $3}')
MEM_PERCENT=$(free | awk '/Mem:/ {printf("%.1f"), $3/$2*100}')
# Использование диска
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
# Uptime системы
UPTIME=$(uptime -p)
# IP-адреса
IP_ADDRESSES=$(hostname -I | tr '\n' ' ')
# Формируем JSON для MQTT
JSON_DATA=$(jq -n \
--arg cpu_temp "$CPU_TEMP" \
--arg cpu_load "$CPU_LOAD" \
--arg mem_total "$MEM_TOTAL" \
--arg mem_used "$MEM_USED" \
--arg mem_percent "$MEM_PERCENT" \
--arg disk_usage "$DISK_USAGE" \
--arg uptime "$UPTIME" \
--arg ip_addresses "$IP_ADDRESSES" \
--arg volt_core "$VOLT_CORE" \
'{
"cpu_temp": $cpu_temp,
"cpu_load": $cpu_load,
"mem_total": $mem_total,
"mem_used": $mem_used,
"mem_percent": $mem_percent,
"disk_usage": $disk_usage,
"uptime": $uptime,
"ip_addresses": $ip_addresses,
"volt_core": $volt_core,
"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 rpi_monitor (
cpu_temp, cpu_load, mem_total, mem_used, mem_percent,
disk_usage, volt_core, uptime, ip_addresses, timestamp -- ← добавлено
) VALUES (
'$CPU_TEMP', '$CPU_LOAD', '$MEM_TOTAL', '$MEM_USED', '$MEM_PERCENT',
'$DISK_USAGE', '$VOLT_CORE', '$UPTIME', '$IP_ADDRESSES', NOW() -- ← добавлено
);
EOF
💡 Совет: Запускайте скрипт через cron каждые 5 минут:
*/5 * * * * /opt/iot/rpi_monitor.sh
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!