122 lines
2.6 KiB
Bash
Executable File
122 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# From gregory
|
|
# I wrote none of this. This script is produced entirely by AI
|
|
|
|
# Function to get battery percentage
|
|
get_battery_percentage() {
|
|
local bat_path="/sys/class/power_supply"
|
|
local bat_name=""
|
|
|
|
# Find battery directory
|
|
for bat in "$bat_path"/BAT*; do
|
|
if [ -d "$bat" ]; then
|
|
bat_name=$(basename "$bat")
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ -z "$bat_name" ]; then
|
|
echo "BATTERY_NOT_FOUND"
|
|
return 1
|
|
fi
|
|
|
|
local capacity_file="$bat_path/$bat_name/capacity"
|
|
if [ ! -r "$capacity_file" ]; then
|
|
echo "CAPACITY_READ_FAILED"
|
|
return 1
|
|
fi
|
|
|
|
local capacity
|
|
if ! capacity=$(cat "$capacity_file" 2>/dev/null); then
|
|
echo "CAPACITY_READ_FAILED"
|
|
return 1
|
|
fi
|
|
|
|
# Validate it's a number between 0-100
|
|
if ! echo "$capacity" | grep -qE '^[0-9]+$'; then
|
|
echo "CAPACITY_INVALID"
|
|
return 1
|
|
fi
|
|
|
|
if [ "$capacity" -lt 0 ] || [ "$capacity" -gt 100 ]; then
|
|
echo "CAPACITY_INVALID"
|
|
return 1
|
|
fi
|
|
|
|
echo "$capacity"
|
|
}
|
|
|
|
# Function to get battery status
|
|
get_battery_status() {
|
|
local bat_path="/sys/class/power_supply"
|
|
local bat_name=""
|
|
|
|
# Find battery directory
|
|
for bat in "$bat_path"/BAT*; do
|
|
if [ -d "$bat" ]; then
|
|
bat_name=$(basename "$bat")
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ -z "$bat_name" ]; then
|
|
echo "BATTERY_NOT_FOUND"
|
|
return 1
|
|
fi
|
|
|
|
local status_file="$bat_path/$bat_name/status"
|
|
if [ ! -r "$status_file" ]; then
|
|
echo "STATUS_READ_FAILED"
|
|
return 1
|
|
fi
|
|
|
|
local status
|
|
if ! status=$(cat "$status_file" 2>/dev/null); then
|
|
echo "STATUS_READ_FAILED"
|
|
return 1
|
|
fi
|
|
|
|
# Validate status is one of expected values
|
|
case "$status" in
|
|
Charging|Discharging|Full|Unknown|"Not charging")
|
|
echo "$status"
|
|
;;
|
|
*)
|
|
echo "STATUS_UNKNOWN"
|
|
return 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Function to get date
|
|
get_date() {
|
|
if ! date +%Y-%m-%d 2>/dev/null; then
|
|
echo "DATE_FAILED"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Function to get time with seconds
|
|
get_time() {
|
|
if ! date +%H:%M:%S 2>/dev/null; then
|
|
echo "TIME_FAILED"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Main loop
|
|
while true; do
|
|
# Get all components
|
|
battery_percent=$(get_battery_percentage)
|
|
battery_status=$(get_battery_status)
|
|
current_date=$(get_date)
|
|
current_time=$(get_time)
|
|
|
|
# Print the line
|
|
echo "${battery_percent}% ${battery_status} ${current_date} ${current_time}"
|
|
|
|
# Wait 1 second
|
|
sleep 1
|
|
done
|