- Registriert
- 2 Aug. 2009
- Beiträge
- 3.323
Hi,
ich habe die letzten Tage ein Skript für Ubuntu geschrieben, um meinen Stromverbrauch am X1 Nano im Auge zu behalten. Geht aber im Prinzip mit jedem Thinkpad. Ich habe es so gebastelt, dass beim Entladen die letzten fünf Minuten gemittelt werden und auf dieser Basis der Stromverbrauch angezeigt und die Restlaufzeit berechnet wird. So erhält man einen etwas konstanteren Wert als beim Rechnen mit dem aktuellen Stromverbrauch, der gerne mal stark schwankt.
Zur Anzeige habe ich das Gnome-Plugin "Argos" verwendet, das aber nur auf xorg und nicht auf Wayland funktioniert. Man muss auf dem Anmeldebildschirm auf xorg umschalten, damit das Plugin in 22.04 läuft. Alternativ kann man natürlich das Skript auch aus Conky heraus aufrufen, dann sieht man es halt nur auf dem Desktop. Ich finde es in der Top Bar sehr gut aufgehoben.
Meine Dateien liegen in ~/.conkysettings, weil ich es parallel auch für Conky verwende. Das Ganze ist ein bisschen gewachsener Code, deshalb ist es nicht besonders aufgeräumt, aber es funktioniert (bei mir) prima.
Viele Grüße
(Codeupdate auf Grundlage der bisherigen Rückmeldungen vom 13.12. : )
ich habe die letzten Tage ein Skript für Ubuntu geschrieben, um meinen Stromverbrauch am X1 Nano im Auge zu behalten. Geht aber im Prinzip mit jedem Thinkpad. Ich habe es so gebastelt, dass beim Entladen die letzten fünf Minuten gemittelt werden und auf dieser Basis der Stromverbrauch angezeigt und die Restlaufzeit berechnet wird. So erhält man einen etwas konstanteren Wert als beim Rechnen mit dem aktuellen Stromverbrauch, der gerne mal stark schwankt.
Zur Anzeige habe ich das Gnome-Plugin "Argos" verwendet, das aber nur auf xorg und nicht auf Wayland funktioniert. Man muss auf dem Anmeldebildschirm auf xorg umschalten, damit das Plugin in 22.04 läuft. Alternativ kann man natürlich das Skript auch aus Conky heraus aufrufen, dann sieht man es halt nur auf dem Desktop. Ich finde es in der Top Bar sehr gut aufgehoben.
Meine Dateien liegen in ~/.conkysettings, weil ich es parallel auch für Conky verwende. Das Ganze ist ein bisschen gewachsener Code, deshalb ist es nicht besonders aufgeräumt, aber es funktioniert (bei mir) prima.
Viele Grüße
(Codeupdate auf Grundlage der bisherigen Rückmeldungen vom 13.12. : )
Bash:
#!/bin/bash
# Get the current battery power in milliwatts
power_now=$(cat /sys/class/power_supply/BAT0/power_now)
power_now_display=$(($power_now / 1000000))
# Calculate the current battery percentage
energy_now=$(cat /sys/class/power_supply/BAT0/energy_now)
energy_full=$(cat /sys/class/power_supply/BAT0/energy_full)
battery_percent=$(($energy_now * 100 / $energy_full))
# Calculate the average power draw over the last n*slepetime seconds, e.g. 120 x 5 = 10 minutes
tail -n 120 /dev/shm/battery_log.txt > /dev/shm/battery_temp.txt
sleep 1
mv /dev/shm/battery_temp.txt /dev/shm/battery_log.txt
echo $(($power_now / 1000000)) >> /dev/shm/battery_log.txt
battery_avg=$(awk '{ sum += $1 } END { print sum / NR }' /dev/shm/battery_log.txt)
battery_avg_display=$(printf "%.1f \n" $battery_avg)
# Calculate the estimated time left on the battery
state=$(upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep "state")
if [[ $state == *"discharging"* ]]; then
on_ac=false
elif [[ $state == *"charging"* ]]; then
is_charging=true
else
is_charging=false
fi
charge_now=$(cat /sys/class/power_supply/BAT0/energy_now)
power_left=$(($charge_now / 1000))
power_left_wh=$(($charge_now / 1000000))
charge_full=$(cat /sys/class/power_supply/BAT0/energy_full)
charge_full_wh=$(($charge_full / 1000000))
charge_full_design=$(cat /sys/class/power_supply/BAT0/energy_full_design)
charge_full_design_wh=$(($charge_full_design / 1000000))
current_rate=$(($power_now / 1000))
current_rate_watt=$(($current_rate / 1000))
if [ $current_rate -gt 0 ]; then
battery_avg_sed=$(sed "s/,/./" <<< $battery_avg_display)
secs=$(echo "scale=0;$power_left * 3.6 / $battery_avg_sed" | bc -l)
time_left=$(printf '%d:%d\n' $((secs/3600)) $((secs%3600/60)))
hours_left=$(printf '%d\n' $((secs/3600)))
minutes_left=$(printf '%d\n' $((secs%3600/60)))
printf -v minutes_left "%02d" $minutes_left
time_full=$(($charge_full / $current_rate))
time_design=$(($charge_full_design / $current_rate))
else
time_left=0
time_full=0
time_design=0
fi
# Output the battery information
if [[ $on_ac == false ]]; then
output="Entlade mit $battery_avg_display W ($hours_left:$minutes_left h @ $power_left_wh/$charge_full_wh Wh, $battery_percent%)"
elif [[ $is_charging == true ]]; then
output="Lade mit $power_now_display W ($power_left_wh/$charge_full_wh Wh, $battery_percent%)"
else
output="Geladen ($power_left_wh/$charge_full_wh Wh, $battery_percent%)"
fi
echo $output
Zuletzt bearbeitet:





