Controlling the battery charging threshold on Asus laptop with Ubuntu 20.04
From kernel 5.4+ there is an ability to control charging of the laptop battery. In the
/sys/class/power_supply/BAT0/ are some variables useful for battery monitoring and controlling.
alarm device@ manufacturer serial_number uevent capacity energy_full model_name status voltage_min_design
capacity_level energy_full_design power/ subsystem@ voltage_now charge_control_end_threshold energy_now power_now technology cycle_count hwmon2/ present type
One of those variables is
charge_control_end_threshold, it is just an integer number indicating when to stop charging.
we can see actual value of treshold.
Simply whit writing into a variable, we can control when charging stops:
echo 70 | sudo tee /sys/class/power_supply/BAT0/charge_control_end_threshold
Whit this command, treshold is set to 70% and charging will stop on 69%.
Just for convenience, I’ve been made this bash script:
!/bin/bash echo $1 | sudo tee /sys/class/power_supply/BAT0/charge_control_end_threshold
And now just type on command prompt:
tresho 50 or whatever value you want.
Set this variable during system startup, for making it permanent
Create the following systemd service:
[Unit] After=network.service [Service] ExecStart=/usr/bin/tresho70.sh [Install] WantedBy=default.target
And this bash script:
#!/bin/bash echo '70' | sudo tee /sys/class/power_supply/BAT0/charge_control_end_threshold
Then activate the service:
sudo service tresho start
For adjusting battery charging threshold on system startup create the following systemd service:
/etc/systemd/system/battery-charge-threshold.service [Unit] Description=Set the battery charge threshold After=multi-user.target [Service] Type=oneshot ExecStart=/bin/bash -c 'echo 70 > /sys/class/power_supply/BAT0/charge_control_end_threshold' [Install] WantedBy=multi-user.target
and then enable it.
Warning: As of systemd 246, activation of this unit may cause to infinite restart of service above.
/etc/systemd/system/battery-charge-threshold.path [Path] PathExists=/sys/class/power_supply/BAT0/ Unit=battery-charge-threshold.service [Install] WantedBy=multi-user.target
Create this unit file and enable it. The service above should be disabled since the path unit activating it.