Battery.rb
How to use it
The following ruby script can generates the following output
./battery.rb
[+] 01:02 (90%)
./battery.rb -v
The battery is charging Current Status 90% Remaining Charging Time 01h02m Charging Till 22:52 After 91 cycles the battery has 90% of its design capacity
./battery.rb -b
[######### ]
./battery.rb -h
This is a very small script for getting some usefull information about your battery
Please notice that this script requires tp_smapi which is only available on ThinkPads
Version 0.1 written by futejia during the 24C3 in Berlin
The script is published under the 'Beer License' which means you can do whatever you want, and when you like the script you buy me a beer
Command line options:
All information you usually need in one single line
-h Prints this help
-b Prints a nice ascii battery (Single line)
-v Gives some more information about the battery
The script itself
Simple safe this as battery.rb (Of course you need ruby and tp_smapi installed)
#!/usr/bin/ruby
def getFileValue(filename)
file = File.new(filename,"r")
content = file.gets
file.close
content = content.delete "\n"
end
def addLeadingZero(value)
if value < 10
output = "0" + value.to_s
else
output = value.to_s
end
end
begin
state = getFileValue("/sys/devices/platform/smapi/BAT0/state")
if state == "charging"
remaning_time = getFileValue("/sys/devices/platform/smapi/BAT0/remaining_charging_time").to_i
symbol = "[+]"
descriptingword = "Charging"
elsif state == "discharging"
remaning_time = getFileValue("/sys/devices/platform/smapi/BAT0/remaining_running_time").to_i
symbol = "[-]"
descriptingword = "Running"
elsif state == "idle"
remaning_time = 0
symbol = "[ ]"
descriptingword = "Idle"
else
puts "Unknown value: '"+state+"'"
end
percent = getFileValue("/sys/devices/platform/smapi/BAT0/remaining_percent").to_i
batterybar = (percent.to_f / 10).round
hours = remaning_time / 60
minutes = remaning_time % 60
if ARGV[0] == "-v"
puts "The battery is " + state
#getting some information about the current capacity
design_capacity = getFileValue("/sys/devices/platform/smapi/BAT0/design_capacity").to_i
last_full_capacity = getFileValue("/sys/devices/platform/smapi/BAT0/last_full_capacity").to_i
capacity = last_full_capacity * 100 / design_capacity
cycles = getFileValue("/sys/devices/platform/smapi/BAT0/cycle_count")
d = Time::now()
d += remaning_time * 60
puts "Current Status\t\t" + percent.to_s + "%"
puts "Remaining " + descriptingword + " Time\t" + addLeadingZero(hours) + "h" + addLeadingZero(minutes) + "m"
if state != "idle"
puts descriptingword + " Till\t\t" + addLeadingZero(d.hour()) + ":" + addLeadingZero(d.min())
end
puts ""
puts "After " + cycles.to_s + " cycles the battery has " + capacity.to_s + "% of its design capacity"
elsif ARGV[0] == "-b"
battery = ""
batterybar.downto(1) { battery += "#" }
batterybar.upto(9) { battery += " " }
puts "[" + battery + "]"
elsif ARGV[0] == "-h"
puts "This is a very small script for getting some usefull information about your battery"
puts "Please notice that this script requires tp_smapi which is only available on ThinkPads"
puts
puts "Version 0.1 written by futejia during the 24C3 in Berlin"
puts "The script is published under the 'Beer License' which means you can do whatever you want, and when you like the script you buy me a beer"
puts
puts "Command line options:"
puts " All information you usually need in one single line"
puts "-h Prints this help"
puts "-b Prints a nice ascii battery (Single line)"
puts "-v Gives some more information about the battery"
else
puts symbol + " " + addLeadingZero(hours) + ":" + addLeadingZero(minutes) + " (" + percent.to_s + "%)"
end
end