~fincham/battery

5c23d656c03dcfd2bdcb63249e180feb60dc142e — Michael Fincham 6 years ago 8ebc0b3
Add the dang codebase
1 files changed, 55 insertions(+), 0 deletions(-)

A battery
A battery => battery +55 -0
@@ 0,0 1,55 @@
#!/usr/bin/python

"""
Iterrogate upowerd over dbus to see what's up with the synthesised composite battery device. No promises.

Michael Fincham <michael@hotplate.co.nz> 2017-01-16
"""

import dbus

class DisplayDevice(object):
    # from <https://upower.freedesktop.org/docs/Device.html#Device:State>
    battery_states = (
        'Unknown',
        'Charging',
        'Discharging',
        'Empty',
        'Fully charged',
        'Pending charge',
        'Pending discharge'
    )

    def __init__(self):
        self.bus = dbus.SystemBus()
        self.display_device = self.bus.get_object('org.freedesktop.UPower', '/org/freedesktop/UPower/devices/DisplayDevice')
        
    def get_property(self, property_name):
        # Some interesting properties for a battery:
        # Percentage
        # TimeToFull
        # TimeToEmpty
        # State
        return self.display_device.Get('org.freedesktop.UPower', property_name, dbus_interface=dbus.PROPERTIES_IFACE)
 
    def get_state(self):
        return self.battery_states[self.get_property('state')]

    def get_time(self):
        state = self.get_state()
        if state == 'Discharging':
            return device.get_property('TimeToEmpty')
        elif state == 'Charging':
            return device.get_property('TimeToFull')

if __name__ == '__main__':
    device = DisplayDevice()
    state = device.get_state()
    percentage = round(device.get_property('Percentage'))

    m = divmod(device.get_time(), 60)[0]
    h, m = divmod(m, 60)
    time = " %i:%i" % (h, m)

    print("%s %s%%%s" % (state, percentage, time))