From a66337fa5d9043a7448156d1bb04681b63ba42b8 Mon Sep 17 00:00:00 2001 From: eleksir Date: Mon, 24 Sep 2018 16:56:18 +0300 Subject: [PATCH] Added power.pl another dirty script to get battery status --- power.pl | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 power.pl diff --git a/power.pl b/power.pl new file mode 100644 index 0000000..f85ee2a --- /dev/null +++ b/power.pl @@ -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); +} +