1

Added power.pl another dirty script to get battery status

This commit is contained in:
eleksir
2018-09-24 16:56:18 +03:00
parent 9727c60f17
commit a66337fa5d

54
power.pl Normal file
View File

@@ -0,0 +1,54 @@
#!/usr/bin/perl
#
# Prints laptop battery status
# Requires perl-net-dbus with perl-xml-twig
use strict;
use warnings "all";
use Net::DBus::Dumper;
use Net::DBus;
use Data::Dumper;
sub to_hours($); # translates seconds to HH:MM format
my $bus = Net::DBus->system;
my $upower = $bus->get_service("org.freedesktop.UPower");
my $properties = $upower->get_object("/org/freedesktop/UPower/devices/battery_BAT0", "org.freedesktop.DBus.Properties");
my $capacity = $properties->Get('org.freedesktop.UPower.Device', 'Percentage');
my $state = $properties->Get('org.freedesktop.UPower.Device', 'State');
my $time = "?";
if ($state == 2) {
# discharging
$time = $properties->Get('org.freedesktop.UPower.Device', 'TimeToEmpty');
# time in seconds, let's translate it to hours:minutes
$state = '▼';
} elsif ($state == 1) {
# charging
$time = $properties->Get('org.freedesktop.UPower.Device', 'TimeToFull');
$state = '▲';
} else {
# already charged
$time = 0;
$state = '•';
}
$time = to_hours ($time);
printf("[%s%% %s %s]", $capacity, $state, $time);
exit 0;
sub to_hours ($) {
my $sec = shift;
my $hrs = $sec / (60 * 60);
$hrs = 0 if ( $hrs < 1 );
my $min = ($sec - ($hrs * 60 * 60)) / 60;
$min = 0 if ( $min < 1 );
return sprintf("%02d:%02d", $hrs, $min);
}