#!/usr/bin/env perl # {{{ Description #=============================================================================== # Print Battery Information using Acpi::Class # Emulate acpiclient: http://sourceforge.net/projects/acpiclient/ #=============================================================================== # }}} # {{{ Modules use strict; use warnings; use Acpi::Class; # }}} # {{{ Define Variables # We will get information of BAT1: /sys/class/power_supply/BAT1 my $my_class = "power_supply"; my $my_device = "BAT1"; my $class = Acpi::Class->new( class => $my_class, device => $my_device); my $values = $class->g_values; my @attributes = qw(energy_now charge_now power_now current_now energy_full charge_full energy_full_design charge_full_design status capacity); # }}} # {{{ Obtain and calculate values my %att_value; foreach my $attribute (@attributes) { $att_value{$attribute} = $values->{$attribute}; } my $remaining_capacity = $att_value{'energy_now'} // $att_value{'charge_now'}; my $last_capacity = $att_value{'energy_full'} // $att_value{'charge_full'}; my $present_rate = $att_value{'power_now'} // $att_value{'current_now'}; my $design_capacity = $att_value{'energy_full_design'} // $att_value{'charge_full_design'}; my $percentage = $att_value{'capacity'} // $remaining_capacity * 100 / $last_capacity; my $battery_loss = 100 - $last_capacity * 100 / $design_capacity; my $status = $att_value{'status'}; my $seconds = 0; my $message = ""; if ( $status =~ /Discharging/ ) { $seconds = 3600 * $remaining_capacity / $present_rate; $message = "Remaining"; } elsif ( $status =~ /Charging/ ) { $seconds = 3600 * ($last_capacity - $remaining_capacity) / $present_rate; $message = "Until Charged"; if ($remaining_capacity > $last_capacity) { $seconds = 3600 * $remaining_capacity / $present_rate; $message = "Remaining, Charging on top last recorded full capacity"; } } elsif ( $status =~ /Unknown/ ) { $status = "Full"; } else { die "status = $att_value{'status'} and current_now = $present_rate" } my $there_are_seconds = $seconds; my $there_is_battery_loss = $battery_loss; my $minutes = int($seconds / 60); $seconds = $seconds % 60; my $hours = int($minutes / 60); $minutes = $minutes % 60; # }}} # {{{ Print values my $time = ""; $time = sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds) if ($there_are_seconds); $percentage = sprintf("%.0f%%", $percentage); $battery_loss = sprintf("%.1f%%", $battery_loss); print "$my_device: $status $percentage, "; print "$time $message, " if ($there_are_seconds); print "$battery_loss Battery Loss \n" if ($battery_loss); # }}}