From ff34c93c1e7a239c54227670b6d5a2de7e7ee5af Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Wed, 13 Dec 2023 09:31:02 -0600 Subject: [PATCH] better battery monitor --- scripts/batmon.lisp | 54 ++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/scripts/batmon.lisp b/scripts/batmon.lisp index cff1dab..edf6c18 100755 --- a/scripts/batmon.lisp +++ b/scripts/batmon.lisp @@ -4,37 +4,41 @@ (ql:quickload :serapeum) (defun get-value (file) - "Read a file and get it's value as a list of lines" - (with-open-file (in file) - (loop for line = (read-line in nil nil) - while line - collect line))) + "Read a file and get it's value as a string" + (serapeum:trim-whitespace (uiop:read-file-string file))) (defun close-eww () - (uiop:run-program "eww close battery" :ignore-error-status t)) + (run-program "eww" '("close" "battery") :search "/run/current-system/sw/bin/")) (defun open-eww () - (uiop:run-program "eww open battery" :ignore-error-status t)) + (run-program "eww" '("open" "battery") :search "/run/current-system/sw/bin/")) (defun clear-file (file) - (with-open-file (out file :direction :output :if-exists :overwrite :if-does-not-exist :create) + (with-open-file (out file :direction :output :if-exists :supersede) (write-sequence " " out)) - (uiop:println "Clearing killed")) + (format t "~&Clearing killed")) -(setf capacity (parse-integer (car (get-value "/sys/class/power_supply/BAT1/capacity")))) -(setf status (car (get-value "/sys/class/power_supply/BAT1/status"))) - -(loop do (progn - (sleep 10) - (format t "~&Charge: ~a, Status: ~a" capacity status) - (if (string= "Charging" status) - (progn (format t "~&Charging, closing EWW") (close-eww)) - (if (<= capacity 30) - (progn (setf killed (serapeum:trim-whitespace (car (get-value "/tmp/ewwbattery")))) - (if killed - (progn (format t "~&EWW has been killed, waiting 3 minutes") - (clear-file #p"/tmp/ewwbattery") - (sleep 360))) +(defun main () + (loop do (let ((capacity (parse-integer + (get-value "/sys/class/power_supply/BAT1/capacity") + :junk-allowed t)) + (status (get-value "/sys/class/power_supply/BAT1/status"))) + (format t "~&Charge: ~a, Status: ~a" capacity status) + (if (string= "Charging" status) + (progn + (format t "~&Charging, closing EWW") + (close-eww)) + (if (<= capacity 30) + (let ((killed (get-value "/tmp/ewwbattery"))) + (if (string= "killed" killed) + (progn + (format t "~&EWW has been killed, waiting 3 minutes") + (clear-file #p"/tmp/ewwbattery") + (sleep 350))) (format t "~&Opening EWW") (open-eww)) - (progn (format t "~&Charged more than 30%, Closing EWW") - (close-eww)))))) + (progn (format t "~&Charged more than 30%, Closing EWW") + (clear-file #p"/tmp/ewwbattery") + (close-eww)))) + (sleep 10)))) + +(main)