From dc223842ee25459e45a241d7f0c31c929cd1532c Mon Sep 17 00:00:00 2001 From: Theodore Murphy Date: Sun, 3 Mar 2024 16:01:25 +1100 Subject: [PATCH 1/7] Sleeps for 20 instead of 60 within 3% --- battery.sh | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/battery.sh b/battery.sh index e4bdea6..8f733cb 100755 --- a/battery.sh +++ b/battery.sh @@ -442,23 +442,27 @@ if [[ "$action" == "maintain_synchronous" ]]; then while true; do # Keep track of status - is_charging=$(get_smc_charging_status) + if [[ "$battery_percentage" -ge "$((setting - 3))" && "$battery_percentage" -lt "$setting" && "$is_charging" == "enabled" ]]; then + sleep 20 - if [[ "$battery_percentage" -ge "$setting" && "$is_charging" == "enabled" ]]; then + else - log "Charge above $setting" - disable_charging - change_magsafe_led_color "green" + if [[ "$battery_percentage" -ge "$setting" && "$is_charging" == "enabled" ]]; then + log "Charge above $setting" + disable_charging + change_magsafe_led_color "green" - elif [[ "$battery_percentage" -lt "$setting" && "$is_charging" == "disabled" ]]; then + elif [[ "$battery_percentage" -lt "$setting" && "$is_charging" == "disabled" ]]; then + log "Charge below $setting" + enable_charging + change_magsafe_led_color "orange" - log "Charge below $setting" - enable_charging - change_magsafe_led_color "orange" + fi - fi + sleep 60 - sleep 60 + fi + fi battery_percentage=$(get_battery_percentage) From afe19c53a0160961ddca89bbdf0f07455e23bf89 Mon Sep 17 00:00:00 2001 From: Theodore Murphy <130824397+thdrmrphy@users.noreply.github.com> Date: Sun, 24 Mar 2024 10:09:59 +1100 Subject: [PATCH 2/7] Bug fix Remove accidental `fi` --- battery.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/battery.sh b/battery.sh index 2d1d560..9951057 100755 --- a/battery.sh +++ b/battery.sh @@ -487,7 +487,6 @@ if [[ "$action" == "maintain_synchronous" ]]; then sleep 60 fi - fi battery_percentage=$(get_battery_percentage) From 51304aa9deb0013bd25de28ab7a6e25772332737 Mon Sep 17 00:00:00 2001 From: Theodore Murphy <130824397+thdrmrphy@users.noreply.github.com> Date: Thu, 28 Mar 2024 11:19:17 +1100 Subject: [PATCH 3/7] Use validation PR from upstream --- battery.sh | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/battery.sh b/battery.sh index e12e263..e9cfc77 100755 --- a/battery.sh +++ b/battery.sh @@ -117,6 +117,14 @@ function log() { echo -e "$(date +%D-%T) - $1" } +function validate_percentage() { + if ! [[ "$1" =~ ^[0-9]+$ ]] || [[ "$1" -lt 0 ]] || [[ "$1" -gt 100 ]]; then + echo false + else + echo true + fi +} + ## ################# ## SMC Manipulation ## ################# @@ -374,6 +382,11 @@ fi # Charging on/off controller if [[ "$action" == "charge" ]]; then + if ! $(validate_percentage "$setting"); then + log "Error: $setting is not a valid setting for battery maintain. Please use a number between 0 and 100" + exit 1 + fi + # Check if percentage is an integer [1-100] if ! [[ $setting =~ ^[1-9][0-9]?$|^100$ ]]; then log "Specified percentage ($setting) is not valid. Please specify an integer [1-100]." @@ -410,6 +423,11 @@ fi # Discharging on/off controller if [[ "$action" == "discharge" ]]; then + if ! $(validate_percentage "$setting"); then + log "Error: $setting is not a valid setting for battery maintain. Please use a number between 0 and 100" + exit 1 + fi + # Start charging battery_percentage=$(get_battery_percentage) log "Discharging to $setting% from $battery_percentage%" @@ -432,6 +450,11 @@ fi # Maintain at level if [[ "$action" == "maintain_synchronous" ]]; then + if ! $(validate_percentage "$setting"); then + log "Error: $setting is not a valid setting for battery maintain. Please use a number between 0 and 100" + exit 1 + fi + # Recover old maintain status if old setting is found if [[ "$setting" == "recover" ]]; then @@ -513,7 +536,7 @@ if [[ "$action" == "maintain" ]]; then fi # Check if setting is value between 0 and 100 - if ! [[ "$setting" =~ ^[0-9]+$ ]] || [[ "$setting" -lt 0 ]] || [[ "$setting" -gt 100 ]]; then + if ! $(validate_percentage "$setting"); then log "Called with $setting $action" # If non 0-100 setting is not a special keyword, exit with an error. From e404c0219fb344dc6ef609ea096ab8ebf782faa2 Mon Sep 17 00:00:00 2001 From: Theodore Murphy <130824397+thdrmrphy@users.noreply.github.com> Date: Thu, 28 Mar 2024 11:25:11 +1100 Subject: [PATCH 4/7] End eternal loop from battery charging on command --- battery.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/battery.sh b/battery.sh index e9cfc77..0c9cd8a 100755 --- a/battery.sh +++ b/battery.sh @@ -166,7 +166,15 @@ function disable_discharging() { # Keep track of status is_charging=$(get_smc_charging_status) - if [[ "$battery_percentage" -ge "$setting" && "$is_charging" == "enabled" ]]; then + if ! [[ $setting =~ ^[1-9][0-9]?$|^100$ ]]; then + + log "No valid maintain percentage set, charging freely" + # use direct commands since enable_charging also calls disable_discharging, and causing an eternal loop + sudo smc -k CH0B -w 00 + sudo smc -k CH0C -w 00 + change_magsafe_led_color "orange" + + elif [[ "$battery_percentage" -ge "$setting" && "$is_charging" == "enabled" ]]; then log "Charge above $setting" disable_charging From 5a028d0d35deb836f75822d7b57e8956bf12de3c Mon Sep 17 00:00:00 2001 From: Theodore Murphy <130824397+thdrmrphy@users.noreply.github.com> Date: Thu, 28 Mar 2024 11:26:08 +1100 Subject: [PATCH 5/7] Fix with new function --- battery.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/battery.sh b/battery.sh index 0c9cd8a..db573cf 100755 --- a/battery.sh +++ b/battery.sh @@ -166,7 +166,7 @@ function disable_discharging() { # Keep track of status is_charging=$(get_smc_charging_status) - if ! [[ $setting =~ ^[1-9][0-9]?$|^100$ ]]; then + if ! $(validate_percentage "$setting"); then log "No valid maintain percentage set, charging freely" # use direct commands since enable_charging also calls disable_discharging, and causing an eternal loop From 51a797ad2f9e85ee25295d5d9f3e0ce947d0c884 Mon Sep 17 00:00:00 2001 From: Theodore Murphy <130824397+thdrmrphy@users.noreply.github.com> Date: Thu, 28 Mar 2024 12:10:16 +1100 Subject: [PATCH 6/7] Sorry to bunch all of this into one commit! Lots of changes trying to debug, better logging, etc. Will revert some of it. --- battery.sh | 66 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/battery.sh b/battery.sh index db573cf..cf3e47f 100755 --- a/battery.sh +++ b/battery.sh @@ -118,11 +118,12 @@ function log() { } function validate_percentage() { - if ! [[ "$1" =~ ^[0-9]+$ ]] || [[ "$1" -lt 0 ]] || [[ "$1" -gt 100 ]]; then - echo false - else - echo true - fi + log "Validating $1" + if ! [[ "$1" =~ ^[0-9]+$ ]] || [[ "$1" -lt 0 ]] || [[ "$1" -gt 100 ]]; then + echo false + else + echo true + fi } ## ################# @@ -132,6 +133,7 @@ function validate_percentage() { # Change magsafe color # see community sleuthing: https://github.com/actuallymentor/battery/issues/71 function change_magsafe_led_color() { + log "MagSafe LED function invoked" color=$1 # Check whether user can run color changes without password (required for backwards compatibility) @@ -143,11 +145,14 @@ function change_magsafe_led_color() { fi if [[ "$color" == "green" ]]; then + log "setting LED to green" sudo smc -k ACLC -w 03 elif [[ "$color" == "orange" ]]; then + log "setting LED to orange" sudo smc -k ACLC -w 04 else # Default action: reset. Value 00 is a guess and needs confirmation + log "resetting LED" sudo smc -k ACLC -w 00 fi } @@ -166,24 +171,26 @@ function disable_discharging() { # Keep track of status is_charging=$(get_smc_charging_status) - if ! $(validate_percentage "$setting"); then + if ! validate_percentage "$setting"; then - log "No valid maintain percentage set, charging freely" - # use direct commands since enable_charging also calls disable_discharging, and causing an eternal loop + log "Disabling discharging: No valid maintain percentage set, enabling charging" + # use direct commands since enable_charging also calls disable_discharging, and causes an eternal loop sudo smc -k CH0B -w 00 sudo smc -k CH0C -w 00 change_magsafe_led_color "orange" elif [[ "$battery_percentage" -ge "$setting" && "$is_charging" == "enabled" ]]; then - log "Charge above $setting" + log "Disabling discharging: Charge above $setting, disabling charging" disable_charging change_magsafe_led_color "green" elif [[ "$battery_percentage" -lt "$setting" && "$is_charging" == "disabled" ]]; then - log "Charge below $setting" - enable_charging + log "Disabling discharging: Charge below $setting, enabling charging" + # use direct commands since enable_charging also calls disable_discharging, and causes an eternal loop + sudo smc -k CH0B -w 00 + sudo smc -k CH0C -w 00 change_magsafe_led_color "orange" fi @@ -362,6 +369,9 @@ if [[ "$action" == "charging" ]]; then enable_charging elif [[ "$setting" == "off" ]]; then disable_charging + else + log "Error: $setting is not \"on\" or \"off\"." + exit 1 fi exit 0 @@ -381,6 +391,9 @@ if [[ "$action" == "adapter" ]]; then disable_discharging elif [[ "$setting" == "off" ]]; then enable_discharging + else + log "Error: $setting is not \"on\" or \"off\"." + exit 1 fi exit 0 @@ -390,17 +403,11 @@ fi # Charging on/off controller if [[ "$action" == "charge" ]]; then - if ! $(validate_percentage "$setting"); then - log "Error: $setting is not a valid setting for battery maintain. Please use a number between 0 and 100" + if ! validate_percentage "$setting"; then + log "Error: $setting is not a valid setting for battery charge. Please use a number between 0 and 100" exit 1 fi - # Check if percentage is an integer [1-100] - if ! [[ $setting =~ ^[1-9][0-9]?$|^100$ ]]; then - log "Specified percentage ($setting) is not valid. Please specify an integer [1-100]." - exit 1 - fi - # Disable running daemon battery maintain stop @@ -410,14 +417,16 @@ if [[ "$action" == "charge" ]]; then # Start charging battery_percentage=$(get_battery_percentage) log "Charging to $setting% from $battery_percentage%" - enable_charging + enable_charging # also disables discharging # Loop until battery percent is exceeded while [[ "$battery_percentage" -lt "$setting" ]]; do - log "Battery at $battery_percentage%" - caffeinate -is sleep 60 - battery_percentage=$(get_battery_percentage) + if [[ "$battery_percentage" -ge "$((setting-3))" ]]; then + sleep 20 + else + caffeinate -is sleep 60 + fi done @@ -431,8 +440,8 @@ fi # Discharging on/off controller if [[ "$action" == "discharge" ]]; then - if ! $(validate_percentage "$setting"); then - log "Error: $setting is not a valid setting for battery maintain. Please use a number between 0 and 100" + if ! validate_percentage "$setting"; then + log "Error: $setting is not a valid setting for battery discharge. Please use a number between 0 and 100" exit 1 fi @@ -458,7 +467,7 @@ fi # Maintain at level if [[ "$action" == "maintain_synchronous" ]]; then - if ! $(validate_percentage "$setting"); then + if ! validate_percentage "$setting"; then log "Error: $setting is not a valid setting for battery maintain. Please use a number between 0 and 100" exit 1 fi @@ -538,13 +547,12 @@ if [[ "$action" == "maintain" ]]; then rm $pidfile 2>/dev/null battery disable_daemon enable_charging - change_magsafe_led_color battery status exit 0 fi # Check if setting is value between 0 and 100 - if ! $(validate_percentage "$setting"); then + if ! validate_percentage "$setting"; then log "Called with $setting $action" # If non 0-100 setting is not a special keyword, exit with an error. @@ -688,4 +696,4 @@ if [[ "$action" == "logs" ]]; then exit 0 -fi +fi \ No newline at end of file From a316b556aa8a3d47dd8952746d25018de1e7c31b Mon Sep 17 00:00:00 2001 From: Theodore Murphy <130824397+thdrmrphy@users.noreply.github.com> Date: Fri, 5 Apr 2024 17:49:03 +1100 Subject: [PATCH 7/7] =?UTF-8?q?Not=20sure=20what=20this=20commit's=20doing?= =?UTF-8?q?=20=C2=AF\=5F(=E3=83=84)=5F/=C2=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- battery.sh | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/battery.sh b/battery.sh index 2ee87c7..cf3e47f 100755 --- a/battery.sh +++ b/battery.sh @@ -507,26 +507,23 @@ if [[ "$action" == "maintain_synchronous" ]]; then while true; do # Keep track of status - if [[ "$battery_percentage" -ge "$((setting - 3))" && "$battery_percentage" -lt "$setting" && "$is_charging" == "enabled" ]]; then - sleep 20 + is_charging=$(get_smc_charging_status) - else + if [[ "$battery_percentage" -ge "$setting" && "$is_charging" == "enabled" ]]; then - if [[ "$battery_percentage" -ge "$setting" && "$is_charging" == "enabled" ]]; then - log "Charge above $setting" - disable_charging - change_magsafe_led_color "green" + log "Charge above $setting" + disable_charging + change_magsafe_led_color "green" - elif [[ "$battery_percentage" -lt "$setting" && "$is_charging" == "disabled" ]]; then - log "Charge below $setting" - enable_charging - change_magsafe_led_color "orange" + elif [[ "$battery_percentage" -lt "$setting" && "$is_charging" == "disabled" ]]; then - fi + log "Charge below $setting" + enable_charging + change_magsafe_led_color "orange" - sleep 60 + fi - fi + sleep 60 battery_percentage=$(get_battery_percentage)