From 1af17f2525a70c1d12c0aa85b6ea62e71c3d411f Mon Sep 17 00:00:00 2001 From: Akemi Izuko Date: Sat, 23 Dec 2023 20:14:15 -0700 Subject: [PATCH] Add battery-logging systemd timer --- systemd/system/log_battery.service | 9 ++++ systemd/system/log_battery.timer | 11 +++++ systemd/system/timer-scripts/log_battery.sh | 50 +++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 systemd/system/log_battery.service create mode 100644 systemd/system/log_battery.timer create mode 100755 systemd/system/timer-scripts/log_battery.sh diff --git a/systemd/system/log_battery.service b/systemd/system/log_battery.service new file mode 100644 index 0000000..43b9a61 --- /dev/null +++ b/systemd/system/log_battery.service @@ -0,0 +1,9 @@ +[Unit] +Description=Log the current battery charge +Wants=log_battery.timer + +[Service] +User=root +Group=root +Type=oneshot +ExecStart=/usr/local/bin/log_battery.sh /org/freedesktop/UPower/devices/battery_BAT0 /home/emiliko/safe/loggers/battery/battery.csv diff --git a/systemd/system/log_battery.timer b/systemd/system/log_battery.timer new file mode 100644 index 0000000..2550c9e --- /dev/null +++ b/systemd/system/log_battery.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Log the current battery charge +Requires=log_battery.service + +[Timer] +Unit=log_battery.service +OnCalendar=*-*-* *:00/1:00 +RandomizedDelaySec=10s + +[Install] +WantedBy=timers.target diff --git a/systemd/system/timer-scripts/log_battery.sh b/systemd/system/timer-scripts/log_battery.sh new file mode 100755 index 0000000..d3f0102 --- /dev/null +++ b/systemd/system/timer-scripts/log_battery.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +# Look through `upower --dump` to set this variable +declare -r BATTERY_PATH="$1" +declare -r WRITE_PATH="$2" + +if [[ $# -ne 2 ]]; then + echo "USAGE: $(basename "$0") " + exit 1 +elif [[ ! -e "$WRITE_PATH" && -d "$(dirname "$WRITE_PATH")" ]]; then + echo "hostname,time,charge,percent,state" > "$WRITE_PATH" +fi + +declare -r tmp_file="$(mktemp)" + +upower --dump > "$tmp_file" + +declare system_name="$(hostname)" +declare current_time="$(date -u +"%Y-%m-%d %H:%M:%S UTC")" +declare current_power="$(cat "$tmp_file" | awk ' +BEGIN { b = "'"$BATTERY_PATH"'"; t=0 } + +match($0, b) { t=1 } + +t && match($0, /energy:/) { + split($0,a," ") + print a[2] + exit +}')" +declare current_percentage="$(cat "$tmp_file" | awk ' +BEGIN { b = "'"$BATTERY_PATH"'"; t=0 } + +match($0, b) { t=1 } + +t && match($0, /percentage:/) { + split($0,a," ") + print a[2] + exit +}')" +declare current_state="$(cat "$tmp_file" | awk ' +BEGIN { b = "'"$BATTERY_PATH"'"; t=0 } + +match($0, b) { t=1 } + +t && match($0, /state:/) { + split($0,a," ") + print a[2] + exit +}')" + +echo "$system_name,$current_time,$current_power,$current_percentage,$current_state" >> "$WRITE_PATH"