Disk Space Monitoring Script to HA
Disk Space Monitoring Script and inform Home Assistant with an entity.
nano monitor_disk_space_to_ha.sh
and copy / paste the below code inside the script file monitor_disk_space_to_ha.sh
# Home Assistant Settings
url_base="https://<your domain>/api/states"
token="IsImlhdCI6MTcwNzIzOTE0MywiZXhwIjoxNzA3MjM5MTR9..."
# Server name
srv_name="VPS server"
# Constants for device info
DEVICE_IDENTIFIERS='["vps_server"]'
DEVICE_NAME="Server Disk Space Monitor"
DEVICE_MANUFACTURER="Amnisia"
DEVICE_MODEL="Disk Monitor"
# Function to send data to Home Assistant
send_to_ha() {
local sensor_name=$1
local value=$2
local friendly_name=$3
local icon=$4
local unique_id=$5
local url="${url_base}/${sensor_name}"
local device_info="{\"identifiers\":${DEVICE_IDENTIFIERS},\"name\":\"${DEVICE_NAME}\",\"manufacturer\":\"${DEVICE_MANUFACTURER}\",\"model\":\"${DEVICE_MODEL}\"}"
local payload="{\"state\":\"${value}\",\"attributes\":{\"friendly_name\":\"${friendly_name}\",\"icon\":\"${icon}\",\"device\":${device_info}}}"
curl -X POST -H "Authorization: Bearer ${token}" -H 'Content-Type: application/json' --data "${payload}" "${url}"
}
# Function to check disk space
check_disk_space() {
# Get disk space usage and free space
disk_usage=$(df / | awk 'NR==2 {print $3}') # Used space in KB
disk_free=$(df / | awk 'NR==2 {print $4}') # Free space in KB
# Convert to human-readable format (GB)
disk_usage_gb=$(bc <<< "scale=2; $disk_usage/1024/1024")
disk_free_gb=$(bc <<< "scale=2; $disk_free/1024/1024")
# Send disk usage and free space to Home Assistant
send_to_ha "sensor.${srv_name}_disk_usage" "${disk_usage_gb}" "Disk Used Space (GB)" "mdi:harddisk" "${srv_name}_disk_usage"
send_to_ha "sensor.${srv_name}_disk_free" "${disk_free_gb}" "Disk Free Space (GB)" "mdi:harddisk" "${srv_name}_disk_free"
}
# Run the function to check disk space
check_disk_space